Eliminar pacotes por ip se mais do que um limiar de acessos do ip for atingido

0

Agora eu quero bloquear um ip (ou eliminar pacotes de um ip) se o ip atingir meu host para dizer 5 pedidos em um min. Como fazer isso? Você pode me apontar para qual ferramenta ou comando ler sobre o assunto declarado?

Depois de procurar, me deparei com iptables com o módulo -m limit. Mas isso não considera o endereço IP. Ou seja, se eu definir o limite para 5 na porta 22 para 5 ocorrências por 60 segundos, isso impedirá as conexões se 5 ocorrências atingirem o servidor, independentemente do ip de origem (seja um único ip ou 5 máquinas diferentes). Eu também encontrei o tc para moldar a largura de banda do tráfego, mas eu não tinha certeza se era a ferramenta que eu deveria estar olhando.

Por favor, me ajudem postando links junto com sua solução. Eu sempre gosto de ler mais.

Obrigado antecipadamente.

UPDATE : não consigo usar o fail2ban aqui, pois o fail2ban requer a existência de data e hora em algum formato conhecido nos logs. Este não é o caso dos logs de freeswitch.

    
por joker 16.04.2017 / 18:26

1 resposta

0

Ok, consegui encontrar uma resposta para minha pergunta e estou compartilhando isso aqui para que outros se beneficiem (mesmo que o número de visualizações não o diga :))

Minha solução utiliza iptables e fail2ban para resolver o problema em questão.

  1. Coloque seu firewall em funcionamento. Não se esqueça de abrir as portas requeridas pelo freeswitch para realizar operações VoIP de sucesso:

    firewall-cmd --add-port=5080-5081/tcp --add-port=5060-5061/tcp --add-port=5066/tcp --add-port=8080-8082/tcp --add-port=7443/tcp --add-port=16384-32768/udp
    

Essa etapa sozinha filtra muitos ataques, já que a maioria deles é sobre o udp nas portas esperadas do tcp.

  1. Peça ao iptables para armazenar as informações relacionadas às conexões tcp ao conectar-se às portas de sinalização:

    iptables -I INPUT 5 -i eth0 -p tcp -m multiport --dports 5080,5081,5060,5061,7443,5066,8080:8082 -m recent --set --name FREESWITCH_BADGUY -j ACCEP
    iptables -I INPUT 5 -i eth0 -p tcp -m recent --update --hitcount 1 --seconds 120 --name FREESWITCH_BADGUY -j LOG --log-prefix "FREESWITCH BAD: " --log-level info
    

Anote o índice / pedido 5 na cadeia INPUT. Eu usei 5 porque era apenas antes das regras para aceitar conexões nas portas listadas (a partir dos comandos no primeiro passo). Então, você deve colocá-los em qualquer lugar antes das regras da primeira etapa, mas depois das regras do ssh do fail2ban.

  1. Crie um novo filtro fail2ban em /etc/fail2ban/filter.d/freeswitch-customized.conf :

    [Definition]
    
    failregex = FREESWITCH BAD.*SRC=<HOST>
    
    ignoreregex =
    
  2. Adicione o seguinte a /etc/fail2ban/jail.local : (Altere o caminho de log para o arquivo de log do sistema. A mina foi /var/log/messages . Mas pode ser no seu caso, por exemplo, /var/log/syslog ).

    [freeswitch-customized]
    
    enabled = true
    port = 5060,5061,5080,5081,7443,5066
    logpath = /var/log/messages
    filter = freeswitch-customzied
    
  3. Reinicie o fail2ban:

    systemctl restart fail2ban
    

Isso funcionou para mim.

    
por joker 12.06.2017 / 20:25