Postfix e PostFWD (Postfix Firewall Daemon) - Integrando os dois

3

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.

    
por Dave Byrne 19.10.2016 / 21:34

1 resposta

2

Imediatamente após fazer essa pergunta, percebi que as restrições do destinatário postfix são executadas na ordem em que aparecem em main.cf. Então meu

[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 ~]#

Estava retornando um disco 'OK' em 'permit_mynetworks'. Um OK irá parar de processar restrições adicionais.

Resolvi meu problema colocando o check_policy_service na parte superior das minhas restrições de destinatários smtp. Se o PostFWD passar um email, ele responderá com 'DUNNO' ou em vez de 'DUNNO / OK', isso passa, mas continua a executar outras restrições de smtp.

Com isso em vigor, o PostFWD estava livre para passar o email que não acionou o limite de taxa, mas, quando o fez, ele respondeu com uma rejeição de 421. Exatamente o que eu queria.

Portanto, tenha em mente que a ordem em que você restringe e o que você está realmente restringindo é muito importante.

Por favor, note que este é um servidor de correio interno privado que serve um propósito muito específico. Não use este código para um servidor de produção ou de correio compartilhado

    
por 19.10.2016 / 21:39

Tags