我怎样才能阻止我的服务器上的所有网站的用户代理?

我最初在webmasters.stackexchange.com发布,但被告知我会在这里得到一个更好的接待。


在过去的几天里,我一直忍受着似乎是(可能是无意的)DDOS攻击。 我已经从一个代理标识为“Mozilla / 4.0(compatible; ICS)”的许多请求,Apache通过所有可用的内存吃饭。

因此,我想阻止这个用户代理的所有请求,所以我尝试在httpd.conf中执行此操作:

SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user Deny from env=bad_user 

但是,当我重新启动Apache它抱怨在这里使用deny 。 无需将其包装在locationdirectory块中,这意味着我必须为每个站点添加一个新块,有什么办法可以拒绝访问整个服务器?


更新:我得到的错误

  • 重新启动Web服务器apache2
    /etc/apache2/httpd.conf第4行的语法错误:这里拒绝不允许[fail]

现在看起来像一个古老的问题,但我也想这样做,从上面的神经find答案。 这是不正确的 – 在我看来,它应该是<Location "/"> ,而SetEnvIf需要一个正则expression式,所以括号需要引用。

这对我来说适用于所有虚拟主机的访问控制:

 SetEnvIfNoCase User-Agent "^Mozilla/4.0 \(compatible; Synapse\)" bad_ua <Location "/"> Deny from env=bad_ua </Location> 

只要在虚拟主机定义之前包括这个。

mod_rewrite可以根据文档在服务器级configuration:

 RewriteCond %{HTTP_USER_AGENT} "Mozilla/4\.0 \(compatible; ICS\)" [nocase] RewriteRule ^.*$ – [forbidden,last] 

不要忘记在RewriteCond逃避正则expression式

如果SetEnv行的语法是正确的,你应该可以像下面这样把它扔到conf里:

 <Location *> SetEnvIfNoCase User-Agent "Mozilla/4.0 (compatible; ICS)" bad_user Deny from env=bad_user </Location> 

应该允许在所有的虚拟主机上运行 – 只是在2.2.24上testing,就像一个魅力。