You are here

apache 2.4 禁用特定remoteip的访问

网站又受到了DDOS攻击,由于apache是放在了nginx的后端运行,所以日志看不到用户的真实IP

apache2.4自带了mod_remoteip,我们将它启用,在http.conf的配置中:

LoadModule remoteip_module modules/mod_remoteip.so

增加如下代码:

<IfModule remoteip_module>

RemoteIPHeader X-Forwarded-For

RemoteIPProxiesHeader X-Forwarded-By

</IfModule>


LogFormat里面增加'%a':

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

    LogFormat "%h %a %l %u %t \"%r\" %>s %b" common

原来没有,这个%a就是用来输出真实IP地址的。


这个时候在apache的日志里面就可以看到黑客的真实IP地址。


如何封掉这个IP呢?在apache的配置文件http.conf里面使用下面的代码:

<If "%{REMOTE_ADDR} == '221.122.70.2'">

    Require all denied

</If>


上面的参考代码:

https://httpd.apache.org/docs/2.4/howto/access.html

<If "%{HTTP_USER_AGENT} == 'BadBot'">

    Require all denied

</If>

我开始不确定这个REMOTE_ADDR就是环境变量的名字,后来换成HTTP_REMOTE_ADDR,apache就会重启不了。检查日志和错误日志,发现了变化。确认上面的代码是有效的。


我这段代码,只能封一个IP,这里的REMOTE_ADDR就是真实IP。


重启apache,这个用户的访问记录仍然存在,错误日志里面,


[Sat Feb 16 12:56:37.229612 2019] [authz_core:error] [pid 7104:tid 1800] [client 221.122.70.2:4488] AH01630: client denied by server configuration: ..., referer: http://www.example.comn/sites/all/modules/superfish/admin.php


经过观察,确实限制住了黑客的攻击行为,但是黑客的攻击行为还是到达了apache。只是到达以后,就被封掉,后续没有支持php,mysql,对正常用的影响就不大了。


这个黑客很熟悉Drupal,发送的DDOS请求都是Post。


Drupal版本: