Iptables
最近的模組,首選 rcheck 或更新是什麼?
假設我有以下規則:
iptables -P INPUT DROP iptables -P FORWARD ACCEPT iptables -P OUTPUT ACCEPT iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT iptables -A INPUT -p tcp -m conntrack --ctstate NEW -m tcp --dport 22 -m recent --set --name counting1 --rsource iptables -A INPUT -m recent --update --seconds 60 --hitcount 2 --name counting1 --rsource -j LOG --log-prefix "SSH ataque " iptables -A INPUT -m recent --update --seconds 60 --hitcount 2 --name counting1 --rsource -j RETURN -A INPUT -j ACCEPT
我已經閱讀了手冊,但我仍然不明白在什麼情況下它是首選 –rcheck 或 –update 選項…更新是否意味著命中計數重置為 0 並重新啟動(如上例所示) 60秒?
請記住,這些規則只是揭示這個問題的範例。
從 iptables 的手冊頁:
[!] --rcheck Check if the source address of the packet is currently in the list. [!] --update Like --rcheck, except it will update the "last seen" timestamp if it matches.
因此,使用
update
不會重置命中計數,它會(重新)設置上次看到的時間戳。以下是關於--seconds
:--seconds seconds This option must be used in conjunction with one of --rcheck or --update. When used, this will narrow the match to only happen when the address is in the list and was seen within the last given number of seconds.
這意味著 using
--rcheck
使規則一次只匹配規則中指定的時間間隔(例如 with--seconds
),而 using--update
將延長規則匹配的時間間隔,如果在間隔期間遇到匹配的數據包。因此,如果每 45 秒有一個匹配的數據包,則問題中顯示的範例規則將繼續記錄數據包並從鏈中返回。如果使用了 OTOH
--rcheck
,則不會匹配第二個數據包(因為兩個匹配數據包的 60 秒間隔已過期)。