通过用户代理字符串阻止 Apache 访问

通过用户代理字符串阻止 Apache 访问

我有一个脚本编写者正在使用代理攻击我正在服务的网站。

我注意到他们倾向于通过具有特定常见用户代理字符串的软件访问该网站(即http://www.itsecteam.com/en/projects/project1_page2.htm“Havij 高级 SQL 注入软件”,其 user_agent 字符串为Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; SV1; .NET CLR 2.0.50727) Havij)。我知道任何值得一试的破解软件都可能能够修改其用户代理字符串,但我同意脚本编写者在某些时候必须处理该功能。

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

答案1

您可以通过 BrowserMatch 和 SetEnvIf 中的 Deny 来拒绝访问,例如:

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 禁止它们

例如创建 LogFormat

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

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

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

答案2

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

  • 在 apache2 中启用 mod_rewrite 引擎
  • 创建一个 trap.php,访问时可以做任何你想做的事情。例如,我让其将所有访问者 IP 添加到黑名单,以拒绝访问我的网站。
  • 创建一个你不喜欢的用户代理文件,每行一个,像这样
    bas_useragent [tab] black
    useragent_bad [tab} black
  • 现在,添加与坏用户代理的映射相匹配的 mod_rewrite,然后如果存在映射,则将其请求到您的陷阱。规则可能如下所示:

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

  • 这基本上将用户代理与文件中的键进行匹配,如果未找到,则假定为“白色”,并且请求未修改。如果找到,并且关联值为“黑色”,则重写请求以转到 trap.php 文件,该文件将执行您想要的任何操作。
  • 一些可能的想法。让另一个脚本监视 trap.php 向其写入 IP 的公共文件。如果此公共文件发生变化,此监视程序将读取新信息,解析 IP 地址,并向 IP 表添加一条规则,阻止来自该地址的所有流量。希望这能有所帮助!同样,如果您想要更多详细信息,请在此处回复。

相关内容