受到攻击,我该怎么办?

受到攻击,我该怎么办?

可能重复:
我的服务器被黑了 紧急求助

我的 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

失败2ban将扫描您的 Apache 日志文件以查找恶意活动,并在防火墙级别阻止违规 IP。您可以将其配置为查找特定模式(对于您来说,这很容易)。

您可以在以下位置找到有关将 fail2ban 与 Apache 结合使用的信息他们的网站

我还没有测试过,但是像这样的东西应该可以解决问题。

failregex = <host>.*108\.166\.97\.22.*

你可以在应用正则表达式之前对其进行测试;请参阅这里有关测试 fail2ban 的 failregexes 的详细信息。

答案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。

相关内容