Firewall

當伺服器收到大量數據時禁止 IP

  • February 2, 2021

我需要的 :

通過每圈時間的請求量添加丟棄規則有很多結果,但我需要在一段時間內根據從特定地址接收到的字節數進行丟棄。

我調查的內容:

我查看了 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。

有關詳細資訊,請閱讀文件。

引用自:https://serverfault.com/questions/594012