在 .htaccess 中设置 User-Agent 阻止,否则我的网站会受到攻击

Setting up User-Agent blocking in .htaccess or my site is being attacked

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

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

如何正确屏蔽用户代理 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?

是的,我现在写这个,不知道这里有没有正确的选项?

# 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 可变性和网络速度差异,我倾向于怀疑浏览器或某些漏洞利用是潜在原因。除非是同时攻击很多地方的bot网络?

请注意,我们已经看到来自较长版本的浏览器字符串的看似合法的流量:即代理字符串中超出 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 都不关心 / 是否未转义 - 他们的文档甚至也包括这样的示例。)

请注意,如果您只想阻止一个特定的字符串,则不必使用正则表达式,方法是使用 =,如下所示。在这种情况下不需要转义,但引号是:

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/ Other common tools (e.g. curl) are great for it too: https://www.cyberciti.biz/faq/curl-set-user-agent-command-linux-unix/

之类的东西进行测试