Firewall
當伺服器收到大量數據時禁止 IP
我需要的 :
通過每圈時間的請求量添加丟棄規則有很多結果,但我需要在一段時間內根據從特定地址接收到的字節數進行丟棄。
我調查的內容:
我查看了 iptables :對於第一種情況,我看到了一個專用的匹配項。我也看到了配額匹配,但是數據計數是全域跟踪的。
我不知道如何混合這兩個規則來跟踪每個 IP 接收到的數據。
其他事情 :
我知道跟踪每個 IP 的字節數會佔用大量記憶體,這就是為什麼我也希望保持較短的時間。
我可以接受其他方法,只要有詳細的範例即可。
您可以將 IPSET 與超時和計數器選項一起使用。這看起來像這樣:
#create ipset for accounting with default lifetime 300 secs ipset create IP_QUOTA_SET hash:ip timeout 300 counters #create separated rule chain iptables --new-chain PER_IP_QUOTING #send packets to chain iptables -t filter -A INPUT \ -i <in-iface> --dst <ip> \ -p tcp --dport <dstport> \ -j PER_IP_QUOTING #if ip doesn't exist in the set, add it iptables -t filter -A PER_IP_QUOTING \ -m set ! --match-set IP_QUOTA_SET src \ -j SET --add-set IP_QUOTA_SET src --timeout 300 #if packet exists in the set, check bytes #if byte counter > quota then close connection #by sending of tcp-reset packet. iptables -t filter -A PER_IP_QUOTING \ -m set --match-set IP_QUOTA_SET src \ --bytes-gt 1000 -j REJECT --reject-with tcp-rst #pass other packets (for debug purpose) iptables -t filter -A PER_IP_QUOTING \ -j RETURN
在這種情況下,您可以檢查列表並通過 ipset 命令對其進行編輯。顯示帶有計數器和超時的目前列表:ipset list IP_QUOTA_SET。
有關詳細資訊,請閱讀文件。