iptables 最多能阻挡多少个 ip?

2017-05-16 09:21:12 +08:00
 unboy
centos6.5 x64 系统
近期服务器受到大量 ip 攻击,抓包筛选出大约 10 万个 ip,拟导入 iptables 拦截,请问 iptables 是否支持这么多的 ip,负载和性能上会有多大影响?此前有无相关数据测试?
5899 次点击
所在节点    Linux
21 条回复
tony1016
2017-05-16 09:24:00 +08:00
科学上网经验告诉我们,这么大的列表还是配合 ipset 用最快
aksoft
2017-05-16 09:30:06 +08:00
@tony1016 +1 学习了
qianguozheng
2017-05-16 09:34:18 +08:00
ipset 正解,首先你要了解的 netfilter 的原理,说白了整体逻辑就是遍历每一个 HOOK 上注册的表,表上建立的链, 如果觉得复杂,就理解为链表,每一个都遍历,数量越多,一个数据包走过的路程就越多,相对来说就越慢。

如果你的规则有共通性,当然可以通过 ipset 的 hash 方式来处理,哈希表查找起来肯定比链表快。
unboy
2017-05-16 09:37:10 +08:00
@tony1016
@qianguozheng 原来如此,学习了。感谢。
psfang
2017-05-16 09:38:07 +08:00
之前遇到过,加的 IP 太多,性能消耗太大,跪了。。
QQ2171775959
2017-05-16 10:13:08 +08:00
这个只能做 IP 流量屏蔽了,不过这个只能简单的处理,如果别继续用新的 IP 来攻击,还是会有一样的问题出现,最好是做个 IP 防御策略,对不正当的流量进行 CDN 清洗。
Jodal
2017-05-16 11:04:59 +08:00
ipset 加进 hash,iptables drop 掉,复杂度是 O(1)。
Showfom
2017-05-16 12:48:47 +08:00
这么多 ip 不适合在服务器端弄了 买硬件防火墙吧
rrfeng
2017-05-16 12:56:00 +08:00
只有我觉得 100000 IP 不太可能吗?这么大规模的攻击你确定有待遇享受?

还是再分析一下来源好
zhs227
2017-05-16 12:56:48 +08:00
用 ipset。但是 100,000 有点多了,感觉不是真实来源 IP。
gdtv
2017-05-16 13:25:22 +08:00
楼上说 10 万 ip 不可能,我前不久就遇到了类似的情况,有几万个 ip,,后来用 ipset 阻挡了
unboy
2017-05-16 13:25:31 +08:00
@rrfeng
@zhs227 差不多是这么多,这些 ip 都是慢速攻击,过好几秒才发送一次请求,每次请求的字节也很小,但是海量 ip 过来把带宽堵满了。
rrfeng
2017-05-16 14:11:41 +08:00
什么服务?请求是什么样的?反射攻击吗?还是网页挂马之类的?
10 万即使封了,不会影响正常用户吗?
0ZXYDDu796nVCFxq
2017-05-16 14:17:19 +08:00
1. 抓包的不一定准确,因为数据包可能是伪造来源 IP。最好确定是否是真实 IP
2. 10 万 IP 很正常,我的 IP 信誉库里有百万以上的黑名单。可以用工具将 IP 进行合并,很可能有些是整个 C 段都是攻击来源,合并后方便管理。
unboy
2017-05-16 14:23:27 +08:00
@rrfeng 还没封,这不才在探讨这个问题。

@gstqc 请推荐个好用的 ip 自动合并工具。
0ZXYDDu796nVCFxq
2017-05-16 14:33:17 +08:00
@unboy 可以写程序来处理,没有现成的工具。
我们一般是查 IP 来源,结合多个 IP 数据库来识别。
Python 推荐 ipaddress 这个库,能想到的计算方式都支持。

初期可以简单的用 IP 列表,数量不会影响到多少效率。
合并只是方便后续维护和更新。
Jodal
2017-05-16 17:27:20 +08:00
1. 抓包确实不太准确,数据包是可以伪造,也可能是肉鸡。如果大量 block 的话,会影响相应的服务,并且现在客户端都是 Nat,block 掉之后,有可能是一大批用户没法使用。PS: netstat 可以输出这些 IP

2. 尽量要隐藏服务端的源 IP,比如 cloudflare 服务,但是国内好像做的都不是很好。
3. 买 DDos 防火墙,但是源 IP 暴露的话,也很难办。
4. ipset 性能其实很好,10w IP 的话,机器应该很容易扛过去。
5. 需要查看 ipset 的话,直接 man ipset
6. 以下是相关的测评

https://workshop.netfilter.org/2013/wiki/images/a/ab/Jozsef_Kadlecsik_ipset-osd-public.pdf
https://strongarm.io/blog/linux-firewall-performance-testing/
ericFork
2017-05-16 18:48:07 +08:00
看到这里突发奇想,有人知道 Windows Server 高级防火墙的按 IP 阻挡的实现是链表还是哈希么?
xierch
2017-05-16 23:23:17 +08:00
顺带一提,除了用 iptables + ipset,还能用 nftables
https://wiki.nftables.org/wiki-nftables/index.php/Sets
kiss2013star
2017-05-17 10:18:37 +08:00

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/361586

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX