Установите время блокировки с помощью 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