Networking
使用 iptables 限制 TCP 連接的持續時間?
是否可以限制TCP 連接的最大持續時間
iptables
?使用
iptables
可以限制每個 IP 地址的並發TCP 連接數-m connlimit
,也可以使用 限制每個 IP 地址每個時間間隔的新連接數-m hashlimit
。我目前正在使用這些規則來獲得預期的效果:iptables -A INPUT -m tcp -p tcp --syn --dport 80 -m connlimit --connlimit-above 10 -j DROP iptables -A INPUT -m tcp -p tcp --dport 80 -m state --state NEW -m hashlimit --hashlimit-above 15/min --hashlimit-burst 10 --hashlimit-mode srcip --hashlimit-name rtlimit -j DROP
但是,有沒有辦法確保“已建立”的 TCP 連接最多在幾秒鐘後關閉,以防止“長期”連接?(無論是否仍然“活躍”)
n
我看到人們建議:
iptables -A INPUT -p tcp --dport 80 -m state --state RELATED,ESTABLISHED -m limit --limit 1/minute -j DROP
但是,我不認為這真的能達到我想要的效果。據我了解,上述規則將丟棄屬於“已建立”連接並且以“快於”每分鐘一個數據包的速率進入的所有數據包。1分鐘後它不會關閉連接,還是這樣?
有什麼辦法可以真正做到這一點
iptables
嗎?
我現在想出了一個不同的“解決方案”:
我編寫了一個小腳本,它作為 cronjob(每分鐘一次)執行,並通過使用
ss
命令和一點grep
魔法將所有“已建立的”連接轉儲到文件中。我還保留了上次執行的“舊”文件。這樣,我可以通過連接兩個文件然後使用sort
plus來辨識自上次執行以來“持續”的連接uniq -d
。然後將使用該ss --kill
命令顯式關閉這些連接。似乎對我有用。(是的,這不是一個確切的超時,但對於我的目的來說可能“足夠好”)
列出目前“已建立”的連接:
ss -o state established
僅獲取“重複”行:
cat file1.txt file2.txt | sort | uniq -d
關閉連接,例如:
s --kill -o state established "( dst ${ip} and dport = ${port} )"