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

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

Eu tenho um servidor de e-mail e tenho um péssimo hábito de usuários que gostam de clicar no botão enviar/receber simultaneamente em um segundo, fazendo com que o log seja inundado com informações desnecessárias.

Estou tentando limitar cada endereço IP na minha rede (endereço IP interno) para poder fazer uma conexão com o servidor de e-mail uma vez em 30 segundos, mas não deve ser aplicado a endereços IP externos, o servidor de e-mail algum dia receberá um encaminhamento de e-mails de outro servidor de email permitido.

Eu li a página de manual do iptables e descobri --connlimit-above Nque isso apenas limita a conexão e não por unidade de tempo.

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

Responder1

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

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/24e sua interface éeth0, se não, altere de acordo.

A primeira regra detecta todosNOVOpacotes chegandoeth0da sua LAN, e destinado à porta TCP 25, e adiciona o endereço IP aorecentelista; o segundo comando, após o recebimento de umNOVOpacote na mesma porta, verifica orecentelista (--atualizar) e, se o endereço foi inserido na lista há menos de--segundos 30atrás, descarta o pacote se o número fornecido de--hitcounts 2foi alcançado.

Observe que isso se aplica apenas aNOVOpacotes: se você tem uma conversa legítima em andamento, não quer interferir nela, apenas bloqueie o estabelecimento de outra. Nisso, minha resposta difere completamente da de Angelo

Responder2

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

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

informação relacionada