Установите время блокировки с помощью iptables

У меня есть следующие правила в ufw для iptables:

-A ufw-user-input -p tcp --dport 80 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 120 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 80 -j ufw-user-limit-accept
-A ufw-user-input -p udp --dport 80 -m state --state NEW -m recent --set
-A ufw-user-input -p udp --dport 80 -m state --state NEW -m recent --update --seconds 60 --hitcount 120 -j ufw-user-limit
-A ufw-user-input -p udp --dport 80 -j ufw-user-limit-accept

который отклоняет соединения от IP, если есть 120 соединений в течение 60 секунд.

По умолчанию это блокирует дальнейшие соединения на 60 секунд. Могу ли я в любом случае определить количество времени, которое блок должен длиться? например, я бы хотел, чтобы вышеуказанный блок длился 10 минут.

2 ответа

Соответствующая часть ваших правил - "-update --seconds 60 --hitcount 120", вот что вам нужно знать:

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

--hitcount hits
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
packets had been received greater than or equal to the given value. This option may
be used along with --seconds to create an even narrower match requiring a certain
number of hits within a specific time frame. The maximum value for the hitcount
parameter  is  given  by the "ip_pkt_list_tot" parameter of the xt_recent kernel
module. Exceeding this value on the command line will cause the rule to be rejected.

Я боролся с этим.
Я думал, что это решено так: (вы можете перенести FORWARD за INPUT)

iptables -A FORWARD -i wlp3s0 -p udp --dport 5060 -m state --state NEW -m recent --set

iptables -A FORWARD -i wlp3s0 -p udp --dport 5060 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount=10 -j REJECT --reject-with icmp-port-unreachable

Вышеописанное сработало, ограничившись 10 с / в 60 секунд. Я думал, что это работает, потому что я перестал отправлять в течение "заблокированного" периода. Однако, если продолжить отправку в течение периода блокировки, он будет заблокирован навсегда.

Когда я изменяю порядок (чтобы --set после hitcount оператор) работает так, как задумано: по истечении "периода блокировки" новые пакеты разрешены (до тех пор, пока они не достигнут числа попаданий).

iptables -A FORWARD -i wlp3s0 -p udp --dport 5060 -m state --state NEW -m recent --rcheck --seconds 60 --hitcount=10 -j REJECT --reject-with icmp-port-unreachable

iptables -A FORWARD -i wlp3s0 -p udp --dport 5060 -m state --state NEW -m recent --set
Другие вопросы по тегам