通过使用tcpdump -nlASX -s 0 -vvv port 80
我得到类似的东西:
14:58:55.121160 IP (tos 0x0, ttl 64, id 49764, offset 0, flags [DF], proto TCP (6), length 1480)
206.72.206.58.http > 2.187.196.7.4624: Flags [.], cksum 0x6900 (incorrect -> 0xcd18), seq 1672149449:1672150889, ack 4202197968, win 15340, length 1440
0x0000: 4500 05c8 c264 4000 4006 0f86 ce48 ce3a E....d@[email protected].:
0x0010: 02bb c407 0050 1210 63aa f9c9 fa78 73d0 .....P..c....xs.
0x0020: 5010 3bec 6900 0000 0f29 95cc fac4 2854 P.;.i....)....(T
0x0030: c0e7 3384 e89a 74fa 8d8c a069 f93f fc40 ..3...t....i.?.@
0x0040: 1561 af61 1cf3 0d9c 3460 aa23 0b54 aac0 .a.a....4`.#.T..
0x0050: 5090 ced1 b7bf 8857 c476 e1c0 8814 81ed P......W.v......
0x0060: 9e85 87e8 d693 b637 bd3a 56ef c5fa 77e8 .......7.:V...w.
0x0070: 3035 743a 283e 89c7 ced8 c7c1 cff9 6ca3 05t:(>........l.
0x0080: 5f3f 0162 ebf1 419e c410 7180 7cd0 29e1 _?.b..A...q.|.).
0x0090: fec9 c708 0f01 9b2f a96b 20fe b95a 31cf ......./.k...Z1.
0x00a0: 8166 3612 bac9 4e8d 7087 4974 0063 1270 .f6...N.p.It.c.p
我该怎么做才能使用 IPTables 通过字符串进行阻止。或者有没有更好的方法来阻止具有共同点的攻击?
问题是:我可以从该 IP 数据包中挑选任何部分并将其称为字符串吗?
iptables -A INPUT -m string --alog bm --string attack_string -j DROP
换句话说:在某些情况下,我可以使用 TTL=xxx 进行禁止,如果攻击具有相同的 TTL,则使用它。当然,它会阻止一些合法的数据包,但如果这意味着保持盒子打开,它会一直工作到攻击消失,但我想学习如何在数据包中找到其他常见的东西来用 IPTables 进行阻止
答案1
iptables -A INPUT -m string --alog bm --string attack_string -j DROP
这个想法存在一些问题。
首先你应该看到相关的文档:
请谨慎使用此匹配。很多人想使用此匹配以及 DROP 目标来阻止蠕虫。这是一个重大错误。任何 IDS 规避方法都会击败它。
类似地,许多人一直使用这种匹配作为停止 HTTP 中的特定功能(如 POST 或 GET)的手段,方法是丢弃任何包含字符串 POST 的 HTTP 数据包。请理解,这项工作最好由过滤代理来完成。此外,使用前一种方法,任何带有单词 POST 的 HTML 内容都将被丢弃。这种匹配旨在能够将用户空间感兴趣的数据包排队以便进行更好的分析,仅此而已。基于此丢弃数据包将被任何 IDS 规避方法击败。
该-string
指令的真正用途是将数据包放入单独的队列或链中,以供 IDS 系统处理。它并非旨在从整体/行为上解释第 7 层信息,或通过使用签名匹配,然后在确定为“坏”后将其丢弃。因此,其次,该-string
指令对于您的用例来说不够复杂,您最终可能会丢弃想要保留的数据包。
您还会注意到数据包中没有可以提供给的字符串-string
。TCPDump 显示的数据包一旦转换为(大概是)ASCI 就无法读取。该-string
参数实际上是为查找数据包中有字符串的 HTTP Post 命令之类的东西而设计的。如果您想坚持使用 iptables 作为签名匹配 IDS 系统的想法,您可能希望使用U3匹配能力来寻找特定的位模式。
第三,也是最重要的一点,当拒绝服务攻击的数据包到达您的计算机并被防火墙处理时,损害已经造成。任何显著缓解拒绝服务攻击的措施都需要与您的上游提供商合作来阻止流量前它到达了你的服务器。
答案2
您的最后一条评论似乎表明您正在寻找一种调解 syn 泛洪的方法。Syn Cookies 就是为此而设计的。您可以使用以下命令以 root 身份运行来启用 syncookies。
echo 1 > /proc/sys/net/ipv4/tcp_syncookies
您还可以调整其他设置来更改 syn cookies 的行为。请参阅以下文档:http://www.kernel.org/doc/Documentation/networking/ip-sysctl.txt。