Artigos 29 jan 2007 09:11 pm

Autenticação SMTP no Postfix com pop-before-smtp

Postfix + pop-before-smtp

Recentemente tive que implementar alguma forma de autenticação no servidor de um cliente para envio de e-mail uma vez que ele decidiu utilizar um cliente de e-mail ao invés de webmail.
De cara pensei em SASL pois a configuração com Postfix não custuma ser muito trabalhosa, ao menos não no Gentoo. Infelizmente a distribuição do servidor de meu client é Fedora Core, uma distribuição com a qual não tenho nenhuma intimidade.
Procurei na internet alguma forma de fazer isso mas não fui muito feliz em minhas buscas. Como eu já tinha compilado o postfix com suporte ao mysql pois nãoa havia achado uma solução “pronta” na época da configuração do servidor, resolvi fazer o mesmo recompilando o postfix com suporte ao Mysql e SASL. Infelizmente a tentativa não deu certo e o postfix sempre morria após a primeira conexão na porta 25.
Cansado e sem paciência de tentar resolver esse problema achei melhor tentar algo mais prático, pensei então no pop-before-smtp (pop antes do smtp).

Introdução

O pop-before-smtp apesar do nome funciona tanto para protocolo POP quanto para IMAP uma vez que ele se baseia nos arquivos de log do servidor.
A técnica utilizada é verificar as conexões autorizadas no log e inserir o IP do remetente em uma lista de acessos temporária.
O pop-before-smtp é baseado em um script Perl e depende de alguns módulos como por exemplo TimeDate, Net-Netmask e DB_File.

Instalação

A instalação do Pop apesar de simples não é muito óbvia na primeira vez mas depois de parar um pouco pra prestar atenção tudo começa a fazer sentido.
Em sistemas RedHat a instalação pode ser feita com o seguinte comando:

# yum install install perl-TimeDate perl-Net-Netmask perl-DB_File pop-before-smtp

No gentoo basta executar o comando:

# emerge pop-before-smtp

A instalação via tarball também é bem simples e pode ser feita com os seguintes passos:

# cd /tmp
# wget http://ufpr.dl.sourceforge.net/sourceforge/popbsmtp/pop-before-smtp-1.41.tar.gz
# tar xzpf pop-before-smtp-1.41.tar.gz
# cp pop-before-smtp.init /etc/rc.d/init.d/pop-before-smtp
# cp pop-before-smtp /usr/sbin/
# cp pop-before-smtp-conf.pl /etc

Configuração

Edite o arquivo /etc/pop-before-smtp-conf.pl e procure pelo parâmetro $file_tail{'name'}. Verifique se ele corresponde ao arquivo de log do servidor POP/IMAP, caso contrário altere de acordo com o caminho correto do arquivo de log.

Em seguida procure pela linha com o parâmetro $grace. O padrão é de 30 minutos (30 * 60) mas preferi alterar para 10.
Agora procure pela linha com o texto “START OF PATTERNS”. Observe cada linha após essa pois cada uma configura o script para procurar por aqueles textos no arquivo de log de modo a identificar o status da conexão e o IP. Verifique a opção que melhor se adequa a seu arquivo de log e descomente as linhas. Nesse caso utilizei a opção para o Courier POP/IMAP.
Confirme se nenhuma outra linha com o parâmetro $pat está descomentada.

Por último descomente o bloco referente ao seu servidor de e-mail, nesse caso Postfix. Procure pela seguinte linha:

=cut #====================== Postfix BerkeleyDB =======================START=

Adicione um “#” no começo da linha para deixá-la comentada e assim habilitar o bloco.
Faça o mesmo para a linha do final do bloco:

#=cut #====================== Postfix BerkeleyDB =========================END=

O mais importante agora é verificar atenciosamente se nenhum dos outros blocos está habilitado (comentado).
Com o comando pop-before-smtp --dumpconfig é possível confirmar se os parâmetros foram alterados com sucesso. No caso do Postfix + Courier POP/IMAP a saída do comando deve se parecer com o resultado abaixo:

config file: /etc/pop-before-smtp-conf.pl
watchlog: /var/log/maillog
dbfile: /etc/postfix/pop-before-smtp
pat: "^(... .. ..:..:..) \S+ (?:courier)?(?:pop3|imap)(?:login|d|d-ssl): \
LOGIN, user=\S+, ip=\[[:f]*(\d+\.\d+\.\d+\.\d+)\]"
logtime_pat: "(\w\w\w +\d+ \d+:\d+:\d+)"

Habilitando o suporte no Postfix

No Postfix a configuração é bem simples e pode ser feita adicionando o valor check_client_access hash:/etc/postfix/pop-before-smtp ao parâmetro smtpd_recipient_restrictions do arquivo /etc/postfix/main.cf.
Um exemplo de configuração comum é:

smtpd_recipient_restrictions = permit_mynetworks,reject_non_fqdn_recipient, \\
	check_client_access hash:/etc/postfix/pop-before-smtp, \\
	reject_unauth_destination

As barras “\” indicam que as linhas não devem ser quebradas.

Reinicie o postfix e verifique a presença do arquivo /etc/postfix/pop-febore-smtp.db indicando o funcionamento correto do sistema.

Debugando

Caso haja problemas é possível verificar o que está acontecendo habilitando o debug no script do pop-before-smtp. Para isso habilite os seguintes parâmetros e reinicie o pop-before-smtp:

# vi /etc/pop-before-smtp-conf.pl

$debug = 1;
$logto = '/var/log/pop-before-smtp';

# /etc/init.d/pop-before-smtp restart
# tail -f /var/log/pop-before-smtp

Referências:

Pop-before-smtp Quickstart Guide

Compartilhe:

  • Print
  • Digg
  • del.icio.us
  • Google Bookmarks
  • Add to favorites
  • email
  • LinkedIn
  • Netvibes
  • PDF
  • Rec6
  • Reddit
  • RSS
  • Slashdot
  • StumbleUpon
  • Twitter
  • Yahoo! Bookmarks

Posts Relacionados:

Related posts brought to you by Yet Another Related Posts Plugin.

Trackback This Post | Subscribe to the comments through RSS Feed

Leave a Reply

Powered by WP Hashcash