可能重复:
我的服务器被黑了 紧急求助
我的 Apache 访问日志中出现了数百万个此类请求。我该如何阻止它们?
173.59.227.11 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416620414 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
173.72.197.39 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416641552 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
2.222.7.143 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416647004 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
62.83.154.11 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416572373 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 6.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
65.35.221.207 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416453921 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BOIE8;ENUS)"
68.40.182.244 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338415880184 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0"
99.244.26.33 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338384208421 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"
65.12.234.229 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338415812217 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
173.59.227.11 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416620415 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
68.40.182.244 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338415881181 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0"
188.82.242.197 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338414398872 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10.7; rv:12.0) Gecko/20100101 Firefox/12.0"
99.244.26.33 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338384208454 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:12.0) Gecko/20100101 Firefox/12.0"
173.59.227.11 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416620424 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
68.40.182.244 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338415882180 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 5.1; rv:12.0) Gecko/20100101 Firefox/12.0"
65.12.234.229 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338415812229 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Windows NT 5.1) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
95.34.134.51 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416367865 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_7_0) AppleWebKit/536.5 (KHTML, like Gecko) Chrome/19.0.1084.52 Safari/536.5"
65.35.221.207 - - [30/May/2012:18:23:45 -0400] "GET /?id=1338416453937 HTTP/1.1" 200 28 "http://108.166.97.22/" "Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; BOIE8;ENUS)"
我如何过滤包含“http://108.166.97.22/“?
答案1
从您的 apache 日志来看,该 IP 是请求的引荐来源。您可以使用 iptables 字符串匹配模块拒绝包含此文本的数据包:
iptables -I INPUT -m string --algo bm --string '108.166.97.22' -j REJECT
答案2
答案3
添加iptables
规则以丢弃来自您怀疑正在攻击您的源 IP 地址的传入数据包。例如,要丢弃来自源 IP 123.123.123.123 的所有传入数据包:
iptables -I INPUT -s 123.123.123.123 -j DROP
删除一条规则:
iptables -D INPUT -s 123.123.123.123 -j DROP
为了实现自动化,你可以使用Fail2ban,它除了 Apache 之外,还可以与其他服务配合使用。大多数发行版已经在包管理系统中安装了 Fail2ban,因此安装起来应该很容易。
Fail2ban 扫描日志文件(例如 /var/log/apache/error_log)并禁止显示恶意迹象的 IP(密码错误次数过多、寻找漏洞等)。通常,Fail2Ban 随后用于更新防火墙规则,以在指定的时间内拒绝 IP 地址,尽管也可以配置任何其他操作(例如发送电子邮件或弹出 CD-ROM 托盘)。开箱即用的 Fail2Ban 附带各种服务(apache、curier、ssh 等)的过滤器。
答案4
您可以使用以下脚本从 cronjob 每分钟运行一次,以禁止那些过多访问您的 Web 服务器的 IP。
cat access_log \
| awk -F' ' -v temper=0.20 '
// {
bad_ips[$1]++
}
END {
max_hits = 0;
for (bad_ip in bad_ips)
if (max_hits < bad_ips[bad_ip])
max_hits = bad_ips[bad_ip];
for (bad_ip in bad_ips)
if ((max_hits - bad_ips[bad_ip])/max_hits <= temper)
system("iptables -I INPUT -s " bad_ip " -j DROP")
}'
您可以内置一个检查来查看您尝试阻止的 IP 是否已被阻止,或者强制使用 logrotatelogrotate -f
重新启动 access_log。
如果这是一次分布式攻击(看起来是这样),那么您不会想永久封锁这些 IP 地址,而只是暂时封锁,因为当攻击停止时,僵尸可能会醒来。如果您继续封锁,您可能会封锁您的正常用户!
如果你正在运行任何重要的东西,也请尝试与你的 ISP 联系以寻求帮助。他们可能能够识别并阻止特定流量,或者在流量耗尽你的带宽之前启用某种形式的 IDS。
注意:fail2ban 也是一个很好的解决方案。如果你在发布这个问题后一直使用这个解决方案,那么请保留它,而不是使用这个 hack。