在.htaccess中设置User-Agent阻止或我的网站受到攻击

问题描述

我的网站受到攻击。 我所做的: 在.htaccess文件中,大约有4200个IP地址被阻止,以这种方式批量发送请求: 允许所有人 从200.6.169.250拒绝 拒绝来自85.109.127.48

所有请求都来自单个用户代理。

如何正确阻止用户代理 Mozilla / 5.0(Windows NT 10.0; Win64; x64)AppleWebKit / 537.36(KHTML,例如Gecko)Chrome / 85.0.4183.121 Safari / 537.36 OPR / 71.0.3770.284?

是的,目前我写这篇文章,不知道这里是否有正确的选择?

# Blocking user agents:

RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.121 Safari/537.36 OPR/71.0.3770.284" [OR]
RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.121 Safari/537.36" [OR]
RewriteCond %{HTTP_USER_AGENT} "^Mozilla/5\.0 (Windows NT 10\.0; Win64; x64) AppleWebKit/537\.36 (KHTML,like Gecko) Chrome/85\.0\.4183\.121 Safari/537\.36" [OR]
RewriteCond %{HTTP_USER_AGENT} "^Mozilla\/5\.0 \(Windows NT 10\.0; Win64; x64\) AppleWebKit\/537\.36 \(KHTML,like Gecko\) Chrome\/85\.0\.4183\.121 Safari\/537\.36$"
RewriteRule ^ - [F] 

解决方法

# Blocking user agents:
RewriteEngine On
RewriteCond %{HTTP_USER_AGENT} "=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.121 Safari/537.36 OPR/71.0.3770.284" [OR]
RewriteCond %{HTTP_USER_AGENT} "^Mozilla\/5\.0 \(Windows NT 10\.0\; Win64\; x64\) AppleWebKit\/537\.36 \(KHTML\,like Gecko\) Chrome\/85\.0\.4183\.121 Safari\/537\.36 OPR\/71\.0\.3770\.284" [OR]
RewriteCond %{HTTP_USER_AGENT} "^Mozilla\/5\.0 \(Windows NT 10\.0\; Win64\; x64\) AppleWebKit\/537\.36 \(KHTML\,like Gecko\) Chrome\/85\.0\.4183\.121 Safari\/537\.36\ (.*)$"
RewriteRule ^.*$ - [F]

第一个和第二个锁相同,而第三个则允许您更改行尾。您只能留下一个可供选择。这取决于要求。

,

我看到了同样的攻击。阻止该浏览器字符串(而不是IP到处都是)是最好的选择。考虑到攻击的速度,IP可变性和网络速度的差异,我倾向于怀疑浏览器或某些漏洞利用是潜在的原因。除非是一个僵尸网络同时攻击多个地方?

请注意,我们已经从较长版本的浏览器字符串中看到了合法流量:即,Safari/537.36之外的代理字符串中的其他信息似乎是合法的,而只有那些在该确切点结束的信息看来至少是某种形式的肯定型机器人。

如果您想阻止所有变体,可以使用以下方法:

# Blocking user agents:
RewriteEngine On
RewriteCond "%{HTTP_USER_AGENT}" "^Mozilla/5\.0 \(Windows NT 10\.0; Win64; x64\) AppleWebKit/537\.36 \(KHTML,like Gecko\) Chrome/85\.0\.4183\.121 Safari/537\.36.*$"
RewriteRule ^ - [F]

转义括号是必需的(就像您在上一个条件中所做的那样),因为RewriteCond默认情况下期望正则表达式。尽管这些点会很好,但我还是希望明确一点。 (无论出于什么原因,Apache都不关心/不会被转义-它们的文档甚至也包括这样的示例。)

请注意,如果您只想阻止一个特定的字符串,则可以使用=来使用Regex,如下所示。在这种情况下,不需要转义,但是引号是:

RewriteCond "%{HTTP_USER_AGENT}" "=Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML,like Gecko) Chrome/85.0.4183.121 Safari/537.36"

我建议使用https://addons.mozilla.org/en-US/firefox/addon/user-agent-string-switcher/之类的东西进行测试,其他常用工具(例如curl)也很适合:https://www.cyberciti.biz/faq/curl-set-user-agent-command-linux-unix/