sábado, 18 de septiembre de 2010

Postfix sobre internet, SMTP Autenticado

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.
image
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
250-AUTH PLAIN LOGINimage
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.image
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:image
Pulsamos aceptar y el correo será enviado empleando dicho certificado. Podemos comprobarlo echándole un vistazo al log:
cat /var/log/mail.log | ccze -m ansiimage

para continuar viendo el resto de manuales Linux siga el enlace:administración de servidores con Linux

No hay comentarios: