欢迎来到 岁月小筑

Apache通过X-forwarded-for来记录CDN后客户端IP,并实现封锁

因为本站使用了CDN,所以直接记录日志是无法记录真实IP的,同样,也无法通过iptables封锁IP,经过百度后发现,原来通过X-forwarded-for居然可以看到CDN后客户端的IP,并通过设置,封锁IP

我的apache日志记录设置写在httpd.conf下,如果找不到,可以搜索<IfModule log_config_module>来看看日志设置在哪里

默认情况下log日志格式为:

LogFormat "%h %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

其中%h 是记录访问者的IP,如果在web的前端有一层代理,那么这个%h其实就是代理机器的IP,这不是我们想要的。在这种情况下,
%{X-FORWARDED-FOR}i  字段会记录客户端真实的IP。所以log日志改为:

LogFormat "%h %{X-FORWARDED-FOR}i %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined

成功修改后,service httpd restart重启以便启用新设置,这时就能在log文件中看到客户端的IP了。

然后在网站配置中(我的是在设置vhost目录下的conf文件),假设我要封锁IP:223.5.5.5

 
   
        SetEnvIf X-Forwarded-For "^(223\.5\.5\.5)" Deny1
        Options None
        AllowOverride None
        Order deny,allow
         Allow from all
         Deny from env=Deny1
 

这样,再重启httpd就可以了。

点赞

发表评论

电子邮件地址不会被公开。