这是我的iptables,一切正常,除了这个假设超过20个连接的ips将被删除
iptables -F
iptables -X
iptables -I INPUT 1 -i lo -j ACCEPT
iptables -I INPUT 2 -i eth0 -p tcp --dport 6606 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I INPUT 3 -i eth0 -p tcp --dport 6624 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I INPUT 4 -i eth0 -p tcp --dport 6610 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I INPUT 5 -i eth0 -p tcp --dport 6610 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I INPUT 6 -i eth0 -p icmp --icmp-type echo-request -j ACCEPT
iptables -I INPUT 7 -i eth0 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I INPUT 8 -i eth0 -m connlimit --connlimit-above 20 -j DROP
iptables -I OUTPUT 1 -o lo -j ACCEPT
iptables -I OUTPUT 2 -o eth0 -p tcp --sport 6606 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I OUTPUT 3 -o eth0 -p tcp --sport 6624 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I OUTPUT 4 -o eth0 -p tcp --sport 6610 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I OUTPUT 5 -o eth0 -p tcp --sport 6610 -m state --state NEW,RELATED,ESTABLISHED -m limit --limit 2/s --limit-burst 4 -j ACCEPT
iptables -I OUTPUT 6 -o eth0 -p icmp --icmp-type echo-reply -j ACCEPT
iptables -I OUTPUT 7 -o eth0 -p icmp --icmp-type echo-request -j ACCEPT
iptables -I OUTPUT 8 -o eth0 -m connlimit --connlimit-above 20 -j DROP
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP
所以什么错了?为什么连接限制不起作用?
答案 0 :(得分:1)
在设置connlimit
connlimit
规则之前,您已接受没有DROP
规范的连接。
尝试将DROP
规则置于所有其他规则之上,或在每个--connlimit-upto
规则中指定ACCEPT
。 e.g。
iptables -A INPUT -i eth0 -p tcp --dport 6606 \
-m state --state NEW,RELATED,ESTABLISHED \
-m connlimit --connlimit-upto 20 -m limit --limit 2/s --limit-burst 4 -j ACCEPT
答案 1 :(得分:0)
实际上你想在这里限制哪个连接。 SSH或HTTP或HTTPS或TELNET。
在下面的规则中,只需将端口80替换为22用于SSH,将23替换为TELNET,因此它应该可以工作。
iptables -I INPUT -p tcp --dport 80 -m state --state NEW -m connlimit --connlimit-above 20 -j REJECT --reject-with ICMP管理员禁止
此外,在一些最近的内核中删除了connlimit模块,因此要么必须修补内核中的模块,要么使用hashlimit模块来限制连接。 Hashlimit模块更强大,更灵活,可以模块化。
以下规则将限制为相应目标IP的每分钟20个连接。
iptables -A INPUT -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-name \ HTTP_LIMIT -hashlimit 20 / day - hashlimit-burst 1 --hashlimit-mode dstip -j ACCEPT
有关详细说明,请参阅http://ipset.netfilter.org/iptables-extensions.man.html#lbAW。