miércoles, 7 de octubre de 2015

Servidor Mail Seguro parte V

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-mysql
 Seguimos con su configuración. Lo primero que haremos es otorgar permisos a Postfix para hacer posible su comunicación con SASL:
sudo adduser postfix sasl
 Creamos un directorio accesible desde el chroot de Postfix, para SASL.
sudo mkdir -p /var/spool/postfix/var/run/saslauthd
 Ahora editamos el archivo de configuración de Postfix para habilitar las características de autenticación con SASL.
sudo nano /etc/postfix/main.cf
 Donde añadimos las lineas siguientes:
# Habilitamos SASL
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 =
 Sin 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):
# Añadimos permit_sasl_authenticated a las existentes
# 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
 Salimos y guardamos main.cf y nos vamos a configurar en modo de arranque de SASL.
sudo nano /etc/default/saslauthd
  Cambiamos lo siguiente:
START=yes
# 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"
  Lo siguiente es indicar a Postfix como trabajar con SASL
sudo nano /etc/postfix/sasl/smtpd.conf
  Lo dejamos así:
pwcheck_method: saslauthd
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
  Vamos a decirle al módulo PAM como autenticar al SMTP usando MySQL.
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=1
account sufficient pam_mysql.so user=mail passwd=mailPASS host=127.0.0.1 db=maildb table=users usercolumn=id passwdcolumn=crypt crypt=1
  Con 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

 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/postfix
sudo openssl req -new -outform PEM -out postfix.cert -newkey rsa:2048 -nodes -keyout postfix.key -keyform PEM -days 999 -x509
 Este 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.

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.cf
 Donde cambiaremos las rutas y nos aseguraremos de que se use TLS:
smtpd_tls_cert_file=/etc/postfix/postfix.cert
smtpd_tls_key_file=/etc/postfix/postfix.key
smtpd_use_tls=yes
 Ahora 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.
submission inet n       -       n       -       -       smtpd
  -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
 Ahora seguimos con el otro certificado necesario; el de Courier. Como hemos hecho antes con Postfix, vamos a la carpeta de este y lo generamos:
cd /etc/courier
sudo openssl req -x509 -newkey rsa:1024 -keyout imapd.pem -out imapd.pem -nodes -days 999
 Y editamos su configuración para forzar TLS/SSL e indicar la ruta del certificado:
sudo nano /etc/courier/imapd-ssl
 Cambiando a lo siguiente:
TLS_CERTFILE=/etc/courier/imapd.pem
IMAP_TLS_REQUIRED=1
 Hasta 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.
 ¡Hasta otra!

No hay comentarios:

Publicar un comentario