通过用户代理string阻止apache访问

我有一个使用代理攻击我所服务的网站的scripter。

我注意到,他们倾向于通过软件使用特定的常见用户代理string(即http://www.itsecteam.com/en/projects/project1_page2.htm“Havij高级SQL注入软件”用user_agentstringMozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Havij )。 我知道任何值得join的破解软件都可能会修改它的用户代理string,但是对于脚本编写者来说,在某些时候我必须处理这个function。

那么,是否有任何软件通过匹配用户代理string来自动阻止访问和永久列入黑名单

您可以通过BrowserMatch拒绝访问,并通过SetEnvIf拒绝示例:

 SetEnvIfNoCase User-Agent "^Wget" bad_bot SetEnvIfNoCase User-Agent "^EmailSiphon" bad_bot SetEnvIfNoCase User-Agent "^EmailWolf" bad_bot <Directory "/var/www"> Order Allow,Deny Allow from all Deny from env=bad_bot </Directory> 

要永久阻止它们,你必须编写自定义的日志文件,并使用fail2ban来禁止它们与iptables

例如创buildLogFormat

 LogFormat "%a %{User-agent}i" ipagent 

将日志logging添加到您的虚拟主机/服务器范围内

 CustomLog /var/log/apache2/useragent.log ipagent 

/etc/fail2ban/filter.d/baduseragent.conf

 [Definition] failregex = ^<HOST> Mozilla/4\.0 \(compatible; MSIE 7\.0; Windows NT 5\.1; SV1; \.NET CLR 2\.0\.50727\) Havij$ 

/etc/fail2ban/jail.conf

 [apache-bad-user-agent] enabled = true port = 80,443 protocol = tcp filter = baduseragent maxretry = 1 bantime = 86400 logpath = /var/log/apache2/useragent.log 

我想我明白你的问题。 我会提供更详细的解释,如果这是你在找什么。 (这也可以作为其他事物的陷阱)

  • 在apache2中启用mod_rewrite引擎
  • 创build一个trap.php,访问可以做任何你喜欢的事情。 例如,我让它将所有访问者的IP添加到拒绝访问我的网站的黑名单。
  • 创build一个你不喜欢的useragents文件,每行一个像这样
    bas_useragent [选项卡]黑色
    useragent_bad [tab}黑色
  • 现在,添加你的mod_rewrite,匹配来自不良useragents的地图,然后在有地图的情况下重新评估你的陷阱。 规则可能看起来像这样:

    RewriteMap badlist txt:~/bad_useragent_list
    RewriteCond %{HTTP_USER_AGENT} .* [NC]
    RewriteCond ${badlist:%1|white} ^black$ [NC]
    RewriteRule (.*) "/trap.php" [L]


  • 这基本上匹配的文件中的关键字useragent,如果它没有发现它被认为是“白色”和请求是未经修改的。 如果find了,并且关联的值是“黑色”,那么这个请求会被重写,进入你的trap.php文件,这个文件可以做任何你喜欢的事情。
  • 一些可能的想法。 让另一个脚本观看trap.php写入IP的通用文件。 如果这个公共文件改变了,这个观察者读取新的信息,parsing出IP地址,并且向阻止来自该地址的所有通信量的IP表添加规则。 我希望这有帮助! 再次,如果你想要更多的细节,只需在这里回复。