access.log中出现奇怪的请求,如何拦截?

access.log中出现奇怪的请求,如何拦截?

我在自己的服务器上使用 nginx,几天前我注意到我的 access.log 中出现了一些奇怪的请求:

77.50.217.37 - - [19/Aug/2011:17:50:50 +0200] "GET http://images.google.com/ HTTP/1.1" 200 151 "-" "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; WOW64; .NET CLR 1.1.4322; Media Center PC 5.0; .NET CLR 3.5.30729; .NET CLR 3.0.30729; .NET4.0C; .NET4.0E)"
174.142.123.42 - - [19/Aug/2011:17:51:59 +0200] "GET http://l08.member.ird.yahoo.com/?.src=ym&login=_420_club_chick_&passwd=112211 HTTP/1.0" 200 151 "-" "MobileRunner-J2ME"
65.52.227.217 - - [19/Aug/2011:17:52:30 +0200] "GET http://javaddiction.biz/index.php HTTP/1.1" 404 570 "-" "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1)"
188.72.199.25 - - [19/Aug/2011:17:52:35 +0200] "CONNECT google.com:80 HTTP/1.1" 400 172 "-" "-"
188.72.199.25 - - [19/Aug/2011:17:53:40 +0200] "CONNECT google.com:80 HTTP/1.1" 400 172 "-" "-"

这些是针对不属于我的域名(谷歌、雅虎……)的请求。

我猜它可能是网络爬虫,或者机器人或者......

有没有办法阻止这种数据包,使用 fail2ban、iptables 或者我不知道还有什么......?

答案1

这些都是互联网上每个 Web 服务器都会看到的无害的垃圾请求 - 很可能是脚本小子在寻找一个配置严重错误的 Web 服务器,并允许您发出代理请求并使用该CONNECT方法。

您的服务器似乎已适当配置为拒绝使用该CONNECT方法的尝试(返回HTTP/400 - Bad Request),并且我愿意和您打赌,如果您通过 telnet 进入并尝试,那么GET http://www.google.com/您的站点就会因为遇到麻烦而出现页面丢失。

消除此类问题的唯一方法是阻止除“已知良好”主机列表之外的所有 HTTP 流量,这违背了公共 Web 服务器的初衷。我最好的建议是放松,喝杯啤酒,不要纠结于 Web 服务器的访问/错误日志中的条目,除非您要解决特定问题。

答案2

正如 voretaq7 所说,您可能只想让它们保持原样。毕竟,它们什么也没做(它们已被 nginx 阻止)。

但是,其他请求如果通过则可能会引起麻烦,并且您的应用程序可能对某些无效命中很敏感。

我使用过的一个模块(使用 Apache,尽管 nginx 也提供该模块)是mod_security。此模块允许您输入规则,比较传入(甚至传出)流量的各种情况(例如方法),并根据需要阻止此类访问。

附注一下,我运行了:

dig -x 188.72.199.25

输出结果为:

199.72.188.in-addr.arpa. 3600   IN  SOA ns0.leaseweb.nl. Postmaster.leaseweb.nl. 2013121501 14400 7200 604800 3600

这不是 Google 也不是 Yahoo!显然,自从你发布问题以来,它可能已经发生了变化,但此类请求通常由无效机器人或知识渊博黑客。而不是大公司,大公司会利用他们的资源做比黑客更好的事情。

相关内容