Se tivermos utilizadores com portáteis que necessitem enviar mails de fora da nossa organização, vamos ter de configurar autenticação no Postfix, de modo a que estes utilizadores não tenham de utilizar os servidores de SMTP das redes onde estão.
Neste artigo mostramos como configurar a autenticação no Postfix. No artigo seguinte iremos ver como configurar a encriptação dos dados. Isto é importante dado que os mecanismos de autenticação que vamos usar são em texto simples, pelo que facilmente podem ser observados.
Este artigo utiliza a distribuição Debian para descrever o processo, no entanto, o que aqui se expõe é facilmente transposto para outras distribuições, tirando a parte da instalação do software.
Assumo que já temos instalado e a funcionar o Postfix >= 2.3 e o servidor de autenticação saslauthd do Cyrus >=2.1.
Podem encontrar instruções genéricas para este processo em: http://www.postfix.org/SASL_README.html, este documento inclui instruções para versões mais antigas destes softwares.
No Debian basta fazer:
# apt-get install libsasl2 # apt-get install libsasl2-modules
Em /etc/postfix/main.cf configurar:
smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes smtpd_sasl_path = smtpd
Estas opções vão garantir que:
Ainda no /etc/postfix/main.cf devemos autorizar os utilizadores remotos autenticados:
smtpd_recipient_restrictions = permit_sasl_authenticated permit_mynetworks reject_unauth_destination reject_unauth_pipelining reject_invalid_hostname reject_non_fqdn_sender reject_unknown_sender_domain reject_non_fqdn_recipient reject_unknown_recipient_domain reject_rbl_client bl.spamcop.net reject_rbl_client list.dsbl.org reject_rbl_client dnsbl.njabl.org reject_rbl_client relays.ordb.org check_policy_service inet:127.0.0.1:60000
Para o SuSE >= 10.0 (pelo menos), podemos saltar esta secção, dado que a configuração por omissão é suficiente.
O Postfix corre em ambiente 'chroot', assim é necessário configurar o saslauthd para correr num lugar acessível ao Postfix.
Devemos editar o ficheiro /etc/default/saslauthd (ATENÇÃO: esta configuração é específica do Debian) e modificar a linha onde se lê:
OPTIONS="-c"
Para:
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
É necessário criar a directoria:
# mkdir -p /var/spool/postfix/var/run/saslauthd
E garantir que esta tem uma ownership root:sasl:
# chown root:sasl /var/spool/postfix/var/run/saslauthd
Naturalmente que o utilizador postfix tem de conseguir ler esta directoria. Para isso acrescenta-se o utilizador postfix ao grupo sasl:
# adduser postfix sasl
Por omissão o servidor de autenticação (saslauthd) cria o "named socket" em /var/run/saslauthd. Algumas aplicações esperam encontrar neste sitio o socket, de forma que devemos criar um link simbólico para a nova directoria.
Devemos primeiro desligar o servidor de autenticação:
# /etc/init.d/saslauthd stop
E depois:
# cd /var/run # mv saslauthd saslauthd.old # ln -s /var/spool/postfix/var/run/saslauthd saslauthd
Por omissão, no Debian, o postfix procura a configuração do servidor de autenticação em /etc/postfix/sasl. Nesta directoria deve-se criar o ficheiro smtpd.conf com o seguinte conteúdo:
pwcheck_method: saslauthd mech_list: PLAIN LOGIN
Neste momento podemos reiniciar o postfix e o servidor de autenticação:
/etc/init.d/saslauthd start /etc/init.d/postfix restart
Se ligarmos à porta 25 do servidor postfix vamos obter:
$ telnet postfix.example.com 25 Trying 192.168.56.12... Connected to postfix.example.com. Escape character is '^]'. 220 postfix.example.com ESMTP Postfix
E em resposta ao comando 'EHLO':
EHLO teste 250-postfix.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN
Para nos autenticarmos temos de obter o para utilizador, palavra passe codificados de forma correcta:
$ perl -MMIME::Base64 -e 'print encode_base64("\0NomeUtilizador\0PalavraPasse");'
AUTH PLAIN AE5vbWVVdGlsaXphZG9yAFBhbGF2cmFQYXNzZQ== 235 2.0.0 Authentication successful QUIT 221 2.0.0 Bye
Em relação ao anterior apenas temos de modificar o ficheiro /etc/postfix/sasl/smtpd.conf para:
pwcheck_method: auxprop auxprop_plugin: sasldb mech_list: PLAIN LOGIN CRAM-MD5 DIGEST-MD5
Notar que os utilizadores vão ter a forma 'nomeutilizador@dominio sasl', o domínio sasl deve corresponder a um FQDN. A variável do postfix que controla o domínio sasl utilizado é smtpd_sasl_local_domain.
Para termos uma ideia de qual é o domínio sasl que estamos a utilizar num dado servidor, podemos usar o comando sasldblistusers2.
O teste da configuração é idêntico ao que se fez para a autenticação contra as contas do sistema.
Em regra prefiro não utilizar esta forma de autenticação. Faço a autenticação contra as contas do sistema, para o efeito crio um utilizador apenas para este fim. Assim posso verificar o que se passa com o envio de mail a partir do exterior às redes locais.