Iptables

最近的模組,首選 rcheck 或更新是什麼?

  • September 9, 2020

假設我有以下規則:

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 秒間隔已過期)。

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