最近的模块,首选 rcheck 还是 update?

最近的模块,首选 rcheck 还是 update?

假设我有以下规则:

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 秒?

请记住,这些规则只是为了揭示这个问题的例子。

答案1

来自 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.

这意味着使用--rcheck会使规则每次只匹配规则中指定的时间间隔(例如--seconds),而使用--update如果在间隔期间遇到匹配的数据包,则会延长匹配规则的时间间隔。

因此,如果每 45 秒有一个匹配的数据包,则问题中显示的示例规则将继续记录数据包并从链中返回。另一方面,如果--rcheck已使用,则每个第二个数据包都不会匹配(因为两个匹配数据包的 60 秒间隔已过期)。

答案2

没有测试过——但是看着来源,我怀疑这个例子是这样工作的:

  1. --set添加IP地址并增加命中次数;
  2. 第一个“LOG”--update检查 hitcount 是否为 2 或更多并增加它,如果是的话
  3. 接下来“RETURN”--update再次测试如果匹配,则再次增加

因此对于任何新的匹配数据包:
  • 如果之前没有命中——我们就通过,并且命中数增加到 1;
  • 如果最近有 1 次命中 -- 我们停止,并且命中数增加 3 并变为 4。

另一方面,--rcheck不会增加命中次数,因此它只会增加--set一次,然后通过以下每个规则进行检查:

  • 对于之前没有匹配的内容 -- 与之前相同;
  • 对于一次先前的命中 - 设置增加最近命中数,然后我们停止;结果最近命中数为 2。

综上所述——我可能会这样说:
  • 使用--set --update或者--rcheck;
  • 用于--rcheckLOG 规则;
  • 用于--updateDROP/ACCEPT/RETURN 规则。

希望有所帮助。

相关内容