Asegurando nuestro servidor.
En lo que llevamos de guía (MySQL parte I, Postfix parte II, Courier parte III, Chequeadores parte IV y pruebas Anexo I), deberíamos tener ya un servidor de correo perfectamente funcional y probado que utiliza usuarios virtuales gestionados por MySQL. Pero no hemos acabado aún con él. En este punto, la autenticación y los correos que se envían y reciben en el servidor viajan en texto plano. Esto quiere decir que en caso de que alguien espiara el proceso, podría obtener las calves o el contenido de los mensajes directamente. En este blog, naturalmente, no vamos a correr ese riesgo y vamos a implantar medidas para cifrar todo el contenido susceptible de ser interceptado por algún posible atacante.SASL
SASL cumplirá el papel de negociar, de manera externa a Postfix, los modos de autenticación de usuarios así como negociar su cifrado combinado con TLS.Empezamos instalándolo, así como sus librerías:sudo apt-get install libsasl2-modules libsasl2-modules-sql libgsasl7 libauthen-sasl-cyrus-perl sasl2-bin libpam-mysqlSeguimos con su configuración. Lo primero que haremos es otorgar permisos a Postfix para hacer posible su comunicación con SASL:
sudo adduser postfix saslCreamos un directorio accesible desde el chroot de Postfix, para SASL.
sudo mkdir -p /var/spool/postfix/var/run/saslauthdAhora editamos el archivo de configuración de Postfix para habilitar las características de autenticación con SASL.
sudo nano /etc/postfix/main.cfDonde añadimos las lineas siguientes:
# Habilitamos SASLSin salir del archivo buscamos y comprobamos las siguientes lineas en busca de la autenticación SASL (Ya deberían estar correctamente si se a copiado de anteriores post de esta guia):
smtpd_sasl_auth_enable = yes
# Si tus clientes van a utilizar Outlook Express o más antiguos
# esto necesitará ser cambiado a yes
broken_sasl_auth_clients = no
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
# Añadimos permit_sasl_authenticated a las existentesSalimos y guardamos main.cf y nos vamos a configurar en modo de arranque de SASL.
# reglas de smtpd_sender_restrictions
smtpd_sender_restrictions = permit_sasl_authenticated, permit_mynetworks, warn_if_reject reject_non_fqdn_sender, reject_unknown_sender_domain, reject_unauth_pipelining, permit
# Añadimos permit_sasl_authenticated a las existentes
# reglas de smtpd_recipient_restrictions
smtpd_recipient_restrictions = reject_unauth_pipelining, permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_recipient, reject_unknown_recipient_domain, reject_unauth_destination, check_policy_service inet:127.0.0.1:10023, permit
sudo nano /etc/default/saslauthdCambiamos lo siguiente:
START=yesLo siguiente es indicar a Postfix como trabajar con SASL
# Indicamos, en la última línea del fichero, el directorio de trabajo
# en el que creamos anteriormente dentro de spool de Postfix y
# añadimos -r para indicar que el domino es parte del nombre de usuario
OPTIONS="-r -c -m /var/spool/postfix/var/run/saslauthd"
sudo nano /etc/postfix/sasl/smtpd.confLo dejamos así:
pwcheck_method: saslauthdVamos a decirle al módulo PAM como autenticar al SMTP usando MySQL.
mech_list: plain login cram-md5 digest-md5
log_level: 7
allow_plaintext: true
auxprop_plugin: sql
sql_engine: mysql
sql_hostnames: 127.0.0.1
sql_user: mail
sql_passwd: mailPASS # Contraseña de tu usuario mail en MySQL
sql_database: maildb
sql_select: select crypt from users where id='%u@%r' and enabled = 1
sudo nano /etc/pam.d/smtp
# El siguiénte código ha de estar en dos líneas y hay que acordarse de sustiruir 'mailPASS' por nuestra contraseña del usuario mail en mySQL.
auth required pam_mysql.so user=mail passwd=mailPASS host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1Con esto hemos terminado la configuración de SASL en Postfix. Recomiendo poner a prueba su funcionamiento, mandando y recibiendo correo como se indica en el Anexo I pero estando atento a los registros de /var/log/mail.log , /var/log/mysql.log y /var/log/auth.log
account sufficient pam_mysql.so user=mail passwd=mailPASS host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1
Configurar a SASL para escuchar en las autenticaciones IMAP es algo absurdo ya que la idea es forzar a los usuarios a transmitir los datos de Courier encriptados por TLS así que no voy a profundizar en el tema. Simplemente para los que quieran utilizarlo, hay que editar /etc/courier/imapd y añadir o reemplazar la siguiente linea:
IMAP_CAPABILITY="IMAP4rev1 UIDPLUS CHILDREN NAMESPACE THREAD=ORDEREDSUBJECT THREAD=REFERENCES SORT QUOTA AUTH=CRAM-MD5 AUTH=CRAM-SHA1 IDLE"Una vez realizada la configuración de SASL, reiniciamos los servicios afectados:
sudo /etc/init.d/saslauthd restart
sudo /etc/init.d/postfix restart
TLS
TLS es el protocolo de encriptación que vamos a utilizar para transmitir los datos de nuestro servidor a traves de internet. Sin este protocolo de cifrado, tanto los mensajes como las credenciales de los usuarios se transmitirían a traves de la red en texto plano y legible por cualquier "mirón cotilla".En un principio, Ubuntu, crea para Postfix unos certificados que, si bien son úties en las pruebas y perfectamente funcionales, se recomienda cambiarlos por los nuestros a fin de dificultar su suplantación.
Para generar nuestros certificados (Uno para Postfix y otro para Courier) nos drigimos primero al directorio del servicio y allí procedemos a generarlo.
cd /etc/postfixEste comando nos servirá para generar una clave PEM encriptada con el algoritmo RSA de 2048 bits con una valided de casi 3 años, suficiente. Nos pedirá una serie de requisitos antes de hacerlo siendo estos; El código de el país (dos letras), estado o provincia, ciudad, compañía, nombre del dominio (FQDN) y e-mail. Lo anterior se puede dejar vacío o con valores por defecto pulsando intro, excepto el nombre del dominio para el que sirve la clave.
sudo openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout postfix.key -keyform PEM -days 999 -x509
El paso siguiente es indicar a Postfix que debe usar nuestros propios certificados y dónde encontrarlos. Para ello editamos su archivo de configuración:
sudo nano /etc/postfix/main.cfDonde cambiaremos las rutas y nos aseguraremos de que se use TLS:
smtpd_tls_cert_file=/etc/postfix/postfix.certAhora le toca al fichero master.cf donde buscaremos las líneas "smtps" y "submission" (el cual forzaremos también a usar TLS) asegurándonos que sean como sigue o cambiandolas en su defecto.
smtpd_tls_key_file=/etc/postfix/postfix.key
smtpd_use_tls=yes
submission inet n - n - - smtpdAhora seguimos con el otro certificado necesario; el de Courier. Como hemos hecho antes con Postfix, vamos a la carpeta de este y lo generamos:
-o smtpd_sasl_auth_enable=yes
# Si no quieres forzar a submission a utilizar únicamente TLS
# Añade un comentario a la siguiente línea
-o smtpd_tls_auth_only=yes
# -o smtpd_tls_security_level=encrypt
# -o header_checks=
# -o body_checks=<
-o smtpd_client_restrictions=permit_sasl_authenticated,reject_unauth_destination,reject
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o smtpd_sasl_tls_security_options=noanonymous
# -o milter_macro_daemon_name=ORIGINATING<
smtps inet n - - - - smtpd
-o smtpd_tls_wrappermode=yes
-o smtpd_sasl_auth_enable=yes
-o smtpd_tls_auth_only=yes
-o smtpd_client_restrictions=permit_sasl_authenticated,reject
-o smtpd_sasl_security_options=noanonymous,noplaintext
-o smtpd_sasl_tls_security_options=noanonymous
# -o milter_macro_daemon_name=ORIGINATING
cd /etc/courierY editamos su configuración para forzar TLS/SSL e indicar la ruta del certificado:
sudo openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out imapd.pem -nodes -days 999
sudo nano /etc/courier/imapd-sslCambiando a lo siguiente:
TLS_CERTFILE=/etc/courier/imapd.pemHasta aquí ya hemos configurado por completo el servidor de correo, quedaría reiniciar los servicios con la nueva configuración y probarlo todo (Anexo 1). No es poca cosa... No obstante esta no va a ser la última entrada de la guía ya que para un correcto funcionamiento y una fácil administración hace falta hablar de PHPmyAdmin y crear usuarios y alias necesarios para el correo local etc. Además quiero incluir el cliente web SquirrelMail para proporcionar acceso IMAP/POP3 a los usuarios por medio de nuestra web.
IMAP_TLS_REQUIRED=1
¡Hasta otra!
No hay comentarios:
Publicar un comentario