centos iptable 有没有办法限制一个端口最多只能有 10 个 ip 访问,第 11 个 ip 会被直接 drop 。
看到 iptable 有 connlimit 模块,但这个是限制连接数的,好像实现不了我上面的功能。因为我对每个 ip 的连接数没有要求。
1
ShadowStar 2015-09-18 01:41:57 +08:00 via iPad
好像没有现成的模块,你可以自己写一个,很简单的。
|
2
adrianzhang 2015-09-18 02:20:15 +08:00
必须自己写。很久以前曾经写过一个小脚本,谁扫描我的 vps 的 ssh 端口就把谁的 ip 用 iptables 干掉。实现起来比较简单的。你这个需求,思路可以是:把前 10 个加入到允许,然后 deny all 就好了。
|
3
piero66 OP @ShadowStar 望提供思路。。。
|
4
ShadowStar 2015-09-20 02:39:01 +08:00
@piero66 基本结构可以参照 recent 的模式,输入几个参数: src/dst , ttl , num 。
然后对于进入此条规则的报文取 dst/src ,查找 IP 表,如果找到刷新 TTL ,否则添加并刷新 TTL ,返回 true ;如果添加失败(超过限定 num 值),返回 false 。 TTL 到期删除对应表项。 IP 表可以采用链表、 hash 表,甚至数组,取决于限定的 IP 数量大小。 |
5
ShadowStar 2015-09-20 02:42:31 +08:00
@piero66 如果需要支持多 IP 的限定(例如在转发的时候),只需要把 IP 表改为二维的即可。
|