![如何使用 Apache2 或 iptables 拒绝没有反向 DNS 的 IP?](https://linux22.com/image/520434/%E5%A6%82%E4%BD%95%E4%BD%BF%E7%94%A8%20Apache2%20%E6%88%96%20iptables%20%E6%8B%92%E7%BB%9D%E6%B2%A1%E6%9C%89%E5%8F%8D%E5%90%91%20DNS%20%E7%9A%84%20IP%EF%BC%9F.png)
使用 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 来实现:
答案4
在您的声明中只需添加类似以下内容:
Order Deny,Allow
Deny from all
Allow from .com .gov .org .edu
您将需要添加本地私有局域网,127.0.0.1,等等...