Pesquise...

Últimos Posts

Arquivo de Posts

2019 - 2018 - 2017 - 2016 - 2015 - 2014 - 2013 - 2012

Postagens Populares

Vem Comigo

     
  •      
  •  
  •  
  •  
  •  
  •  
  •  
  •  
Tecnologia do Blogger.

Total de Acessos


Saudações,

Um VPS com meia duzia de e-mails para um ou dois domínios é uma coisa. Agora um servidor com vários clientes e com uma politica SMTP branda é outra totalmente diferente.

Sempre tem um ou outro que não sabe "brincar" e acaba fazendo spam.

Postfix SMTPd policy com o Postfwd


Quando há abuso no envio de mensagens, entra cena projetos como o Postfwd.

O Postfwd é um programa feito em Perl que trabalha de forma semelhante a um Firewall. Você programa um conjunto de regras, e estas trabalham em conjunto com o servidor SMTP.

Por exemplo, você pode definir quantas mensagens um domínio pode enviar/receber por hora. Pode também configurar o tamanho da mensagem/anexo que o cliente pode enviar, etc.

Até a data desta postagem o Postfwd3 estava na versão 2.02 de Abril de 2019. Para instalar, com um usuário comum, execute em um terminal...

$cd /tmp
$wget https://github.com/postfwd/postfwd/archive/master.zip
$unzip master.zip
$rm -Rf master.zip


Agora como root execute:

#mv -v postfwd-master /opt/postfwd


No Debian 9 eu precisei instalar uma dependência...

#apt -y install libidn2-0-dev


Precisamos também instalar algumas dependências usando o CPAN do Perl...

#perl -MCPAN -e shell


Dê um up na CPAN...

cpan[1]>install CPAN
cpan[2]>reload cpan


Depois instale os módulos necessários para o Postfwd...

cpan[3]>install Net::Server::Daemonize Net::Server::Multiplex Net::Server::PreFork Net::DNS IO::Multiplex


Os módulos também podem ser instalados via apt; acesse postfwd.org e confira o comando.

Feita a instalação vamos criar um filtro básico para demostração. Criaremos duas regras bem genéricas apenas para demostrar a funcionalidade do Postfwd. A primeira limita o numero de envio em 3 e-mails por hora. E outra que define um limite máximo de 1MB por mensagem enviada.

Abra o arquivo postfwd.cf...

#vim /opt/postfwd/etc/postfwd.cf


Apague todas as linhas e coloque as seguinte regras...
id=SASL1000; sasl_username =~ /.*@.*/; action=rate(sasl_username/3/3600/REJECT SASL1000 - Only 3 recipients per hour for $$sasl_username)
id=SASL1001; sasl_username =~ /.*@.*/; action=size(recipient/1048576/3600/REJECT SASL1001 - Only 1MB per hour for $$recipient.)

Salve as mudanças.

O conjunto ITEM = VALOR acima é uma PCRE; Perl Compatible Regular Expressions

Como eu escolhi a instalação manual, eu precisei efetuar algumas mudanças no script que INICIA e PARA o daemon. Abra o arquivo postfwd-script.sh...

#vim /opt/postfwd/bin/postfwd-script.sh


Apague seu conteúdo e insira as seguintes linhas...
#!/bin/sh
#
# Startscript for the postfwd daemon
#
# by JPK

PATH=/bin:/usr/bin:/usr/local/bin

# path to program
#PFWCMD=/usr/local/postfwd/sbin/postfwd2
#PFWCMD=/usr/local/postfwd/sbin/postfwd
PFWCMD=/opt/postfwd/sbin/postfwd3
# rulesetconfig file
#PFWCFG=/etc/postfix/postfwd.cf
PFWCFG=/opt/postfwd/etc/postfwd.cf
# pidfile
#PFWPID=/var/tmp/postfwd.pid
PFWPID=/var/tmp/postfwd3-master.pid

# daemon settings
PFWUSER=postfix
PFWGROUP=postfix
PFWINET=127.0.0.1
PFWPORT=10045

