Limitação de taxa com UFW: definindo limites

22

A página de manual da UFW menciona que ele pode configurar a taxa de iptables limitando para mim:

O ufw suporta limite de taxa de conexão, o que é útil para proteger contra ataques de login de força bruta. O ufw negará conexões se um endereço IP tiver tentado iniciar 6 ou mais conexões nos últimos 30 segundos. Consulte http://www.debian-administration.org/articles/187 para obter detalhes. O uso típico é:

     ufw limit ssh/tcp

Infelizmente, esta é toda a documentação que eu pude encontrar. Eu gostaria de ficar com o UFW e não usar comandos iptables mais complicados (para manter as coisas "descomplicadas").

Como eu usaria o ufw para limitar todo o tráfego de entrada (portanto não de saída) na porta 80 a 20 conexões por 30 segundos? Como desabilitei o limite de taxa para as portas 30000 a 30005? O limite de taxa está ativado por padrão para todas as portas?

Tom
fonte

Respostas:

21

O UFW foi projetado para ser "descomplicado", o que, neste caso, significa que você não tem controle sobre os detalhes da taxa à qual as conexões são limitadas. Se você quiser explorar a fonte Python da UFW, poderá descobrir como ajustá-la. As informações apropriadas estão (no meu sistema Ubuntu 10.04) em/usr/share/pyshared/ufw/backend_iptables.py

Deixando de lado a questão do cronograma, aqui estão algumas respostas para suas perguntas sobre disparos rápidos no final.

  1. Supondo que 10.10.10.0/24 seja sua rede local, isso aplica a regra de limitação padrão à porta 80 / tcp de entrada:

    ufw limit proto tcp from any port 80 to 10.10.10.0/24
    
  2. e 3. A limitação da taxa não está ativada por padrão. Para adicioná-lo a todas as portas (de destino), exceto o intervalo desejado, use esta regra. Observe que as regras (mesmo com intervalos) são unidades atômicas e não podem ser divididas. Você não pode, por exemplo, adicionar uma regra para nenhuma porta e, em seguida, deleteuma regra (inexistente) para um determinado intervalo para removê-la. limittambém não é um argumento aceitável ufw default.

    ufw limit from any to any port 0:29999,30006:65535
    
bonsaiviking
fonte
Isso significa que a taxa nunca pode ser definida?
Tom
2
Não sem invadir a fonte, pelo menos não para o UFW 0.30pre1-0ubuntu2, que é atual para o Ubuntu 10.04. Pela aparência das coisas na fonte atual , isso não mudou. No entanto, você pode colocar as regras do iptables em /etc/ufw/after.rules (ou /etc/ufw/before.rules), e essas serão usadas também. Veja man ufw-framework para mais informações.
BomDivirta
@bonsaiviking É possível iptable, se sim, o iptable é o back-end do ufw.
Nullpointer
6

Conforme mencionado na postagem anterior, você pode personalizar as user.rules. Eu preciso do meu limite de taxa de conexão smtp de até 12 conexões em 6 segundos. Eu adicionei uma regra como mostrado abaixo primeiro. Nota: isso adiciona uma regra de limite que permite 6 em 30 segundos por padrão

ufw limit smtp

e editei o /lib/ufw/user.rules (mantenho uma cópia personalizada deste arquivo com muitos outros ajustes), como mostrado abaixo ...

### tuple ### limit tcp 25 0.0.0.0/0 any 0.0.0.0/0 in
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --set
-A ufw-user-input -p tcp --dport 25 -m state --state NEW -m recent --update --seconds 6 --hitcount 12 -j ufw-user-limit
-A ufw-user-input -p tcp --dport 25 -j ufw-user-limit-accept
Arul Selvan
fonte
Encontrei user.rules em / etc / ufw
Otto Kanellis
5

o limite de taxa pode ser alterado no arquivo de regras ufw, que pode ser encontrado em /lib/ufw/user.rules. por padrão, não há limites ativados para todas as portas. você deve adicionar todas as portas manualmente ou editando o arquivo user.rules.

cikuraku
fonte
1

Vale a pena apontar possíveis conseqüências não intencionais do uso do recurso LIMIT do ufw.

Suponha que alguém tenha colocado um limite geral na porta 22 / tcp como a primeira regra do ufw:

     To                         Action      From
     --                         ------      ----
[ 1] 22/tcp                     LIMIT IN    Anywhere                  
...

supondo que todas as conexões que operam abaixo do limite ainda possam ser filtradas seguindo as regras do ufw e, finalmente, a política padrão de "negar (de entrada)".

Pelo menos para o ufw 0,35, essa suposição estaria errada. De fato, a lógica LIMIT IN imediatamente aceita qualquer entrada não rejeitada pelo critério de limite.

No psuedocode, a lógica LIMIT é

if CONDITION then DENY else ACCEPT

enquanto outras regras ufw parecem ter lógica:

if CONDITION then (DENY|ACCEPT) else continue to next rule.

Pessoalmente, achei que havia um comportamento inesperado para o ufw LIMIT, que só descobri inesperadamente ao encontrar muitas tentativas de login da porta 22 no arquivo de log do sistema, que nunca deveriam ter acontecido devido à filtragem por outras regras do ufw.

Detalhes de confirmação de comportamento

As linhas relevantes do código iptables inseridas pelo ufw são as seguintes:

-A ufw-user-input -p tcp -m tcp --dport 22 -m conntrack --ctstate NEW -m recent --update --seconds 30 --hitcount 6 --name DEFAULT --mask 255.255.255.255 --rsource -j ufw-user-limit
-A ufw-user-input -p tcp -m tcp --dport 22 -j ufw-user-limit-accept
-A ufw-user-limit -m limit --limit 3/min -j LOG --log-prefix "[UFW LIMIT BLOCK] "
-A ufw-user-limit -j REJECT --reject-with icmp-port-unreachable
-A ufw-user-limit-accept -j ACCEPT

A lista acima pode ser criada com

iptables -S | grep ufw-user-limit

As duas primeiras linhas são consecutivas ufw-user-inpute podem ser confirmadas com

iptables -S | grep ufw-user-input
Craig Hicks
fonte