Eu escrevi um tutorial há um tempo atrás no SMTP auth no Postfix. A fonte pode ser encontrada no link .
TLS
Sempre que você envia uma senha pela rede, ela deve ser criptografada. Adicione os seguintes parâmetros ao seu main.cf
para ativar o TLS:
# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
É claro que você precisa ter certeza de que as opções cert_file estão apontando para certificados válidos. Os certificados de serpentro padrão devem ser seguros o suficiente para a maioria dos usuários, mas você sempre pode comprar alguns certificados assinados pela CA.
Você pode testar o TLS usando o utilitário OpenSSL
$ openssl s_client -starttls smtp -crlf -connect 127.0.0.1:25
CONNECTED(00000003)
[output truncated]
SSL handshake has read 1646 bytes and written 354 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 17C511889EDC11109C9F71C16F7F70AB9B8868129C4B796F96B2F0A68E581A8E
Session-ID-ctx:
Master-Key: E391BF9B8940CD36D5E98BC5FAF05860E86AAE4667D5E8E87081AD4A98A7EA91F770790C053A2ECCA42AD2937AD83F90
Key-Arg : None
Start Time: 1365632805
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
250 DSN
quit
221 2.0.0 Bye
closed
$
SASL
O SMTP não possui nenhum recurso de autenticação integrado, mas pode ser estendido usando a estrutura SASL. SASL é descrito no RFC4422. Para manter as coisas simples, usaremos o PAM como um back-end de autenticação. Consulte o saslauthd (8) para obter mais informações sobre backends de autenticação.
Para configurar o SASL: Instale todos os pacotes necessários para o SASL:
$ sudo apt-get install libsasl2-2 sasl2-bin libsasl2-modules
Edite /etc/default/saslauthd
. Você pode deixar as configurações padrão, mas verifique se elas correspondem:
[...]
START=yes
MECHANISMS="pam"
THREADS=1
[...]
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Crie /etc/postfix/sasl/smtpd.conf
:
saslauthd_version: 2
pwcheck_method: saslauthd
mech_list: plain login
Modifique /etc/postfix/main.cf
:
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions =
permit_sasl_authenticated,
permit_mynetworks,
check_relay_domains
Adicione o usuário postfix ao grupo sasl Unix:
$ adduser postfix sasl
Start the SASL daemon and restart Postfix:
$ /etc/init.d/saslauthd start
$ /etc/init.d/postfix restart
Você pode testar a funcionalidade SMTP AUTH criando um hash base64 de sua senha e usando-a para fazer logon:
$ printf '# TLS parameters
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
%s$ openssl s_client -starttls smtp -crlf -connect 127.0.0.1:25
CONNECTED(00000003)
[output truncated]
SSL handshake has read 1646 bytes and written 354 bytes
---
New, TLSv1/SSLv3, Cipher is DHE-RSA-AES256-SHA
Server public key is 2048 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID: 17C511889EDC11109C9F71C16F7F70AB9B8868129C4B796F96B2F0A68E581A8E
Session-ID-ctx:
Master-Key: E391BF9B8940CD36D5E98BC5FAF05860E86AAE4667D5E8E87081AD4A98A7EA91F770790C053A2ECCA42AD2937AD83F90
Key-Arg : None
Start Time: 1365632805
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
250 DSN
quit
221 2.0.0 Bye
closed
$
%s' 'username' 'password' | openssl base64
AHVzZXJuYW1lAHBhc3N3b3Jk
$ telnet localhost 25
Trying 127.0.0.1...
Connected to localhost.
Escape character is '^]'.
220 mail.gallische-dorp.net ESMTP Postfix
EHLO localhost
250-mail.gallische-dorp.net
250-PIPELINING
250-SIZE 20480000
250-VRFY
250-ETRN
250-STARTTLS
250-AUTH PLAIN LOGIN
250-AUTH=PLAIN LOGIN
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
AUTH PLAIN AHVzZXJuYW1lAHBhc3N3b3Jk
235 2.7.0 Authentication successful
quit
221 2.0.0 Bye
Connection closed by foreign host.