Defina o tempo de bloqueio com iptables

1

Eu tenho as seguintes regras no ufw, para o 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

que rejeita conexões de um IP se houver 120 conexões em 60 segundos.

Por padrão, isso parece bloquear mais conexões por 60 segundos. Existe alguma maneira que eu possa definir a quantidade de tempo que um bloco deve durar? por exemplo. Eu gostaria que o bloco acima durasse 10 minutos.

    
por Kohjah Breese 21.09.2014 / 22:30

2 respostas

1

A parte relevante das suas regras é "-update --seconds 60 --hitcount 120", eis o que você precisa saber:

--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.
    
por 21.09.2014 / 22:51
0

Eu tenho lutado com isso.
Eu pensei que tinha resolvido assim: (você pode tranpose FORWARD para 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

O acima funcionou, limitando a 10 com / em 60 segundos. Eu pensei que estava funcionando, porque parei de enviar durante o período "bloqueado". No entanto, se continuar a enviar dentro do período de bloqueio, ele será bloqueado para sempre.

Quando inverto o pedido (para que o --set seja após a instrução hitcount ) ele funciona como esperado: Após o "período de bloqueio", novos pacotes são permitidos (até atingir a contagem de ocorrências) .

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
    
por 06.07.2018 / 20:00