如何在 Apache 中阻止特定的用户代理
How to block a specific user agent in Apache
我正在配置我的 Django 应用程序以通过电子邮件向我发送错误(异常)。
通常没问题 - 但我的电子邮件托管在 Office 365 上,Microsoft 似乎会自动扫描并加载电子邮件中的 URLs。
结果是它命中了我的 Django 应用程序中的 URL,并导致另一个错误...和另一封电子邮件。最终结果:一个迷人的小邮件循环,可在几秒钟内向我发送 50 多条消息。
我在我的 Apache 日志中发现了这样的条目:
157.55.39.163 - - [22/Aug/2018:17:30:05 +0000] "GET /testerror HTTP/1.1" 500 5808 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
我想阻止对用户代理的访问(包含 "BingPreview"),这样我就可以防止这个循环。
我把这个放到我的虚拟主机中:
SetEnvIf User-Agent "^.*BingPreview.*$" bad_user
<Directory /path/top/my/app/>
<Files wsgi.py>
Require not env bad_user
</Files>
</Directory>
但是当我重新加载 apache 时,出现错误 negative Require directive has no effect in <RequireAny> directive
。
明白了。感谢您的提示,@Tobias K.
我启用了 mod_rewrite,因为它尚未启用。
a2enmod rewrite
然后我把它放到我的虚拟主机中:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*BingPreview.*$
RewriteRule . - [R=403,L]
并重启apache生效:
service apache2 restart
而且我可以在 apache 日志中看到 BingPreview 被阻止(注意 403):
157.55.39.163 - - [22/Aug/2018:18:12:09 +0000] "GET /testerror HTTP/1.1" 403 4385 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
But when I reload apache, I get the error negative Require directive has no effect in <RequireAny> directive
如果没有明确说明,<RequireAny>
是默认的 "implied" 容器。
您可以通过执行以下操作来解决此问题:
SetEnvIf User-Agent "BingPreview" bad_user
<Directory /path/top/my/app/>
<Files wsgi.py>
<RequireAll>
Require all granted
Require not env bad_user
</RequireAll>
</Files>
</Directory>
"regex" BingReview
与 ^.*BingPreview.*$
相同。
我正在配置我的 Django 应用程序以通过电子邮件向我发送错误(异常)。
通常没问题 - 但我的电子邮件托管在 Office 365 上,Microsoft 似乎会自动扫描并加载电子邮件中的 URLs。
结果是它命中了我的 Django 应用程序中的 URL,并导致另一个错误...和另一封电子邮件。最终结果:一个迷人的小邮件循环,可在几秒钟内向我发送 50 多条消息。
我在我的 Apache 日志中发现了这样的条目:
157.55.39.163 - - [22/Aug/2018:17:30:05 +0000] "GET /testerror HTTP/1.1" 500 5808 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
我想阻止对用户代理的访问(包含 "BingPreview"),这样我就可以防止这个循环。
我把这个放到我的虚拟主机中:
SetEnvIf User-Agent "^.*BingPreview.*$" bad_user
<Directory /path/top/my/app/>
<Files wsgi.py>
Require not env bad_user
</Files>
</Directory>
但是当我重新加载 apache 时,出现错误 negative Require directive has no effect in <RequireAny> directive
。
明白了。感谢您的提示,@Tobias K.
我启用了 mod_rewrite,因为它尚未启用。
a2enmod rewrite
然后我把它放到我的虚拟主机中:
RewriteEngine on
RewriteCond %{HTTP_USER_AGENT} ^.*BingPreview.*$
RewriteRule . - [R=403,L]
并重启apache生效:
service apache2 restart
而且我可以在 apache 日志中看到 BingPreview 被阻止(注意 403):
157.55.39.163 - - [22/Aug/2018:18:12:09 +0000] "GET /testerror HTTP/1.1" 403 4385 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534+ (KHTML, like Gecko) BingPreview/1.0b"
如果没有明确说明,But when I reload apache, I get the error
negative Require directive has no effect in <RequireAny> directive
<RequireAny>
是默认的 "implied" 容器。
您可以通过执行以下操作来解决此问题:
SetEnvIf User-Agent "BingPreview" bad_user
<Directory /path/top/my/app/>
<Files wsgi.py>
<RequireAll>
Require all granted
Require not env bad_user
</RequireAll>
</Files>
</Directory>
"regex" BingReview
与 ^.*BingPreview.*$
相同。