1

我的服务器受到 HTTP POST 攻击,我想将所有这些请求发送到 403,而不是让它们被 mod_security 捕获,以提高拒绝速度并减轻 Apache 的负担。这是目前通过 mod_security 发生的事情:

[Tue Jul 31 23:40:42 2012] [error] [client 24.201.202.189] ModSecurity: Access denied with code 403 (phase 2). Operator EQ matched 0 at REQUEST_HEADERS. [file "/var/asl/rules/10_asl_rules.conf"] [line "63"] [id "390616"] [rev "2"] [msg "Atomicorp.com WAF Rules: POST request must have a Content-Length header"] [severity "WARNING"] [hostname "some-server.domain.com"] [uri "/index.php/1.0"] [unique_id "UBhQ2myulQkAADbaEm8AAACN"]

我正在尝试通过 mod_rewrite 将对 index.php 的任何访问发送到 403,但它似乎不起作用。我假设这些要么不适用于 POST,要么我遗漏了一些东西。这是我现在正在使用的:

RewriteEngine On
RewriteCond %{HTTP_HOST} !^http://(www\.)?some-server\.domain\.com
RewriteRule ^index\.php$ [F]

服务器名称的结构与上面类似,但出于显而易见的原因,我已将其替换为一些通用名称。

任何人都可以通过 mod_rewrite 规则对此提供反馈以及我可能做错了什么吗?

谢谢!

4

1 回答 1

1

在这种情况下,由于攻击总是相同的,因此解决方案是这样的:

<LocationMatch "^/index.php/1.0">
order allow,deny
deny from all
</LocationMatch>

由于攻击者从那时起总是触发“被服务器配置拒绝”,因此像这样一次性阻止它们是轻而易举的事:

for i in $(grep "client denied by server configuration: /usr/local/apache/htdocs/index.php" /usr/local/apache/logs/error_log | cut -d\  -f8 | tr -d ']' | sort | uniq); do csf -d $i; done

问题解决了。

于 2012-08-05T13:34:59.963 回答