Eu precisava de uma maneira de poder taxar agressivamente o número de e-mails que estavam sendo enviados para um domínio específico (todo o domínio), e qualquer e-mail que excedeu o limite de taxa precisa ser rejeitado. Não atrasado de diferido.
Eu não posso usar o Exim, então aqui estamos nós, com Postfix e PostFWD, e alguns problemas.
Algumas versões ..
Postfix v2.6.6
PostFWD v1.3.5
CentOS 6.8 x64
Então, para começar, eu verifico que minha regra de limite de taxa existe no postfwd e é interpretada corretamente a partir do postfwd.cf no diretório postfix (é):
[root@monitoringtest ~]# /usr/local/postfwd/sbin/postfwd -f /etc/postfix/postfwd.cf -C
Rule 0: id->"davelimit001"; action->"rate(recipient_domain/3/1800/421 4.7.1 - Sorry, exceeded 3 messages in 30 minutes.)"; recipient_domain->"==;dave-byrne.co.uk"
[root@monitoringtest ~]#
A taxa acima limita todos os emails enviados destinados a qualquer coisa @ dave-byrne.co.uk para apenas 3emails dentro de uma janela de 30 minutos. O domínio é meu para testes, mas na produção, isso irá classificar as mensagens de limite vinculadas a um gateway externo de E-mail para SMS.
Uma verificação rápida para garantir que o Postfix e o PostFWD estejam ativos e ouvindo (eles são):
[root@monitoringtest ~]# netstat -anpl | grep ':10040\|:25'
tcp 0 0 127.0.0.1:10040 0.0.0.0:* LISTEN 4093/postfwd.pid
tcp 0 0 0.0.0.0:25 0.0.0.0:* LISTEN 4190/master
tcp 0 0 :::25 :::* LISTEN 4190/master
[root@monitoringtest ~]#
Eu, em seguida, atiro pedidos de amostra no servidor PostFWD ouvindo internamente na porta 10040. você pode ver PostFWD passes (com sua ação DUNNO) 3 mails, antes de aplicar o limite de taxa para o quarto e rejeitá-lo com um 421. Perfeito. Agora, basta fazer o Postfix usar o PostFWD!
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=DUNNO
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=DUNNO
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=DUNNO
[root@monitoringtest ~]# nc 127.0.0.1 10040 </usr/local/postfwd/tools/request.sample
action=421 4.7.1 - Sorry, exceeded 3 messages in 30 minutes.
[root@monitoringtest ~]#
Um extrato de / var / log / maillog mostrando o limite de taxa aplicável à quarta mensagem acima
Oct 19 17:15:47 monitoringtest postfwd[25933]: [RULES] rule=0, id=davelimit001, [email protected][168.100.1.7],
sender=<[email protected]>, recipient=<[email protected]>, helo=<dave-byrne.co.uk>, proto=ESMTP, state=RCPT, rate=rate/4/21.67s, delay=0.00s,
hits=davelimit001, action=421 4.7.1 - Sorry, exceeded 3 messages in 30 minutes.
Então, para integrar com o Postfix, adicionei o seguinte ao meu arquivo post.cf principal:
[root@monitoringtest ~]# tail -n 3 /etc/postfix/main.cf
127.0.0.1:10040_time_limit = 3600
smtpd_recipient_restrictions = permit_mynetworks,
check_policy_service inet:127.0.0.1:10040
[root@monitoringtest ~]#
Tudo isso de acordo com a documentação do PostFWD.
Eu então uso o telnet localmente para me conectar ao Postfix e enviar emails para o admin [at] dave-byrne.co.uk. Assim:
[root@dedweb ~]# telnet <test-server-IP-here> smtp
Trying xx.xx.xx.xx...
Connected to xx.xx.xx.xx.
Escape character is '^]'.
220 monitoringtest.xxxxxxxxx.com ESMTP Postfix
HELO dave-byrne.co.uk
250 monitoringtest.xxxxxxxxx.com
MAIL FROM: [email protected]
250 2.1.0 Ok
RCPT TO: [email protected]
250 2.1.5 Ok
DATA
354 End data with <CR><LF>.<CR><LF>
test1.
.
250 2.0.0 Ok: queued as 946B621C15
Eu faço isso 4, 5, 6 vezes, o 4º deve ter uma taxa limitada, como aconteceu ao usar o netcat para disparar diretamente no PostFWD. Mas isso não acontece, o postfix simplesmente segue seu negócio transmitindo os e-mails como acha que deveria. Posso enviar cem e nem pensar em limitar a taxa. Durante esse tempo, o PostFWD imprime NADA nos logs, não é atingido, não passa nada, não bloqueia nada. O postfix não está usando o PostFWD, mesmo que esteja configurado em smtpd_recipient_restrictions como um check_policy_service.
E isso é onde eu estou preso. 3 dias e eu não sou o mais sábio. Alguém já usou o PostFWD (Postfix Firewall Daemon) antes de ter sucesso, com qualquer tipo de conjunto de regras, independentemente da limitação de taxa. Estou aberto a muitas sugestões, mas não posso alterar o postfix, não posso alterar o sistema operacional e não posso transferir para um retransmissor de email intermediário externo devido a problemas de segurança e fluxo de trabalho com o que está sendo enviado.
Obrigado a todos,
Dave.