IPTABLES: Como limitar por ip na rede selecionada para acessar a porta 25 em uma unidade de tempo

1

Eu tenho um servidor de e-mail, e eu tenho um mau hábito usuários que gostam de clicar no botão de envio / recebimento simultâneo em um segundo, fazendo com que o log inundado com informações desnecessárias.

Estou tentando limitar cada endereço IP em minha rede (endereço IP interno) para poder estabelecer uma conexão com o servidor de e-mail uma vez em 30segundo, mas não deve ser aplicado a endereços IP externos. encaminhar e-mails de outro servidor de e-mail permitido.

Eu li a manpage do iptables e encontrei --connlimit-above N , mas isso apenas limita a conexão e não pela unidade de tempo.

Alguém pode me mostrar como isso pode ser feito usando o iptables ou o ufw?

    
por Joseph Goh 20.10.2016 / 05:14

2 respostas

0

Este é um caso padrão de limitação de taxas:

iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --set
iptables -I INPUT -p tcp --dport 25 -i eth0 -s 192.168.0.0/24 -m state --state NEW -m recent --update --seconds 30 --hitcount 2 -j DROP

Aqui eu assumi que sua LAN é 192.168.0.0/24 e sua interface é eth0 , se não, por favor mude de acordo.

A primeira regra detecta todos os pacotes NOVO vindos de eth0 da sua LAN, e destinam-se à porta TCP 25, e adiciona o endereço IP ao recente lista; o segundo comando, após o recebimento de um pacote NOVO na mesma porta, verifica a lista recente ( - update ) e, se o endereço foi inserido na lista a menos de - segundos 30 atrás, descarta o pacote se o número de - hitcounts 2 tiver sido alcançado.

Por favor note que isto é aplicado somente aos NOVOS pacotes: se você tem uma conversa legítima acontecendo, você não quer se inter-combinar com isso, apenas bloquear o estabelecimento de um outro. Nisso, minha resposta difere completamente da de Angelo

    
por 20.10.2016 / 10:39
0

Ok, eu não testei isso, então eu peço desculpas antecipadamente se não funcionar (mas espero que isso te leve longe o suficiente para descobrir isso):

iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags FIN,ACK FIN,ACK --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -p tcp -m state --state ESTABLISHED --tcp-flags RST RST --dport 25 -m recent --name smtplimit --set
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -m limit --limit 1/minute -j LOG --log-prefix 'SMTP limit:'
iptables -A INPUT -s 192.168.0.0/24 -m recent --name smtplimit --rcheck --seconds 30 --hitcount 1 -j DROP
    
por 20.10.2016 / 05:40