# recommended extra arguments
PFWARG="--shortlog --summary=600 --cache=600 --cache-rbl-timeout=3600 --cleanup-requests=1200 --cleanup-rbls=1800 --cleanup-rates=1200"


## should be no need to change below

P1="`basename ${PFWCMD}`"
case "$1" in

 start*)  [ /var/tmp/postfwd3-master.pid ] && rm -Rf /var/tmp/postfwd3-master.pid;
          echo "Starting ${P1}...";
   ${PFWCMD} ${PFWARG} --daemon --file=${PFWCFG} --interface=${PFWINET} --port=${PFWPORT} --user=${PFWUSER} --group=${PFWGROUP} --pidfile=${PFWPID};
   ;;

 debug*)  echo "Starting ${P1} in debug mode...";
   ${PFWCMD} ${PFWARG} -vv --daemon --file=${PFWCFG} --interface=${PFWINET} --port=${PFWPORT} --user=${PFWUSER} --group=${PFWGROUP} --pidfile=${PFWPID};
   ;;

 stop*)  ${PFWCMD} --interface=${PFWINET} --port=${PFWPORT} --pidfile=${PFWPID} --kill;
   ;;

 reload*) ${PFWCMD} --interface=${PFWINET} --port=${PFWPORT} --pidfile=${PFWPID} -- reload;
   ;;

 restart*) $0 stop;
   sleep 4;
   $0 start;
   ;;

 *)  echo "Unknown argument \"$1\"" >&2;
   echo "Usage: `basename $0` {start|stop|debug|reload|restart}" >&2;
   exit 1;;
esac
exit $?

Feita a modificação acima, vamos criar um link simbólico do mesmo para o diretório /etc/init.d...


#ln -s /opt/postfwd/bin/postfwd-script.sh /etc/init.d/postfwd


Agora você pode iniciar o daemon com o comando...


#/etc/init.d/postfwd start


Confira se ele está escutando na porta 10045...


#netstat -lpn | egrep postfwd

tcp        0      0 127.0.0.1:10045         0.0.0.0:*               LISTEN      4428/ postfwd3::pol


Com o Postfwd on, precisamos integra-lo ao Postfix. Abra o arquivo main.cf.


#vim /etc/postfix/main.cf


Localize a diretiva smtpd_recipient_restrictions, e deixe a sua configuração parecida com o exemplo abaixo...
...
127.0.0.1:10045_time_limit = 3600
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination, check_policy_service inet:127.0.0.1:10045, ....
...

Acesse postfwd.org/doc.html#INTEGRATION para mais informações!

Lembre que a ordem de cada item dentro do smtpd_recipient_restrictions é muito importante. Ajuste a sua configuração. Não queremos nem um Open Relay, certo?

Hora do teste!

No servidor em que foi feita a instalação, você pode testar o Postfwd usando o netcat com o arquivo request.sample...

#nc 127.0.0.1 10045 < /opt/postfwd/tools/request.sample


No lado cliente podemos usar a rede Tor com o telnel para executar comandos na porta 25...


$torify telnet nome-servidor-email 25


Ou simplesmente usamos um cliente de e-mail! Por exemplo, usando o SeaMonkey Mail, ao tentar enviar para 4 destinos eu recebo a mensagem...

No terminal vemos os logs do servidor

E ao tentar enviar um e-mail com mais de 1MB ( 1048576 B ), eu vejo a mensagem...

No terminal vemos os logs do servidor

Relembrando o que eu mencionei acima, estas duas regra são bem genéricas. As regras que eu uso em produção são bem diferentes. Estude o seu servidor e crie as suas próprias.

Para mais exemplos de configuração, acesse:
Viu os exemplos? Dá para fazer bastante coisa não é mesmo? ^_^

Seja curioso!

Ah!!! Lembre-se que o Postfwd não é uma ferramenta dedicada para combater SPAM. Você até pode usa-lo para tal tarefa, mas o objetivo mesmo é controlar a politica de trabalho do Postfix.


Paz a todos!