2014-09-05 180 views
0

這是我的iptables,一切工作正常,execpt有超過20個連接這個所謂的IPS將被丟棄iptables的--connlimit不起作用

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 

有啥錯?爲什麼連接限制不起作用?

回答

1

connlimitDROP規則設置之前,您正在接受沒有connlimit規範的連接。

嘗試將DROP規則置於所有其他規則之上或在您的每個ACCEPT規則中指定--connlimit-upto。例如

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

--connlimit-below不存在 – DarkOne 2014-09-05 04:09:55

+0

@DarkOne正確。我忘了這不是'connlimit-above'的反向擴展。實際上,'--connlimit-upto'。答案已更新。 – 2014-09-05 05:52:29

0

其實你想在這裏限制哪個連接。 SSH或HTTP或HTTPS或TELNET。

在下面的規則中,只需將端口80替換爲22,即SSH替換端口80,然後TELNET替換端口80,因此它應該可以工作。

iptables的-I INPUT -p根據tcp --dport 80 -m狀態--state NEW -m connlimit --connlimit-高於20 -j REJECT --reject-與禁止ICMP管理員-

此外,在最近的一些內核中,connlimit模塊被刪除,因此您必須在內核中修補模塊或使用哈希限制模塊來限制連接。限制模塊的Hashlimit模塊更加強大和靈活。

以下規則將限制爲每分鐘20個連接的相應目標ip。

的iptables -A INPUT-P TCP --dport 80 -m狀態--state NEW -m hashlimit --hashlimit名\ HTTP_LIMIT -hashlimit 20 /天 - hashlimit突發1 --hashlimit-模式dstip -j ACCEPT

有關更多說明,請參見http://ipset.netfilter.org/iptables-extensions.man.html#lbAW