1

这些.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 防止不需要的主机访问我的网站,例如垃圾邮件发送者或其他在我的网站中产生大量无用流量的主机。

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

4

1 回答 1

0

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

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

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

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

例如:

Require not forward-dns example.com
于 2020-12-28T00:43:23.057 回答