【发布时间】:2014-03-31 16:22:55
【问题描述】:
问题:我网站的合法流量收到“403 Forbidden”错误。
示例:来自用户代理 Twitterbot/1.0 的从 199.16.156.125 到 GET /robots.txt HTTP/1.1 的请求应该被允许,但被拒绝。
怀疑罪魁祸首:我的根 .htaccess 文件实现了 PerishablePress 的 5G 防火墙;来自各种 WordPress 安全插件的附加拒绝规则;我自己编写的一些拒绝规则;以及一长串被禁止的 CIDR。
示例代码(截断):
# ban all requests via HTTP/1.0
# UNLESS they are requests to either wp-cron or admin-ajax.
<ifModule mod_rewrite.c>
RewriteCond %{THE_REQUEST} !(HTTP/1\.1)$ [NC]
RewriteCond %{REQUEST_URI} !^(/wp-admin/admin-ajax\.php.*|/wp-cron\.php.*)
RewriteRule ^(.*)$ - [F,L]
</ifModule>
# 5G:[USER AGENTS]
<IfModule mod_setenvif.c>
SetEnvIfNoCase User-Agent ^$ keep_out
SetEnvIfNoCase User-Agent (casper|cmsworldmap|diavol|dotbot) keep_out
SetEnvIfNoCase User-Agent (flicky|ia_archiver|kmccrew) keep_out
SetEnvIfNoCase User-Agent (libwww|planetwork|pycurl|skygrid) keep_out
SetEnvIfNoCase User-Agent (SISTRIX|AhrefsBot|YandexBot|Baidu|SiteExplorer|MJ12bot|Browserlet|msnbot\-media) keep_out
SetEnvIfNoCase User-Agent (Java|Wget|CPython|ruby|panscient\.com) keep_out
<Limit GET POST PUT>
Order Allow,Deny
Allow from all
Deny from env=keep_out
</Limit>
</IfModule>
#allowed IP (example)
allow from 255.255.255.255
#banned networks
deny from 199.119.224.0/22
deny from 199.30.48.0/21
deny from 99.198.96.0/19
还有更多,但我怀疑问题可能出在上面的示例代码中。
我尝试了什么: 1. 编辑 .htaccess 规则以尝试解决问题。 2. 创建 403 记录器脚本以提供有关收到 403 响应的请求的其他详细信息。 (假设是被禁止的请求可能包含额外的 X-Forwarded-For 标头,其中包含来自被禁止网络的 IP 地址;但是,事实证明这个假设是不正确的。) 3. 用头撞桌子。
编辑
如果普遍认为发布的 sn-p 不会导致我所描述的问题,我将接受一个答案,以帮助我通过更有效的故障排除来追踪问题的实际原因。
更新
我感谢社区的意见,并认为我会提供更新。
最后,我联系了我的网络主机寻求帮助。经过一番反复讨论,我得知我的主机确实禁止 Twitterbot 从他们的网络中使用,因为它是一个资源占用者,显然是通过访问运行优化不佳的 WordPress 插件的网站。所以这个具体结果毕竟不是 .htaccess 问题。
但是,我仍然有一个客户无法访问我的网站,而是收到 403 禁止消息:合法流量被拒绝,如上所述。我的主机确认他们没有阻止我客户的 IP 地址。我还没有找到解决这个问题的方法。我什至在我的“拒绝”指令列表之前的“允许”指令中列出了他的专用 IP,但他仍然被拒绝。我编辑了上面的代码示例进行演示。
【问题讨论】:
-
你确定你没有在底部被禁止的网络中禁止他们吗?你没有把它们都展示出来。你把它截断了。
-
禁止网络列表按顺序排列,从(理论上)1.0.0.0/8 到 99.0.0.0/8,因此应该很容易直观地识别给定 IP 是否在禁止网络。所以我认为这不是问题。这是一个有效的问题。如果您认为有帮助,我可以发布整个被禁网络列表。
-
我问的原因是因为你有一些 199.x.x.x 子网,你可能包括在其中之一。您的 199.x.x.x 禁止网络是什么?
-
只是我列出的那些。该部分内容为:拒绝来自 198.143.128.0/18 拒绝来自 198.147.20.0/22 拒绝来自 198.23.128.0/17 拒绝来自 198.23.150.128/26 拒绝来自 198.27.64.0/18 拒绝来自 198.50.128.0/17 拒绝来自 199.119。 224.0/22 拒绝来自 199.30.48.0/21 拒绝来自 2.0.0.0/8