我们突然成为 DDOS 攻击的受害者。我们正在尝试使用一些 .htaccess 规则来阻止 affending 参数,使用以下命令向主页上发出的任何帖子请求以及查询字符串开头具有特定字段的任何请求显示 403 禁止页面:
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(ptrxcz|xclzve).* [NC]
RewriteRule ^(.*)$ http://%{REMOTE_ADDR} [F,L]
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} /
RewriteRule ^(.*)$ http://%{REMOTE_ADDR} [F,L]
基本上,只要我在 SSH 中使用 wget 访问带有有问题的查询字符串的文件,但不在浏览器窗口中,这都能正常工作。
此外,Postmaster Google Chrome 插件会阻止对主页的发布请求,但是 curl -d 请求不会被阻止,所以我很难确定哪些工具可以信任,因为它们会给出不同的结果(浏览器、SSH、邮局局长)。
我也在使用带有永久链接的 Wordpress,我想知道这些是否会以某种方式影响这一点,因为这些是 .htaccess 文件中唯一的其他内容。一旦我从 .htaccess 文件中删除了这些,我就会按预期工作。这是我当前规则之后的 Wordpress .htaccess。
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
此外,如果我更改我的预 Wordpress 规则并删除 [F] 和 REMOTE_ADDR 部分并将其替换为以下内容以将其重定向到不存在的 URL,则此重定向正确,这意味着它可能与 [ F] 和 REMOTE_ADDR 部分。
RewriteEngine On
RewriteCond %{QUERY_STRING} ^(ptrxcz|xclzve).* [NC]
RewriteRule ^(.*)$ http://www.pleasegoawayandnevercomebackagain.com [R=301,L]
RewriteEngine On
RewriteCond %{REQUEST_METHOD} POST
RewriteCond %{REQUEST_URI} ^/$
RewriteRule ^(.*)$ http://www.pleasegoawayandnevercomebackagain.com [R=301,L]
除上述外,还有待进一步调查。以下规则有效:
RewriteEngine On
RewriteCond %{QUERY_STRING} !.*test.* [NC]
RewriteRule ^(.*)$ http://%{REMOTE_ADDR} [F]
这里的区别是我正在检查查询字符串值的负匹配。这意味着除了查询字符串中带有 test 的页面外,每个页面都被禁止。您知道为什么否定匹配有效而肯定搜索无效吗?这是语法问题还是与在 htaccess 重写条件中搜索正值有关?