Допустим, у меня есть следующие правила:
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.
Это означает использование --rcheck
заставляет правило соответствовать только временному интервалу, указанному в правиле (например, с --seconds
) за раз, используя --update
будет увеличивать интервал времени, в течение которого выполняется соответствие правилу, если в течение этого интервала встречаются совпадающие пакеты.
Итак, если каждые 45 секунд есть соответствующий пакет, примеры правил, показанных в вопросе, будут продолжать регистрировать пакеты и возвращаться из цепочки. OTOH, если --rcheck
был использован, каждый второй пакет не будет соответствовать (поскольку 60-секундный интервал для двух совпадающих пакетов истек).