因为本站使用了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就可以了。