BOMBOLOM.COM

(correio) Postfix Autenticado

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.

Instalação do software necessário

No Debian basta fazer:

# apt-get install libsasl2
# apt-get install libsasl2-modules

Autenticação com as contas do sistema (/etc/shadow)

Configuração do Postfix

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

Configuração do libsasl2

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
NOTAS: No SuSE este ficheiro fica em /usr/lib/sasl2/smtpd.conf. Por omissão já vem preenchido de forma correcta, mas nunca faz mal dar uma olhadela ao respectivo conteúdo.

Neste momento podemos reiniciar o postfix e o servidor de autenticação:

/etc/init.d/saslauthd start
/etc/init.d/postfix restart

Teste da configuração

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

Autenticação com a base de dados do SASL (/etc/sasldb2)

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.

15.10.2007 | Ler mais | Comentários | Tags ,

Voltar à Página principal | Made with PyBlosxom