Postfix sobre internet, SMTP Autenticado
Si queremos que nuestros usuarios puedan enviar correos desde fuera de nuestra red local, por ejemplo desde sucursales, o desde su casa y además queremos tener más control sobre quien envía correo por nuestro servidor debemos usar SMTP Autenticado (SMTP-AUTH). Lo que haremos es configurar Postfix para que cuando se establezca la conexión con el servidor, primero se autentique con su usuario (email) y contraseña. Si lo hace correctamente podrá enviar correos.
Además y dado que vamos a emplear nombres de usuarios con sus passwords y no sabemos quienes pueden estar escuchando en medio, vamos a encriptar las conversaciones empleando certificados, con lo que además nos garantizaremos -una vez instalado el certificado- que nadie va a suplantar la identidad de nuestro servidor.
4.1 Configurando Postifx
En primer lugar nos vamos a un terminal y vamos a configurar Postfix para ser empleado por Internet:
sudo dpkg-reconfigure postfix
En las pantallas de configuración introducimos los siguientes datos:
-
Tipo de configuración: Sitio de Internet
-
nada: no es necesario.
-
Nombre del sistema de correo: correo.mczones.es
-
Recipiente de correo para root y postmaster: uned #usuario de correo ya creado
-
Otros destinos de correo: $myhostname $localhost.$mydomain localhost.mczones.es correo.mczones.es mczones.es
-
Forzar actualizaciones syncronas: No
-
Redes Locales: 127.0.0.0/8 192.168.3.0/24
-
Si no se necesita en la configuración actualidad
-
Limite de tamaño para Mailbox: 0
-
Carácter: +
-
Protocolos de Internet que vamos a usar: todos
Nos aseguramos de configurar el formato de mailbox para Maildir podemos editar directamente el fichero /etc/postfix/main.cf para añadir la línea o hacerlo con postconf -e:
sudo postconf -e 'home_mailbox = Maildir/'
necesitamos también:
sudo postconf -e 'mailbox_command ='
Esto hará que los nuevos correos se sitúen en /home/username/Maildir, después nos aseguraremos de emplear la misma ruta para Courier.
Configuramos Postfix para que haga la autenticación SMTP (SMTP AUTH) empleando SASL (saslauth).
sudo postconf -e 'smtpd_sasl_local_domain ='
sudo postconf -e 'smtpd_sasl_auth_enable = yes'
sudo postconf -e 'smtpd_sasl_security_options = noanonymous'
sudo postconf -e 'broken_sasl_auth_clients = yes'
sudo postconf -e 'smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination'
sudo postconf -e 'inet_interfaces = all'
Editamos o creamos el fichero /etc/postfix/sasl/smtpd.conf y añadimos las siguientes líneas:
pwcheck_method: saslauthd
mech_list: plain login
4.2 Creación de certificados y configuración de Postfix para su uso
Vamos a generar ahora los certificados para encriptar la comunicación y permitir asegurar a los clientes que la comunicación se establezca realmente con nuestro servidor:
Generamos la petición del certificado y el certificado:
touch smtpd.key
chmod 600 smtpd.key
openssl genrsa 1024 > smtpd.key
openssl req -new -key smtpd.key -x509 -days 3650 -out smtpd.crt # nos hará unas preguntas para la generación del certificado, especial atención a la CA Name, en mi caso mczones.es
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650 # hará preguntas como el anterior
Los copiamos a la carpeta /etc/ssl
sudo mv smtpd.key /etc/ssl/private/
sudo mv smtpd.crt /etc/ssl/certs/
sudo mv cakey.pem /etc/ssl/private/
sudo mv cacert.pem /etc/ssl/certs/
Configuramos Postfix para usar encriptación TLS tanto para el correo entrante como para el saliente, podemos añadir las líneas directamente en /etc/postfix/main.cf, o teclear en una consola:
sudo postconf -e 'smtp_tls_security_level = may'
sudo postconf -e 'smtpd_tls_security_level = may'
sudo postconf -e 'smtpd_tls_auth_only = no'
sudo postconf -e 'smtp_tls_note_starttls_offer = yes'
sudo postconf -e 'smtpd_tls_key_file = /etc/ssl/private/smtpd.key'
sudo postconf -e 'smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt'
sudo postconf -e 'smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem'
sudo postconf -e 'smtpd_tls_loglevel = 1'
sudo postconf -e 'smtpd_tls_received_header = yes'
sudo postconf -e 'smtpd_tls_session_cache_timeout = 3600s'
sudo postconf -e 'tls_random_source = dev:/dev/urandom'
sudo postconf -e 'myhostname = correo.mczones.es' #debemos asegurarnos de que es el nuestro.
Nuestro fichero /etc/postfix/main.cf quedará así:
# see /usr/share/postfix/main.cf.dist for a commented, fuller
# version of this file.
# Do not change these directory settings - they are critical to Postfix
# operation.
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix
setgid_group = postdrop
# appending .domain is the MUA's job.
append_dot_mydomain = no
smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
biff = no
# Uncomment the next line to generate delayed mail warnings
#delay_warning_time = 4h
myhostname = correo.mczones.es
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
myorigin = /etc/mailname
mynetworks = 127.0.0.0/8 192.168.3.0/24
#Alias virtuales
virtual_maps = ldap:valiases
valiases_server_host = servidorubuntu.mczones.es
valiases_search_base = ou=Alias,ou=Postfix,dc=mczones,dc=es
valiases_query_filter = (&(mail=%s)(objectClass=CourierMailAlias))
valiases_result_attribute = maildrop
valiases_bind = no
# Todos los dominios y los usuarios entragados por el agente de entrega local
# local_recipient_maps es usado por el servidor SMTP para rechazar el correo
# de los usuarios no conocidos
local_transport = local
mydestination = $myhostname $localhost.$mydomain localhost.mczones.es correo.mczones.es mczones.es
local_recipient_maps = unix:passwd.byname $alias_maps
#mailbox_command = procmail -a "$EXTENSION"
mailbox_size_limit = 0
recipient_delimiter = +
home_mailbox = Maildir/
relayhost =
mailbox_command =
inet_interfaces = all
inet_protocols = ipv4
smtpd_sasl_local_domain =
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes
smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks,reject_unauth_destination
smtp_tls_security_level = may
smtpd_tls_security_level = may
smtpd_tls_auth_only = no
smtp_tls_note_starttls_offer = yes
smtpd_tls_key_file = /etc/ssl/private/smtpd.key
smtpd_tls_cert_file = /etc/ssl/certs/smtpd.crt
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom
Reiniciamos postfix:
/etc/init.d/postfix restart
4.3 Autenticación con SASL
El siguiente paso es configurar Postfix para usar SASL para realizar la autenticacion SMTP (SMTP-AUTH). En primer lugar instalamos libsasl2-2 y sasl2-bin:
apt-get install libsasl2-2 sasl2-bin
Necesitamos realizar unas modificaciones para que funcione correctamente, ya que Postfix se ejecuta enjaulado (chrooted) en /var/spool/postfix, tenemos que cambiar un par de rutas para que se ejecute (por ejemplo /var/run/saslauthd pasará a ser /var/spool/postfix/var/run/saslauthd). Esto puede afectar a otras aplicaciones por lo que debemos asegurarnos de que empleen la ruta correcta.
Editamos /etc/default/saslauth para activar saslauthd. Descomentamos y/o ponemos START=yes y añadimos las líneas PWDIR, PARAMS Y PIDFILE, modificamos MECHANISMS para permitir también ldap y editamos la línea OPTIONS del final del fichero:
# Settings for saslauthd daemon
# Please read /usr/share/doc/sasl2-bin/README.Debian for details.
# Should saslauthd run automatically on startup? (default: no)
START=yes
PWDIR="/var/spool/postfix/var/run/saslauthd"
PARAMS="-m ${PWDIR}"
PIDFILE="${PWDIR}/saslauthd.pid"
# Description of this saslauthd instance. Recommended.
# (suggestion: SASL Authentication Daemon)
DESC="SASL Authentication Daemon"
# Short name of this saslauthd instance. Strongly recommended.
# (suggestion: saslauthd)
NAME="saslauthd"
# Which authentication mechanisms should saslauthd use? (default: pam)
#
# Available options in this Debian package:
# getpwent -- use the getpwent() library function
# kerberos5 -- use Kerberos 5
# pam -- use PAM
# rimap -- use a remote IMAP server
# shadow -- use the local shadow password file
# sasldb -- use the local sasldb database file
# ldap -- use LDAP (configuration is in /etc/saslauthd.conf)
#
# Only one option may be used at a time. See the saslauthd man page
# for more information.
#
# Example: MECHANISMS="pam"
MECHANISMS="pam ldap"
# Additional options for this mechanism. (default: none)
# See the saslauthd man page for information about mech-specific options.
MECH_OPTIONS=""
# How many saslauthd processes should we run? (default: 5)
# A value of 0 will fork a new process for each connection.
THREADS=5
# Other options (default: -c -m /var/run/saslauthd)
# Note: You MUST specify the -m option or saslauthd won't run!
#
# WARNING: DO NOT SPECIFY THE -d OPTION.
# The -d option will cause saslauthd to run in the foreground instead of as
# a daemon. This will PREVENT YOUR SYSTEM FROM BOOTING PROPERLY. If you wish
# to run saslauthd in debug mode, please run it by hand to be safe.
#
# See /usr/share/doc/sasl2-bin/README.Debian for Debian-specific information.
# See the saslauthd man page and the output of 'saslauthd -h' for general
# information about these options.
#
# Example for postfix users: "-c -m /var/spool/postfix/var/run/saslauthd"
#OPTIONS="-c -m /var/run/saslauthd"
OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"
Editamos el fichero /etc/saslauthd.conf para configuar los parámetros de conexión a nuestro servidor LDAP:
ldap_servers: ldap://localhost/
ldap_bind_dn: cn=admin,dc=mczones,dc=es
ldap_bind_pw: ldapadmin
ldap_search_base: ou=usuarios,dc=mczones,dc=es
ldap_filter: (&(mail=%u@%d)(objectClass=CourierMailAccount))
ldap_password_attr: userPassword
A continuación tenemos que actualizar el estado (dpkg) de /var/spool/postfix/var/run/saslauthd. El script init de saslauthd emplea esta configuración para crear el directorio perdido con la configuración adecuada de permisos y propietario:
dpkg-statoverride --force --update --add root sasl 755 /var/spool/postfix/var/run/saslauthd
Tras la ejecución del comando nos notificará un error “update given" and the "/var/spool/postfix/var/run/saslauthd" directory does not exist”, podemos ignorarlo ya que la próxima vez que iniciemos saslauthd será creado.
Finalmente iniciamos saslauthd:
sudo /etc/init.d/saslauthd start
4.4 Comprobación del funcionamiento de SMTP-AUTH y TLS
Para comprobar que funcionan correctamente tanto TLS como la autenticación podemos ejecutar el siguiente comando:
telnet localhost 25
tras establecer la conexión con el servidor postfix tecleamos:
ehlo localshost
si vemos las siguientes líneas es que todo funciona correctamente:
250-STARTTLS
tecleamos quit para salir.
4.4.1 Configuración y prueba sobre Evolution
Vamos a modificar la configuració anterior “sin cifrado”, para ello abrimos Evolution y nos vamos al Menú → Editar → Preferencias, pulsamos en la cuenta que queremos modificar, en mi caso c3@mczones.es y pulsamos Editar, tras ello seleccionamos la pestaña “Envío de correo” y en Seguridad seleccionamos “usar conexión segura” Cifrado TLS.
Para comprobar que funciona correctamente vamos a enviar un correo, seleccionamos Nuevo → Mensaje de correo y redactamos igual que “normalmente” un correo para cualquier destinatario.
Una vez hecho pulsamos Enviar/Recibir. La primera vez que lo hagamos nos aparecerá un cuadro de diálogo avisándonos de que se necesita un certificado:
Pulsamos aceptar y el correo será enviado empleando dicho certificado. Podemos comprobarlo echándole un vistazo al log:
No hay comentarios:
Publicar un comentario