Securizar Postfix: TLS+SASL+PAM
Nov 24, 08 by Juan Lebrijo about blog, e-mail, security
Queremos dejar nuestro puerto SMTP de postfix abierto a internet, sin correr el riesgo de espionajes, ni de que spammers utilicen nuestro servicio para enviar correos masivos. Para utilizar el servicio los usuarios deberán autenticarse user/pswd y además hacerlo mediante TLS (encriptando las conexiones hacia él). Para cumplir este requsito configuraremos las tres tecnologías siguientes:
  • TLS: Encriptación SSL de la conexión.
  • SASL: Sistema de autenticación.
  • PAM: Autenticación hacia el sistema de usuario de linux.
Podemos ver que en Etch el TLS viene completamente activado (cat /usr/share/doc/postfix/README.Debian):
  • Es importante notar (para un futuro cuando se compre un certificado real) que los certificados que toma por defecto en main.cf son:
smtpd_tls_cert_file=/etc/ssl/certs/ssl-cert-snakeoil.pem
smtpd_tls_key_file=/etc/ssl/private/ssl-cert-snakeoil.key
Instalamos Cyrus-sasl para autenticación:
elite:~# apt-get install libsasl2-modules sasl2-bin
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias... Hecho
Paquetes sugeridos:
   libsasl2-modules-otp libsasl2-modules-ldap libsasl2-modules-sql libsasl2-modules-gssapi-mit
Se instalarán los siguientes paquetes NUEVOS:
   libsasl2-modules sasl2-bin
0 actualizados, 2 se instalarán, 0 para eliminar y 1 no actualizados.
Se necesita descargar 0B/271kB de archivos.
Se utilizarán 733kB de espacio de disco adicional después de desempaquetar.
  • Configuramos postfix para que autentique en SASL en main.cf:
  • # Configuración para que autentique en SASL
    ## Configuración de la Autentificación
    smtpd_sasl_auth_enable = yes
    smtpd_sasl_security_options = noanonymous
    smtpd_sasl_local_domain = $myhostname
    broken_sasl_auth_clients = yes
    ## Acciones a seguir para autentificar:
    ## permit_sasl_autenticated: permitir mandar mail a los autentificados por sasl
    ## permit_mynetworks: permite saltear el control a los de mynetworks
    smtpd_recipient_restrictions =
    permit_sasl_authenticated,
    permit_mynetworks,
    reject_unauth_destination,
    check_relay_domains
Seguimos las instrucciones /usr/share/doc/sasl2-bin/README.Debian para configurar postfix:
  • Activamos el Demonio de SASL para que este avizor para autenticar cuando postfix se lo pida. Como postfix se ejecuta en una jaula, debemos decir que el demonio se ejecute en ella. En /etc/default/saslauthd ponemos:
  • START=yes
    OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd -r"
  • Para crear ese directorio ejecutamos este commando como root:
  • elite:~# dpkg-statoverride --add root sasl 710 /var/spool/postfix/var/run/saslauthd
  • Añadimos el usuario Postfix al grupo sasl, para que pueda mandar autenticaciones al demonio:
  • elite:~# adduser postfix sasl
Hacemos las conexiones postfix-sasl-pam
  • Decimos a Postfix como queremos que valide SASL, creamos /etc/postfix/sasl/smtpd.conf:
  • pwcheck_method: saslauthd
    mech_list: login plain
  • El método de autenticación de SASL es PAM, por tanto le tenemos que decir a PAM como tiene que reaccionar ante autenticaciones SMTP /etc/pam.d/smtp
  • #%PAM-1.0
    @include common-auth
    @include common-account
    @include common-session
  • Reiniciamos los servicios:
  • elite:~# /etc/init.d/saslauthd start
    elite:~# /etc/init.d/postfix restart
En /etc/postfix/main.cf
  • Solo tengo mi localhost como zona de confianza, fuera de ahí, todos a autenticarse.:
  • mynetworks = 127.0.0.0/8