【问题标题】:How to block unwanted hosts in .htaccess?如何在 .htaccess 中阻止不需要的主机?
【发布时间】:2021-04-04 17:35:05
【问题描述】:

这些.htaccess 规则有效:

<RequireAll>
Require all granted
Require not ip 1.22.333.444
.
.
.
</RequireAll>

这些.htaccess 规则不起作用:

<RequireAll>
Require all granted
.
.
.
Require not host bad_host
</RequireAll>

这些.htaccess 规则也不起作用:

<IfModule mod_rewrite.c>
RewriteCond %{REMOTE_HOST} (163data|amazonaws|colocrossing|poneytel) [NC]
RewriteRule .* - [F,L]
</IfModule>

我在顶部的.htaccess文件中写了:

HostnameLookups On

结果是一条错误消息,因为.htaccess 中不允许此命令。所以我删除了这个声明。

在Apache中,有一个“remote_host”对应某个IP。 我希望 tp 阻止不需要的主机访问我的网站,例如垃圾邮件发送者或其他在我的网站上产生大量无用流量的主机。

上面的代码示例有什么问题?

【问题讨论】:

  • 解释你到底想防止什么。
  • 我想阻止不需要的主机访问我的网站。
  • 您如何准确定义“主机”以及为什么不需要它们?
  • 我网站的访问者有一个IP,并且该IP对应于Apache中的“REMOTE_HOST”。 IP / remote_host 是不需要的,例如垃圾邮件发送者或在我的网站上制造无用流量。
  • 日志文件示例:远程主机 = aftr-62-216-208-229.dynamic.xxx-online.de IP = 62.216.000.999

标签: apache .htaccess mod-rewrite mod-authz-host


【解决方案1】:

HostnameLookups 需要在 服务器配置 中设置,以便设置 REMOTE_HOST 服务器变量。这不能在.htaccess 中设置(如您所见)。默认为Off,出于性能原因,通常在共享主机上永久禁用。

但是,Require [not] host bad_host 不依赖于设置的HostnameLookups,所以应该仍然可以工作(前提是主机没有以某种方式禁用它)。请注意,bad_host 允许部分匹配,从 end 匹配,并且仅匹配完整的主机段。例如。 ample.comfoo.bar.example 不会匹配 foo.bar.example.com,但 example.combar.example.com 会匹配。

请注意,Require [not] host 会导致 Apache 执行“双重反向 DNS 查找”。首先从客户端 IP 地址查找主机名(反向 DNS 查找),然后对主机名进行正向查找以检查 IP 地址是否匹配。如果这不匹配,则检查失败。

也许forward-dns 仅检查就足够了(需要 Apache 2.4.19)?这仅执行反向 DNS 查找以获取主机名。主机名未经过验证。

例如:

Require not forward-dns example.com

【讨论】:

  • 感谢有关“请求...不是主机”的信息。 “Requ... not forward-d..” 也不起作用。我认为这与“请求...不是主机”具有相同的规则。如我上面的文字所示,“RewriteCon.%{REM.....”也不起作用。我会用“从右开始”的规则来试试。
猜你喜欢
  • 2015-04-03
  • 2010-11-29
  • 1970-01-01
  • 1970-01-01
  • 2023-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多