我被中国欺骗了,不知道为什么我不能阻止他们对我的服务器的请求。
//主机.拒绝
ALL: item.taobao.com
ALL: 117.25.128.*
但是当我在网络服务器上查看错误日志时,tail -f /var/log/apache2/error.log
请求仍然被允许通过。
问题:为什么我的 /etc/hosts.deny 配置不起作用?
答案1
该文件名为
/etc/hosts.deny
,而不是host.deny
并非所有服务都使用 tcp 包装器。
sshd
例如,默认情况下不会。阿帕奇也没有。您可以用来
iptables
阻止来自 117.25.128/24 的所有数据包,例如:iptables -I INPUT -s 117.25.128.0/24 -j DROP
更好的是,您可以使用失败2禁止监视日志文件(例如 apache 的 access.log 和/或 error.log)并自动阻止尝试攻击您的服务器的 IP 地址。
来自 debianfail2ban
包的描述:
Fail2ban 监视日志文件(例如/var/log/auth.log、/var/log/apache/access.log),并通过更新现有防火墙规则临时或永久禁止容易出现故障的地址。
Fail2ban 允许轻松指定要采取的不同操作,例如使用 iptables 或 ports.deny 规则禁止 IP,或者只是发送通知电子邮件。
默认情况下,它附带各种服务(sshd、apache、qmail、proftpd、sasl 等)的过滤器表达式,但可以轻松扩展配置以监视任何其他文本文件。所有过滤器和操作都在配置文件中给出,因此fail2ban可以与各种文件和防火墙一起使用。
答案2
至于你原来的问题。我的 debian 中的 Apache 没有配置 libwrap,因此它不会咨询 ports.deny。 [前面的答案已经提到了 - 现实是 tcpwrappers 并不像 90 年代那样是安全的缩影,特别是在黑名单方面]。您必须不作为守护进程运行它,而是从 (x)inetd 运行它,这会减慢它的速度(相当大)。
您可以在 Apache 级别阻止/允许访问,并且不需要 Apache 的 tcp 包装器 [也不需要 iptables]。你没有提到 ssh,但是我从来没有让 ssh 服务器直接对外开放。不过请继续阅读。
我们有一个拥有300多个域名的虚拟主机,也有类似的问题,淘宝、百度,甚至谷歌蜘蛛。值得注意的是,百度蜘蛛非常具有攻击性和持久性。
正如您已经发现的,他们拥有服务器场,即使您阻止某个 IP,它们很快也会从其他一些 IP 地址再次出现。
尝试手动维护 IP 地址/网络块列表根本不切实际。
它对我们来说非常有效的是 modsecurity 永久阻止用户代理字符串,而 mod_evasive 则暂时阻止滥用的 IP。
这种设置除了减慢搜索引擎的蜘蛛速度外,还具有限制僵尸尝试猜测 CMS 密码的优点。
我们的 modsecurity.conf 的相关部分
SecRule REQUEST_HEADERS:User-Agent "Yandex" phase:1,deny,nolog,id:'6972'
SecRule REQUEST_HEADERS:User-Agent "ichiro" phase:1,deny,nolog,id:'6973'
SecRule REQUEST_HEADERS:User-Agent "Baiduspider" phase:1,deny,nolog,id:'6974'
SecRule REQUEST_HEADERS:User-Agent "Baiduspider/.*" phase:1,deny,nolog,id:'6975'
SecRule REQUEST_HEADERS:User-Agent "Baiduspider-video" phase:1,deny,nolog,id:'6976'
SecRule REQUEST_HEADERS:User-Agent "Baiduspider-image" phase:1,deny,nolog,id:'6977'
SecRule REQUEST_HEADERS:User-Agent "sogou spider" phase:1,deny,nolog,id:'6978'
SecRule REQUEST_HEADERS:User-Agent "YoudaoBot" phase:1,deny,nolog,id:'6979'
SecRule REQUEST_HEADERS:User-Agent "bingbot(at)microsoft.com" phase:1,deny,nolog,id:'6980'
SecRule REQUEST_HEADERS:User-Agent "msnbot(at)microsoft.com" phase:1,deny,nolog,id:'6981'
SecRule REQUEST_HEADERS:User-Agent "BLEXBot/1.0" phase:1,deny,nolog,id:'6982'
SecRule REQUEST_HEADERS:User-Agent "Bot.*" phase:1,deny,nolog,id:'6984'
SecRule REQUEST_HEADERS:User-Agent "AhrefsBot.*" phase:1,deny,nolog,id:'6985'
还有我们的 mod-evasive.conf
DOSHashTableSize 2048
DOSPageCount 10
DOSSiteCount 300
DOSPageInterval 2.0
DOSSiteInterval 1.0
DOSBlockingPeriod 600.0
DOSLogDir /var/log/apache2/evasive
DOSWhitelist 127.0.0.1
DOSWhitelist 1xx.xxx.xxx.xx
我还忘记了一个非常现实的可能性。如果您不与中国打交道或正在运行您的家庭服务器,则只需屏蔽整个国家即可。来自它们的攻击和恶意软件的水平已经证明许多专业人士这样做是合理的。
http://www.cyberciti.biz/faq/block-entier-country-using-iptables/
我还忘记在这个相当冗长的答案中添加脚注。人们经常建议我在工作中使用 robots.txt 来解决此类问题。重点是 robots.txt 只是对远程程序的建议。流氓行为者当然会忽略它们,并且不能保证当今其他网络爬虫会尊重它们。从我们的测试来看,以百度为例似乎不尊重他们。 (robots.txt等于问流氓,请挠我而不是打我)