如何使用 Apache2 或 iptables 拒绝没有反向 DNS 的 IP?

如何使用 Apache2 或 iptables 拒绝没有反向 DNS 的 IP?

使用 Apache2 或 iptables,有没有办法如果访问者的 IP 没有反向 DNS 或根本无法解析,是否拒绝访问者?

我有一个网站,针对的是拥有有效反向 DNS 的特定人群。一些没有反向 DNS 的垃圾邮件发送者和黑客会来尝试向我的网站发送垃圾邮件/入侵我的网站。

我的垃圾邮件拦截器拒绝了他们,但我仍然想阻止他们访问我的网站。

答案1

你可以用 php 或者你喜欢的语言轻松实现(对于 phphttp://php.net/manual/en/function.gethostbyaddr.php)。也许如果您通过检查其反向 DNS 状态批准了来访客户端,那么您就可以以类似于正常用户名/密码登录的方式“登录他们”。

通常 .htaccess 文件或 iptables 可能是更好的解决方案,但由于您有一个非常特殊的要求,您可能需要脚本语言的灵活性。

答案2

由于 DNS 查询速度很慢,我不会在 Apache 级别上执行此操作。

相反,我会在幕后做这件事。例如,使用一些自己编写的 shell/perl 脚本来跟踪 Apache 访问日志,执行 dns 查询,如果查询失败,则只需将 IP 地址添加到(临时)禁止列表中。您可以使用失败2ban如果你不愿意为自己编写一些 Perl。

无论如何,请小心!即使是一些合法访问者也可能没有可解析的 DNS 名称。

答案3

一些人指出,由于 DNS 解析速度慢,这通常不是一个好主意。但如果你想这样做,你可以用 mod_access 来实现:

http://httpd.apache.org/docs/2.0/mod/mod_access.html

答案4

在您的声明中只需添加类似以下内容:

Order Deny,Allow
Deny from all
Allow from .com .gov .org .edu

您将需要添加本地私有局域网,127.0.0.1,等等...

相关内容