Cuando instalamos postfix o migramos servidores de windows para linux notamos que la mejoria es enorme pero muchas veces no nos damos cuenta que siempre quedan algunos huecos de seguridad abiertos. Uno de ellos son los puertos smtp sin autenticar, o sea, que haciendole telnet a los servidores de correo se pueden enviar correos anonimos.
A continuacion se explica como aunteticar el smtp, aclarando las condiciones siguientes:
En el momento del tutorial se requería instalado debian etch 4.0, postfix, dovecot, squirrelmail y usuarios Unix con autenticacion PAM. Hay que adaptarlo para LDAP u otras integraciones.
aptitude install postfix-tls sasl2-bin libsasl2 libsasl2-modules
ahora editamos el fichero
/etc/postfix/main.cf
y añadimos las sgtes líneas preferentemente antes de las clases donde se define la salida nacional e internacional para los usuarios
PARA SEGURIDAD SASL
smtp_sasl_auth_enable = no smtpd_helo_required = yes smtpd_sasl_auth_enable = yes smtpd_sasl_authenticated_header = yes smtpd_sasl_security_options = noanonymous broken_sasl_auth_clients = yes disable_vrfy_command = yes
y su usa politicas de salida nacional e internacional, estas deben quedar asi
smtpd_sender_restrictions = ... permit_sasl_authenticated, reject smtpd_recipient_restrictions = ... permit_sasl_authenticated, reject <code> cuando pongo los tres puntos suspensivos en estas clases es porque suponemos que tenemos ya cosas creadas ahi, ellas e respetan y solo se les incluye el parametro que relaciono. Crear el fichero <code>/etc/postfix/sasl/smtpd.conf
luego
touch /etc/postfix/sasl/smtpd.conf<code> luego editamos ese fichero <code> mc -e /etc/postfix/sasl/smtpd.conf
y le pones dentro estas dos lineas
pwcheck_method: saslauthd mech_list: plain login
editamos
/etc/default/saslauthd
borramos todo loque tiene dentro y ponemos estas lineas
START=yes MECHANISMS="pam" MECH_OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd" THREADS=5 OPTIONS="-c"
Hacemos los sgte:
rm -r /var/run/saslauthd/ mkdir -p /var/spool/postfix/var/run/saslauthd ln -s /var/spool/postfix/var/run/saslauthd /var/run adduser postfix sasl
asegurese que en el main.cf del postfix no haya ninguna ip de la red local y que solo exista las ip de los servidores que te hacen smtp permitido
Ahora reiniciemos los servicios postfix y saslauth
/etc/init.d/postfix restart
/etc/init.d/saslauthd start
En el squirrelmail en el config.php busque y configure estos parametros de este modo
$pop_before_smtp = true; $smtp_auth_mech = 'login'; $imap_auth_mech = 'login';
para chequear si el sasl esta trabajando y partiendo que el usuario es pepe y la contraseña es 123 ejecute esto en la consola de ese server
testsaslauthd -u pepe -p 123
si esta bien devolvera
0: OK "Success."
si esta mal devolvera esto otro
0: NO "authentication failed"
Para probar que haciendo telnet no se puede enviar correo pruebelo así
telnet localhost 25
luego ejecute esto
ehlo nombre del servidor
seguido de esto
mail from: usuario@dominio
luego
rcpt to: miusuario@midominio
si le da un mensaje como este
554 5.7.1 <usuario@dominio>: Relay access denied
entonces ya no tiene problema, si le deja enviar el correo, aún estas en un verdadero problema
otra cosa, borre el contenido del fichero dovecot.conf y póngale esto dentro
protocols = imap pop3 disable_plaintext_auth = no log_timestamp = "%Y-%m-%d %H:%M:%S " mail_location = maildir:%h/Maildir mail_extra_groups = mail protocol imap { } protocol pop3 { pop3_uidl_format = %08Xu%08Xv } auth default { mechanisms = plain login passdb pam { } userdb passwd { } socket listen { client { # Assuming the default Postfix $queue_directory setting path = /var/spool/postfix/private/auth mode = 0660 # Assuming the default Postfix user and group user = postfix group = postfix } } user = root } dict { } plugin { }