Postfix, Dovecot Squirrelmail y sasl para correo seguro

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 {
}