Postfix + Dovecot + Squirrelmail y usuarios locales – Redes PYMES

Índice general de la serie: Redes de Computadoras para las PYMES: Introducción

Este artículo es continuación y último de la miniserie:

¡Hola amigas y amigos!

Los Entusiastas quieren tener su propio servidor de correo. No desean utilizar servidores en los que la «Privacidad» está entre signos de interrogación. El encargado de implementar el servicio en su pequeño servidor no es especialista en el tema y tratará de instalar inicialmente el núcleo de un futuro y completo servidor de correo. Es que las «ecuaciones» para hacer un Full Mailserver son un poco difíciles de entender y de aplicar. 😉

Anotaciones al margen

  • Es necesario tener claras cuales funciones realiza cada programa involucrado en un Mailserver. Como guía inicial damos toda una serie de enlaces útiles con el declarado propósito de que se visiten.
  • Implementar de forma manual y desde cero un Completo Servicio de Correo, es un proceso fatigoso, a menos que Usted sea uno de los «Elegidos» que realizan diariamente ese tipo tarea. Un Servidor de Correo está formado -de forma general- por diversos programas que separadamente manejan SMTP, POP / IMAP, Almacenamiento Local de los Mensajes, tareas relacionadas con el tratamiento del SPAM, Antivirus, etcétera. TODOS esos programas deben comunicarse los unos con los otros de forma correcta.
  • No existe una receta universal o «mejores prácticas» sobre cómo administrar los usuarios; dónde y cómo almacenar los mensajes, o cómo hacer que todos los componentes trabajen como un todo único.
  • El ensamblaje y puesta a punto de un Mailserver tiende a ser odioso en materias como los permisos y propietarios de archivos, elección de cual usuario será el encargado de un determinado proceso, y en pequeños errores cometidos en algún fichero de esotérica configuración.
  • A menos que Usted sepa muy bien que es lo que está haciendo, el resultado final será el de un Servidor de Correo inseguro o ligeramente no funcional. Que al final de la implementación No Funcione, será posiblemente el menor de los males.
  • Podemos encontrar en Internet una buena cantidad de recetas de cómo hacer un Servidor de Correo. Una de las más completas –en mi opinión muy personal– es la que ofrece el autor Ivar Abrahamsen en su décima tercera edición de enero del 2017 «How to set up a mail server on a GNU / Linux system«.
  • También recomendamos la lectura del artículo «A Mailserver on Ubuntu 14.04: Postfix, Dovecot, MySQL«, o «A Mailserver on Ubuntu 16.04: Postfix, Dovecot, MySQL«.
  • Cierto. La mejor documentación al respecto la encontraremos en inglés.
    • Aunque nunca hagamos un Mailserver guiándonos fielmente por el How to… mencionado en el párrafo anterior, el solo hecho de seguirlo paso a paso, nos dará una muy buena idea de a qué nos estaremos enfrentando.
  • Si quieren tener un completo Mailserver en pocos pasos, pueden descargar la imagen iRedOS-0.6.0-CentOS-5.5-i386.iso, o buscar una mas moderna, sea iRedOS o iRedMail. Es la forma que personalmente recomiendo.

Vamos a instalar y configurar:

Queda por hacer:

Cómo mínimo quedarían por implementar los siguientes servicios:

  • Postgrey:  Políticas del servidor Postfix para las Listas Grises y rechazar Correo Basura.
  • Amavisd-new: script que crea una interfaz entre el MTA, y los buscadores de virus y los filtros de contenidos.
  • Clamav Antivirus: suite antivirus
  • SpamAssassin: extraer Correo Basura
  • Razor (Pyzor): captura de SPAM mediante una red distribuida y colaborativa. La red de Vipul Razor mantiene un catálogo actualizado de la propagación de correo basura o SPAM.
  • Registro DNS «DomainKeys Identified Mail» o DKIM.

Los paquetes postgrey, amavisd-new, clamav, spamassassin, razor y pyzor se encuentran en los repositorios de programas. También encontraremos al programa opendkim.

  • La correcta declaración de los registros DNS «SPF» y «DKIM» es imprescindible sino deseamos que a nuestro servidor de correo recién puesto en funcionamiento, se le declare indeseable o productor de SPAM o Correo Basura, por otros servicios de correo como Gmail, Yahoo, Hotmail, etcétera.

Comprobaciones iniciales

Recordemos que éste artículo es continuación de otros que comienzan en Squid + Autenticación PAM en CentOS 7.

Interfaz ens32 LAN conectada a la Red Interna

[root@linuxbox ~]# nano /etc/sysconfig/network-scripts/ifcfg-ens32
DEVICE=ens32
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0c:29:da:a3:e7
NM_CONTROLLED=no
IPADDR=192.168.10.5
NETMASK=255.255.255.0
GATEWAY=192.168.10.1
DOMAIN=desdelinux.fan
DNS1=127.0.0.1
ZONE=public

[root@linuxbox ~]# ifdown ens32 && ifup ens32

Interfaz ens34 WAN conectada a la Internet

[root@linuxbox ~]# nano /etc/sysconfig/network-scripts/ifcfg-ens34
DEVICE=ens34
ONBOOT=yes
BOOTPROTO=static
HWADDR=00:0c:29:da:a3:e7
NM_CONTROLLED=no
IPADDR=172.16.10.10
NETMASK=255.255.255.0
# El Router ADSL está conectado a
# ésta interfaz con
# la siguiente dirección IP
GATEWAY=172.16.10.1
DOMAIN=desdelinux.fan
DNS1=127.0.0.1
ZONE=external

Resolución DNS desde la LAN

[root@linuxbox ~]# cat /etc/resolv.conf 
search desdelinux.fan
nameserver 127.0.0.1
nameserver 172.16.10.30

[root@linuxbox ~]# host mail
mail.desdelinux.fan is an alias for linuxbox.desdelinux.fan.
linuxbox.desdelinux.fan has address 192.168.10.5
linuxbox.desdelinux.fan mail is handled by 1 mail.desdelinux.fan.

[root@linuxbox ~]# host mail.desdelinux.fan
mail.desdelinux.fan is an alias for linuxbox.desdelinux.fan.
linuxbox.desdelinux.fan has address 192.168.10.5
linuxbox.desdelinux.fan mail is handled by 1 mail.desdelinux.fan.

Resolución DNS desde Internet

buzz@sysadmin:~$ host mail.desdelinux.fan 172.16.10.30
Using domain server:
Name: 172.16.10.30
Address: 172.16.10.30#53
Aliases: 

mail.desdelinux.fan is an alias for desdelinux.fan.
desdelinux.fan has address 172.16.10.10
desdelinux.fan mail is handled by 10 mail.desdelinux.fan.

Problemas al resolver localmente el nombre de host «desdelinux.fan»

Si tienen problemas con la resolución del nombre del host «desdelinux.fan» desde la LAN, prueben a comentar la línea del archivo /etc/dnsmasq.conf donde se declara local=/desdelinux.fan/. Posteriormente, reinicien el Dnsmasq.

[root@linuxbox ~]# nano /etc/dnsmasq.conf
# Comente la línea a continuación:
# local=/desdelinux.fan/

[root@linuxbox ~]# service dnsmasq restart
Redirecting to /bin/systemctl restart  dnsmasq.service

[root@linuxbox ~]# service dnsmasq status

[root@linuxbox ~]# host desdelinux.fan
desdelinux.fan has address 172.16.10.10
desdelinux.fan mail is handled by 10 mail.desdelinux.fan.

Postfix y Dovecot

La muy extensa documentación del Postfix y del Dovecot la podemos encontrar en:

[root@linuxbox ~]# ls /usr/share/doc/postfix-2.10.1/
bounce.cf.default  LICENSE          README-Postfix-SASL-RedHat.txt
COMPATIBILITY      main.cf.default  TLS_ACKNOWLEDGEMENTS
examples           README_FILES     TLS_LICENSE

[root@linuxbox ~]# ls /usr/share/doc/dovecot-2.2.10/
AUTHORS       COPYING.MIT        dovecot-openssl.cnf  NEWS             wiki
COPYING       ChangeLog          example-config       README
COPYING.LGPL  documentation.txt  mkcert.sh            solr-schema.xml

En CentOS 7, el MTA Postfix se instala por defecto cuando escogemos la opción de un Servidor de Infraestructura. Debemos comprobar que el contexto SELinux permita escribir al Potfix en la cola local de los mensajes:

[root@linuxbox ~]# getsebool -a | grep postfix
postfix_local_write_mail_spool --> on

Modificaciones en el FirewallD

Mediante la interfaz gráfica para configurar el FirewallD, debemos garantizar que los servicios y puertos siguientes se encuentren habilitados para cada Zona:

# ------------------------------------------------------
# Arreglos en el FirewallD
# ------------------------------------------------------
# Firewall
# Zona public: servicios http, https, imap, pop3, smtp
# Zona public: puertos     80,   443,  143,  110,   25

# Zona external: servicios http, https, imap, pop3s, smtp
# Zona external: puertos     80,   443,  143,   995,   25

Instalamos Dovecot y programas necesarios

[root@linuxbox ~]# yum install dovecot mod_ssl procmail telnet

Configuración mínima del Dovecot

[root@linuxbox ~]# nano /etc/dovecot/dovecot.conf
protocols = imap pop3 lmtp
listen = *, ::
login_greeting = ¡Dovecot está listo!

Inhabilitamos explícitamente la autenticación en texto plano del Dovecot:

[root@linuxbox ~]# nano /etc/dovecot/conf.d/10-auth.conf 
disable_plaintext_auth = yes

Declaramos el Grupo con los privilegios necesarios para interactuar con el Dovecot, y la ubicación de los mensajes:

[root@linuxbox ~]# nano /etc/dovecot/conf.d/10-mail.conf
mail_location = mbox:~/mail:INBOX=/var/mail/%u
mail_privileged_group = mail
mail_access_groups = mail

Certificados para el Dovecot

Dovecot genera automáticamente sus certificados -de prueba- basado en los datos del archivo /etc/pki/dovecot/dovecot-openssl.cnf. Para tener nuevos certificados generados acorde a nuestros requisitos, debemos realizar los siguientes pasos:

[root@linuxbox ~]# cd /etc/pki/dovecot/
[root@linuxbox dovecot]# nano dovecot-openssl.cnf
[ req ]
default_bits = 1024
encrypt_key = yes
distinguished_name = req_dn
x509_extensions = cert_type
prompt = no
[ req_dn ]
# country (2 letter code)
C=CU
# State or Province Name (full name)
ST=Cuba
# Locality Name (eg. city)
L=Habana
# Organization (eg. company)
O=DesdeLinux.Fan
# Organizational Unit Name (eg. section)
OU=Entusiastas
# Common Name (*.example.com is also possible)
CN=*.desdelinux.fan
# E-mail contact
emailAddress=buzz@desdelinux.fan
[ cert_type ]
nsCertType = server

Eliminamos los certificados de prueba

[root@linuxbox dovecot]# rm certs/dovecot.pem 
rm: ¿borrar el fichero regular «certs/dovecot.pem»? (s/n) s
[root@linuxbox dovecot]# rm private/dovecot.pem 
rm: ¿borrar el fichero regular «private/dovecot.pem»? (s/n) s

Copiamos y ejecutamos el script mkcert.sh desde el directorio de la documentación

[root@linuxbox dovecot]# cp /usr/share/doc/dovecot-2.2.10/mkcert.sh .
[root@linuxbox dovecot]# bash mkcert.sh 
Generating a 1024 bit RSA private key
......++++++
................++++++
writing new private key to '/etc/pki/dovecot/private/dovecot.pem'
-----
subject= /C=CU/ST=Cuba/L=Habana/O=DesdeLinux.Fan/OU=Entusiastas/CN=*.desdelinux.fan/emailAddress=buzz@desdelinux.fan
SHA1 Fingerprint=5F:4A:0C:44:EC:EC:EF:95:73:3E:1E:37:D5:05:F8:23:7E:E1:A4:5A

[root@linuxbox dovecot]# ls -l certs/
total 4
-rw-------. 1 root root 1029 may 22 16:08 dovecot.pem
[root@linuxbox dovecot]# ls -l private/
total 4
-rw-------. 1 root root 916 may 22 16:08 dovecot.pem

[root@linuxbox dovecot]# service dovecot restart
[root@linuxbox dovecot]# service dovecot status

Certificados para el Postfix

[root@linuxbox ~]# cd /etc/pki/tls/
[root@linuxbox tls]# openssl req -sha256 -x509 -nodes -newkey rsa:4096 -days 1825 \
-out certs/desdelinux.fan.crt -keyout private/desdelinux.fan.key

Generating a 4096 bit RSA private key
.........++
..++
writing new private key to 'private/dominio.tld.key'
-----
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [XX]:CU
State or Province Name (full name) []:Cuba
Locality Name (eg, city) [Default City]:Habana
Organization Name (eg, company) [Default Company Ltd]:DesdeLinux.Fan
Organizational Unit Name (eg, section) []:Entusiastas
Common Name (eg, your name or your server's hostname) []:desdelinux.fan
Email Address []:buzz@desdelinux.fan

Configuración mínima del Postfix

Agregamos al final del archivo /etc/aliases lo siguiente:

root:     buzz

Para que los cambios tengan efecto ejecutamos el siguiente comando:

[root@linuxbox ~]# newaliases

La configuración del Postifx la podemos efectuar editando directamente el archivo /etc/postfix/main.cf o mediante el comando postconf -e cuidando de que todo el parámetro que queremos modificar o adicionar se refleje en una sola línea de la consola:

  • ¡Cada cual debe declarar las opciones que entienda y necesite!.
[root@linuxbox ~]# postconf -e 'myhostname = desdelinux.fan'
[root@linuxbox ~]# postconf -e 'mydomain = desdelinux.fan'
[root@linuxbox ~]# postconf -e 'myorigin = $mydomain'
[root@linuxbox ~]# postconf -e 'inet_interfaces = all'
[root@linuxbox ~]# postconf -e 'mydestination = $myhostname, localhost.$mydomain, localhost,$mydomain, mail.$mydomain, www.$mydomain, ftp.$mydomain'

[root@linuxbox ~]# postconf -e 'mynetworks = 192.168.10.0/24, 172.16.10.0/24, 127.0.0.0/8'
[root@linuxbox ~]# postconf -e 'mailbox_command = /usr/bin/procmail -a "$EXTENSION"'
[root@linuxbox ~]# postconf -e 'smtpd_banner = $myhostname ESMTP $mail_name ($mail_version)'

Agregamos al final del archivo /etc/postfix/main.cf las opciones dadas a continuación. Para conocer el significado de cada una de ellas, recomendamos la lectura de la documentación acompañante.

biff = no
append_dot_mydomain = no
delay_warning_time = 4h
readme_directory = no
smtpd_tls_cert_file=/etc/pki/certs/desdelinux.fan.crt
smtpd_tls_key_file=/etc/pki/private/desdelinux.fan.key
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtpd_relay_restrictions = permit_mynetworks permit_sasl_authenticated defer_unauth_destination

# Tamaño máximo del buzón 1024 megas = 1 gyga
mailbox_size_limit = 1073741824

recipient_delimiter = +
maximal_queue_lifetime = 7d
header_checks = regexp:/etc/postfix/header_checks
body_checks = regexp:/etc/postfix/body_checks

# Cuentas que envian una copia del correo entrante a otra cuenta
recipient_bcc_maps = hash:/etc/postfix/cuentas_reenviando_copia

Las siguientes líneas son importantes para determminar quién puede enviar correo y hacer relay hacia otros servidores, de forma que accidentalmente no configuremos un «open relay» que permita a usuarios no autenticados enviar correo. Debemos consultar las páginas de la ayuda del Postfix para entender que significa cada opción.

  • ¡Cada cual debe declarar las opciones que entienda y necesite!.
smtpd_helo_restrictions = permit_mynetworks,
 warn_if_reject reject_non_fqdn_hostname,
 reject_invalid_hostname,
 permit

smtpd_sender_restrictions = permit_sasl_authenticated,
 permit_mynetworks,
 warn_if_reject reject_non_fqdn_sender,
 reject_unknown_sender_domain,
 reject_unauth_pipelining,
 permit

smtpd_client_restrictions = reject_rbl_client sbl.spamhaus.org,
 reject_rbl_client blackholes.easynet.nl

# NOTA: La opción "check_policy_service inet:127.0.0.1:10023"
# habilita al programa Postgrey, y no la debemos incluir
# sino vamos a utilizar Postgrey

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

smtpd_data_restrictions = reject_unauth_pipelining

smtpd_relay_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
 
smtpd_helo_required = yes
smtpd_delay_reject = yes
disable_vrfy_command = yes

Creamos los archivos /etc/postfix/body_checks y /etc/postfix/cuentas_reenviando_copia, y modificamos el archivo /etc/postfix/header_checks.

  • ¡Cada cual debe declarar las opciones que entienda y necesite!.
[root@linuxbox ~]# nano /etc/postfix/body_checks
# Si se modifica éste archivo, no es necesario
# ejecutar postmap <nombre de este archivo>
# Para probar las reglas, ejecutar como root:
# postmap -q 'super new v1agra' regexp:/etc/postfix/body_checks
# Debe devolver:
# REJECT Regla #2 Anti Spam del cuerpo del mensaje
/viagra/ REJECT Regla #1 Anti Spam del cuerpo del mensaje
/super new v[i1]agra/ REJECT Regla #2 Anti Spam del cuerpo del mensaje

[root@linuxbox ~]# nano /etc/postfix/cuentas_reenviando_copia
# Despues de modificado, se debe ejecutar:
# postmap /etc/postfix/cuentas_reenviando_copia
# y se crea o midifica el archivo:
# /etc/postfix/cuentas_reenviando_copia.db
# ------------------------------------------
# UNA sola cuenta para reenviar una copia BCC
# BCC = Black Carbon Copy
# Ejemplo:
# webadmin@desdelinux.fan buzz@desdelinux.fan

[root@linuxbox ~]# postmap /etc/postfix/cuentas_reenviando_copia

[root@linuxbox ~]# nano /etc/postfix/header_checks
# Añadir al final del archivo
# NO REQUIERE Postmap pues son Expresiones Regulares
/^Subject: =?big5?/     REJECT Chinese encoding not accepted by this server
/^Subject: =?EUC-KR?/   REJECT Korean encoding not allowed by this server
/^Subject: ADV:/        REJECT Advertisements not accepted by this server
/^From:.*\@.*\.cn/      REJECT Sorry, Chinese mail not allowed here
/^From:.*\@.*\.kr/      REJECT Sorry, Korean mail not allowed here
/^From:.*\@.*\.tr/      REJECT Sorry, Turkish mail not allowed here
/^From:.*\@.*\.ro/      REJECT Sorry, Romanian mail not allowed here
/^(Received|Message-Id|X-(Mailer|Sender)):.*\b(AutoMail|E-Broadcaster|Emailer Platinum|Thunder Server|eMarksman|Extractor|e-Merge|from stealth[^.]|Global Messenger|GroupMaster|Mailcast|MailKing|Match10|MassE-Mail|massmail\.pl|News Breaker|Powermailer|Quick Shot|Ready Aim Fire|WindoZ|WorldMerge|Yourdora|Lite)\b/    REJECT No mass mailers allowed.
/^From: "spammer/ REJECT
/^From: "spam/ REJECT
/^Subject:.*viagra/ DISCARD
# Extensiones peligrosas
/name=[^>]*\.(bat|cmd|exe|com|pif|reg|scr|vb|vbe|vbs)/    REJECT REJECT No aceptamos adjuntos con esas extensiones

Comprobamos la sintaxis, reiniciamos Apache y Postifx, y habilitamos e iniciamos al Dovecot

[root@linuxbox ~]# postfix check
[root@linuxbox ~]#

[root@linuxbox ~]# systemctl restart httpd
[root@linuxbox ~]# systemctl status httpd

[root@linuxbox ~]# systemctl restart postfix
[root@linuxbox ~]# systemctl status postfix

[root@linuxbox ~]# systemctl status dovecot
● dovecot.service - Dovecot IMAP/POP3 email server
   Loaded: loaded (/usr/lib/systemd/system/dovecot.service; disabled; vendor preset: disabled)
   Active: inactive (dead)

[root@linuxbox ~]# systemctl enable dovecot
[root@linuxbox ~]# systemctl start dovecot
[root@linuxbox ~]# systemctl restart dovecot
[root@linuxbox ~]# systemctl status dovecot

Comprobaciones a nivel de consola

  • Es muy importante antes de continuar con la instalación y configuración de otros programas, hacer las comprobaciones mínimas necesarias de los servicios SMTP y POP.

Locales desde el propio servidor

Enviamos un correo al usuario local legolas.

[root@linuxbox ~]# echo "Hola. Este es un mensaje de prueba"|mail -s "Prueba" legolas

Comprobamos el buzón de legolas.

[root@linuxbox ~]# openssl s_client -crlf -connect 127.0.0.1:110 -starttls pop3

Después del mensaje ¡Dovecot está Listo! procedemos:

---
+OK ¡Dovecot está Listo!
USER legolas
+OK
PASS legolas
+OK Logged in.
STAT
+OK 1 559
LIST
+OK 1 messages:
1 559
.
RETR 1
+OK 559 octets
Return-Path: <root@desdelinux.fan>
X-Original-To: legolas
Delivered-To: legolas@desdelinux.fan
Received: by desdelinux.fan (Postfix, from userid 0)
    id 7EA22C11FC57; Mon, 22 May 2017 10:47:10 -0400 (EDT)
Date: Mon, 22 May 2017 10:47:10 -0400
To: legolas@desdelinux.fan
Subject: Prueba
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20170522144710.7EA22C11FC57@desdelinux.fan>
From: root@desdelinux.fan (root)

Hola. Este es un mensaje de prueba
.
QUIT
DONE
[root@linuxbox ~]#

Remotas desde un equipo de la LAN

Enviemos otro mensaje a legolas desde otro equipo de la LAN. Observemos que NO es estrictamente necesaria la seguridad TLS dentro de la Red PYME.

buzz@sysadmin:~$ sendemail -f buzz@deslinux.fan \
-t legolas@desdelinux.fan \
-u "Hola" \
-m "Saludos Legolas de tu amigo Buzz" \
-s mail.desdelinux.fan -o tls=no
May 22 10:53:08 sysadmin sendemail[5866]: Email was sent successfully!

Si intentamos conectarnos mediante telnet desde un host de la LAN -o desde Internet, por supuesto- al Dovecot, sucederá lo siguiente debido a que inhabilitamos la autenticación en texto plano:

buzz@sysadmin:~$ telnet mail.desdelinux.fan 110Trying 192.168.10.5...
Connected to linuxbox.desdelinux.fan.
Escape character is '^]'.
+OK ¡Dovecot está Listo!
user legolas
-ERR [AUTH] Plaintext authentication disallowed on non-secure (SSL/TLS) connections.
quit
+OK Logging out
Connection closed by foreign host.
buzz@sysadmin:~$

Debemos hacerlo mediante openssl. La salida completa del comando sería:

buzz@sysadmin:~$ openssl s_client -crlf -connect mail.desdelinux.fan:110 -starttls pop3
CONNECTED(00000003)
depth=0 C = CU, ST = Cuba, L = Habana, O = DesdeLinux.Fan, OU = Entusiastas, CN = *.desdelinux.fan, emailAddress = buzz@desdelinux.fan
verify error:num=18:self signed certificate
verify return:1
depth=0 C = CU, ST = Cuba, L = Habana, O = DesdeLinux.Fan, OU = Entusiastas, CN = *.desdelinux.fan, emailAddress = buzz@desdelinux.fan
verify return:1
---
Certificate chain
 0 s:/C=CU/ST=Cuba/L=Habana/O=DesdeLinux.Fan/OU=Entusiastas/CN=*.desdelinux.fan/emailAddress=buzz@desdelinux.fan
   i:/C=CU/ST=Cuba/L=Habana/O=DesdeLinux.Fan/OU=Entusiastas/CN=*.desdelinux.fan/emailAddress=buzz@desdelinux.fan
---
Server certificate
-----BEGIN CERTIFICATE-----
MIICyzCCAjSgAwIBAgIJAKUHI/2ZD+MeMA0GCSqGSIb3DQEBBQUAMIGbMQswCQYD
VQQGEwJDVTENMAsGA1UECBMEQ3ViYTEPMA0GA1UEBxMGSGFiYW5hMRcwFQYDVQQK
Ew5EZXNkZUxpbnV4LkZhbjEUMBIGA1UECxMLRW50dXNpYXN0YXMxGTAXBgNVBAMU
ECouZGVzZGVsaW51eC5mYW4xIjAgBgkqhkiG9w0BCQEWE2J1enpAZGVzZGVsaW51
eC5mYW4wHhcNMTcwNTIyMjAwODEwWhcNMTgwNTIyMjAwODEwWjCBmzELMAkGA1UE
BhMCQ1UxDTALBgNVBAgTBEN1YmExDzANBgNVBAcTBkhhYmFuYTEXMBUGA1UEChMO
RGVzZGVMaW51eC5GYW4xFDASBgNVBAsTC0VudHVzaWFzdGFzMRkwFwYDVQQDFBAq
LmRlc2RlbGludXguZmFuMSIwIAYJKoZIhvcNAQkBFhNidXp6QGRlc2RlbGludXgu
ZmFuMIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC7wckAiNNfYSz5hdePzKuZ
m2MMuhGDvwrDSPDEcVutznbZSgJ9bvTo445TR+Bnk+OZ80lujS2hP+nBmqxzJbpc
XR7E9eWIXxr4fP4HpRrCA8NxlthEsapVMSHW+lnPBqF2b/Bt2eYyR7gJhtlP6gRG
V57MmgL8BdYAJLvxqxDIxQIDAQABoxUwEzARBglghkgBhvhCAQEEBAMCBkAwDQYJ
KoZIhvcNAQEFBQADgYEAAuYU1nIXTbXtddW+QkLskum7ESryHZonKOCelfn2vnRl
8oAgHg7Hbtg/e6sR/W9m3DObP5DEp3lolKKIKor7ugxtfA4PBtmgizddfDKKMDql
LT+MV5/DP1pjQbxTsaLlZfveNxfLRHkQY13asePy4fYJFOIZ4OojDEGQ6/VQBI8=
-----END CERTIFICATE-----
subject=/C=CU/ST=Cuba/L=Habana/O=DesdeLinux.Fan/OU=Entusiastas/CN=*.desdelinux.fan/emailAddress=buzz@desdelinux.fan
issuer=/C=CU/ST=Cuba/L=Habana/O=DesdeLinux.Fan/OU=Entusiastas/CN=*.desdelinux.fan/emailAddress=buzz@desdelinux.fan
---
No client certificate CA names sent
Server Temp Key: ECDH, secp384r1, 384 bits
---
SSL handshake has read 1342 bytes and written 411 bytes
---
New, TLSv1/SSLv3, Cipher is ECDHE-RSA-AES256-GCM-SHA384
Server public key is 1024 bit
Secure Renegotiation IS supported
Compression: NONE
Expansion: NONE
SSL-Session:
    Protocol  : TLSv1.2
    Cipher    : ECDHE-RSA-AES256-GCM-SHA384
    Session-ID: C745B4A0236204E16234CB15DC9CDBC3D084125FF5989F5DB6C5295BF4E2D73A
    Session-ID-ctx: 
    Master-Key: 1904D204C564B76361CEA50373F8879AF793AF7D7506C04473777F6F3503A9FD919CD1F837BC67BFF29E309F352526F5
    Key-Arg   : None
    Krb5 Principal: None
    PSK identity: None
    PSK identity hint: None
    TLS session ticket lifetime hint: 300 (seconds)
    TLS session ticket:
    0000 - 4e 3a f8 29 7a 4f 63 72-ee f7 a6 4f fc ec 7e 1c   N:.)zOcr...O..~.
    0010 - 2c d4 be a8 be 92 2e ae-98 7e 87 6d 45 c5 17 a8   ,........~.mE...
    0020 - db 3a 86 80 df 8b dc 8d-f8 1f 68 6e db a7 e3 86   .:........hn....
    0030 - 08 35 e5 eb 98 b8 a4 98-68 b1 ea f7 72 f7 c1 79   .5......h...r..y
    0040 - 89 4a 28 e3 85 a4 8b da-e9 7a 29 c7 77 bf 22 0d   .J(......z).w.".
    0050 - bd 5c f6 61 8c a1 14 bd-cb 31 27 66 7a dc 51 28   .\.a.....1'fz.Q(
    0060 - b7 de 35 bd 2b 0f d4 ec-d3 e0 14 c8 65 03 b1 35   ..5.+.......e..5
    0070 - 38 34 f8 de 48 da ae 31-90 bd f6 b0 e6 9c cf 19   84..H..1........
    0080 - f5 42 56 13 88 b0 8c db-aa ee 5a d7 1b 2c dd 71   .BV.......Z..,.q
    0090 - 7a f1 03 70 90 94 c9 0a-62 e5 0f 9c bf dc 3c a0   z..p....b.....<.

    Start Time: 1495484262
    Timeout   : 300 (sec)
    Verify return code: 18 (self signed certificate)
---
+OK ¡Dovecot está Listo!
USER legolas
+OK
PASS legolas
+OK Logged in.
LIST
+OK 1 messages:
1 1021
.
RETR 1
+OK 1021 octets
Return-Path: <buzz@deslinux.fan>
X-Original-To: legolas@desdelinux.fan
Delivered-To: legolas@desdelinux.fan
Received: from sysadmin.desdelinux.fan (gateway [172.16.10.1])
    by desdelinux.fan (Postfix) with ESMTP id 51886C11E8C0
    for <legolas@desdelinux.fan>; Mon, 22 May 2017 15:09:11 -0400 (EDT)
Message-ID: <919362.931369932-sendEmail@sysadmin>
From: "buzz@deslinux.fan" <buzz@deslinux.fan>
To: "legolas@desdelinux.fan" <legolas@desdelinux.fan>
Subject: Hola
Date: Mon, 22 May 2017 19:09:11 +0000
X-Mailer: sendEmail-1.56
MIME-Version: 1.0
Content-Type: multipart/related; boundary="----MIME delimiter for sendEmail-365707.724894495"

This is a multi-part message in MIME format. To properly display this message you need a MIME-Version 1.0 compliant Email program.

------MIME delimiter for sendEmail-365707.724894495
Content-Type: text/plain;
        charset="iso-8859-1"
Content-Transfer-Encoding: 7bit

Saludos Legolas de tu amigo Buzz

------MIME delimiter for sendEmail-365707.724894495--
.
QUIT
+OK Logging out.
closed
buzz@sysadmin:~$

Squirrelmail

Squirrelmail es un cliente web escrito totalmente en PHP. Incluye soporte PHP nativo para los protocolos IMAP y SMTP, y brinda una máxima compatibilidad con los diferentes navegadores en uso. Se ejecuta correctamente sobre cualquier servidor IMAP. Tiene toda la funcionalidad que Usted necesita de un cliente de correo que incluye soporte MIME, libreta de direcciones y gestión de carpetas.

[root@linuxbox ~]# yum install squirrelmail
[root@linuxbox ~]# service httpd restart

[root@linuxbox ~]# nano /etc/squirrelmail/config.php
$domain            = 'desdelinux.fan';
$imapServerAddress   = 'mail.desdelinux.fan';
$imapPort        = 143;
$smtpServerAddress   = 'desdelinux.fan';

[root@linuxbox ~]# service httpd reload

Registro DNS Send Policy Framenwork o SPF

En el artículo Servidor DNS Autoritario NSD + Shorewall vimos en que la Zona «desdelinux.fan» quedaba configurada de la forma siguiente:

root@ns:~# nano /etc/nsd/desdelinux.fan.zone
$ORIGIN desdelinux.fan.
$TTL 3H
@       IN      SOA     ns.desdelinux.fan.      root.desdelinux.fan. (
                                        1       ; serial
                                        1D      ; refresh
                                        1H      ; retry
                                        1W      ; expire
                                        3H )    ; minimum or
                                                ; Negative caching time to live
;
@       IN      NS      ns.desdelinux.fan.
@       IN      MX      10 mail.desdelinux.fan.
@       IN      TXT     "v=spf1 a:mail.desdelinux.fan -all"
;
; Registro para resolver consultas dig desdelinux.fan
@       IN      A       172.16.10.10
;
ns      IN      A       172.16.10.30
mail    IN      CNAME   desdelinux.fan.
chat    IN      CNAME   desdelinux.fan.
www     IN      CNAME   desdelinux.fan.
;
; Registros SRV relativos al XMPP
_xmpp-server._tcp IN SRV  0 0 5269 desdelinux.fan.
_xmpp-client._tcp   IN SRV  0 0 5222 desdelinux.fan.
_jabber._tcp        IN SRV  0 0 5269 desdelinux.fan.

En ella se declara el registro:

@       IN      TXT     "v=spf1 a:mail.desdelinux.fan -all"

Para tener el mismo parámetro configurado para la Red PYME o LAN, debemos modificar el archivo de configuración del Dnsmasq de la forma siguiente:

# Registros TXT. Podemos declarar también un registro SPF
txt-record=desdelinux.fan,"v=spf1 a:mail.desdelinux.fan -all"

Después, reiniciamos el servicio:

[root@linuxbox ~]# service dnsmasq restart
[root@linuxbox ~]# service dnsmasq status

[root@linuxbox ~]# host -t TXT mail.desdelinux.fan
mail.desdelinux.fan is an alias for desdelinux.fan.
desdelinux.fan descriptive text "v=spf1 a:mail.desdelinux.fan -all"

Certificados Auto Firmados y el Apache o httpd

Aunque su navegador le indique que «El propietario de mail.desdelinux.fan ha configurado su sitio web de manera incorrecta. Para evitar que su información sea robada, Firefox no ha conectado con este sitio web», el certificado generado anterioremnte ES VALIDO, y permitirá que las credenciales entre el cliente y el servidor viajen encriptadas, después que aceptemos el certificado.

Si Usted lo desea, y como una forma de unificar los certificados, puede declarar para el Apache los mismos certificados que declaró para el Postfix, lo cual es correcto.

[root@linuxbox ~]# nano /etc/httpd/conf.d/ssl.conf
SSLCertificateFile /etc/pki/tls/certs/desdelinux.fan.crt
SSLCertificateKeyFile /etc/pki/tls/private/desdelinux.fan.key

[root@linuxbox ~]# service httpd restart
[root@linuxbox ~]# service httpd status

Grupo Diffie-Hellman

El tema de la Seguridad se hace más difícil cada día en la Internet. Uno de los ataques mas comunes sobre conexiones SSL, es el Logjam y para defenderse de él es necesario añadir parámetros no estándares a la configuración del SSL. Para ello existe la RFC-3526 «More Modular Exponential (MODP) Diffie-Hellman groups for Internet Key Exchange (IKE)«.

[root@linuxbox ~]# cd /etc/pki/tls/
[root@linuxbox tls]# openssl dhparam -out private/dhparams.pem 2048
[root@linuxbox tls]# chmod 600 private/dhparams.pem

Acorde a la versión de Apache que tengamos instalada, haremos uso del Grupo Diffie-Helman del archivo /etc/pki/tls/dhparams.pem.  Si se trata de una versión 2.4.8 o posterior, entonces tendremos que agregar al archivo /etc/httpd/conf.d/ssl.conf la siguiente línea:

SSLOpenSSLConfCmd DHParameters "/etc/pki/tls/private/dhparams.pem"

La versión de Apache que estamos utilizando es la:

[root@linuxbox tls]# yum info httpd
Complementos cargados:fastestmirror, langpacks
Loading mirror speeds from cached hostfile
Paquetes instalados
Nombre        : httpd
Arquitectura  : x86_64
Versión       : 2.4.6
Lanzamiento   : 45.el7.centos
Tamaño        : 9.4 M
Repositorio   : installed
Desde el repositorio   : Base-Repo
Resumen       : Apache HTTP Server
URL           : http://httpd.apache.org/
Licencia      : ASL 2.0
Descripción   :The Apache HTTP Server is a powerful, efficient, and extensible
              : web server.

Como tenemos una versión anterior a la 2.4.8, agregamos al final del certificado CRT antes generado, el contenido del Grupo Diffie-Helman:

[root@linuxbox tls]# cat private/dhparams.pem >> certs/desdelinux.fan.crt

Si Usted desea comprobar que los parámetros DH fueron correctamente adicionados al certificado CRT, ejecute los siguientes comandos:

[root@linuxbox tls]# cat private/dhparams.pem 
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEAnwfWSlirEuMwJft0hgAdB0km9d3qGGiErRXPfeZU+Tqp/ZFOCdzP
/O6NeXuHI4vnsTDWEAjXmpRzq/z1ZEWQa6j+l1PgTgk2XqaMViD/gN+sFPnx2EmV
keVcMDqG03gnmCgO9R4aLYT8uts5T6kBRhvxUcrk9Q7hIpGCzGtdgwaVf1cbvgOe
8kfpc5COh9IxAYahmNt+5pBta0SDlmoDz4Rk/4AFXk2mjpDYoizaYMPeIInGUzOv
/LE6Y7VVRY/BJG9EZ5pVYJPCruPCUHkhvm+r9Tt56slk+HE2d52uFRSDd2FxK3n3
cN1vJ5ogsvmHayWUjVUA18LLfGSxEFsc4wIBAg==
-----END DH PARAMETERS-----

[root@linuxbox tls]# cat certs/desdelinux.fan.crt 
-----BEGIN CERTIFICATE-----
MIIGBzCCA++gAwIBAgIJANd9FLCkDBfzMA0GCSqGSIb3DQEBCwUAMIGZMQswCQYD
VQQGEwJDVTENMAsGA1UECAwEQ3ViYTEPMA0GA1UEBwwGSGFiYW5hMRcwFQYDVQQK
DA5EZXNkZUxpbnV4LkZhbjEUMBIGA1UECwwLRW50dXNpYXN0YXMxFzAVBgNVBAMM
DmRlc2RlbGludXguZmFuMSIwIAYJKoZIhvcNAQkBFhNidXp6QGRlc2RlbGludXgu
ZmFuMB4XDTE3MDUyMjE0MDQ1MloXDTIyMDUyMTE0MDQ1MlowgZkxCzAJBgNVBAYT
AkNVMQ0wCwYDVQQIDARDdWJhMQ8wDQYDVQQHDAZIYWJhbmExFzAVBgNVBAoMDkRl
c2RlTGludXguRmFuMRQwEgYDVQQLDAtFbnR1c2lhc3RhczEXMBUGA1UEAwwOZGVz
ZGVsaW51eC5mYW4xIjAgBgkqhkiG9w0BCQEWE2J1enpAZGVzZGVsaW51eC5mYW4w
ggIiMA0GCSqGSIb3DQEBAQUAA4ICDwAwggIKAoICAQCn5MkKRdeFYiN+xgGdsRn8
sYik9X75YnJcbeZrD90igfPadZ75ehtfYIxxOS+2U+omnFgr/tCKYUVJ50seq/lB
idcLP4mt7wMrMZUDpy1rlWPOZGKkG8AdStCYI8iolvJ4rQtLcsU6jhRzEXsZxfOb
O3sqc71yMIj5qko55mlsEVB3lJq3FTDQAY2PhXopJ8BThW1T9iyl1HlYpxj7OItr
/BqiFhxbP17Fpd3QLyNiEl+exVJURYZkvuZQqVPkFAlyNDh5I2fYfrI9yBVPBrZF
uOdRmT6jv6jFxsBy9gggcy+/u1nhlKssLBEhyaKfaQoItFGCAmevkyzdl1LTYDPY
ULi79NljQ1dSwWgraZ3i3ACZIVO/kHcOPljsNxE8omI6qNFWqFd1qdPH5S4c4IR1
5URRuwyVNffEHKaCJi9vF9Wn8LVKnN/+5zZGRJA8hI18HH9kF0A1sCNj1KKiB/xe
/02wTzR/Gbj8pkyO8fjVBvd/XWI8EMQyMc1gvtIAvZ00SAB8c1NEOCs5pt0Us6pm
1lOkgD6nl90Dx9p805mTKD+ZcvRaShOvTyO3HcrxCxOodFfZQCuHYuQb0dcwoK2B
yOwL77NmxNH1QVJL832lRARn8gpKoRAUrzdTSTRKmkVrOGcfvrCKhEBsJ67Gq1+T
YDLhUiGVbPXXR9rhAyyX2QIDAQABo1AwTjAdBgNVHQ4EFgQURGCMiLVLPkjIyGZK
UrZgMkO0X8QwHwYDVR0jBBgwFoAURGCMiLVLPkjIyGZKUrZgMkO0X8QwDAYDVR0T
BAUwAwEB/zANBgkqhkiG9w0BAQsFAAOCAgEAdy1tH1DwfCW47BNJE1DW8Xlyp+sZ
uYTMOKfNdnAdeSag1WshR6US6aCtU6FkzU/rtV/cXDKetAUIzR50aCYGTlfMCnDf
KKMZEPjIlX/arRwBkvIiRTU1o3HTniGp9d3jsRWD/AvB3rSus4wfuXeCoy7Tqc9U
FaXqnvxhF8/ptFeeCeZgWu16zyiGBqMj4ZaQ7RxEwcoHSd+OByg8E9IE2cYrWP2V
6P7hdCXmw8voMxCtS2s++VRd1fGqgGxXjXT8psxmY2MrseuTM2GyWzs+18A3VVFz
UXLD2lzeYs638DCMXj5/BMZtVL2a4OhMSYY4frEbggB3ZgXhDDktUb7YhnBTViM3
2sgJJOSTltOgAnyOPE0CDcyktXVCtu3PNUc+/AB3UemI9XCw4ypmTOMaIZ2Gl6Uo
pmTk41fpFuf8pqW3ntyu43lC5pKRBqhit6MoFGNOCvFYFBWcltpqnjsWfY2gG/b5
8D5HsedueqkAsVblKPBFpv1BB9X0HhBUYsrz8jNGZGbkgR4XQoIoLbQZHEB35APU
4yT1Lzc3jk34yZF5ntmFt3wETSWwJZ+0cYPw7n4E6vbs1C7iKAMQRVy+lI5f8XYS
YKfrieiPPdmQ22Zm2Tbkqi4zjJBWmstrw6ezzAQNaaAkiOiJIwvXU81KYsN37THh
Nf0/JsEjPklCugE=
-----END CERTIFICATE-----
-----BEGIN DH PARAMETERS-----
MIIBCAKCAQEAnwfWSlirEuMwJft0hgAdB0km9d3qGGiErRXPfeZU+Tqp/ZFOCdzP
/O6NeXuHI4vnsTDWEAjXmpRzq/z1ZEWQa6j+l1PgTgk2XqaMViD/gN+sFPnx2EmV
keVcMDqG03gnmCgO9R4aLYT8uts5T6kBRhvxUcrk9Q7hIpGCzGtdgwaVf1cbvgOe
8kfpc5COh9IxAYahmNt+5pBta0SDlmoDz4Rk/4AFXk2mjpDYoizaYMPeIInGUzOv
/LE6Y7VVRY/BJG9EZ5pVYJPCruPCUHkhvm+r9Tt56slk+HE2d52uFRSDd2FxK3n3
cN1vJ5ogsvmHayWUjVUA18LLfGSxEFsc4wIBAg==
-----END DH PARAMETERS-----

Después de éstos cambios, debemos reiniciar los servicios del Postfix y del httpd:

[root@linuxbox tls]# service postfix restart
[root@linuxbox tls]# service postfix status
[root@linuxbox tls]# service httpd restart
[root@linuxbox tls]# service httpd status

Puede que la inclusión del Grupo Diffie-Helman en nuestros certificados TLS hagan que la conexión mediante HTTPS sea un poco mas lenta, pero la adición de la seguridad bien vale la pena.

Comprobando Squirrelmail

DESPUÉS que los certificados estén correctamente generados y de que comprobemos su correcto funcionamiento como hicimos mediante los comandos de consola, apunte su navegador preferido a la URL http://mail.desdelinux.fan/webmail y se conectará con el cliente web después de aceptar el certificado correpondiente. Observe que, a pesar de que especifique el protocolo HTTP, será redireccionado hacia HTTPS, y se debe a la configuración que por defecto ofrece CentOS para el Squirrelmail. Vea el archivo /etc/httpd/conf.d/squirrelmail.conf.

Sobre los buzones de los usuarios

Dovecot crea los buzones IMAP en la carpeta home de cada usuario:

[root@linuxbox ~]# ls -la /home/legolas/mail/.imap/
total 12
drwxrwx---. 5 legolas mail    4096 may 22 12:39 .
drwx------. 3 legolas legolas   75 may 22 11:34 ..
-rw-------. 1 legolas legolas   72 may 22 11:34 dovecot.mailbox.log
-rw-------. 1 legolas legolas    8 may 22 12:39 dovecot-uidvalidity
-r--r--r--. 1 legolas legolas    0 may 22 10:12 dovecot-uidvalidity.5922f1d1
drwxrwx---. 2 legolas mail      56 may 22 10:23 INBOX
drwx------. 2 legolas legolas   56 may 22 12:39 Sent
drwx------. 2 legolas legolas   30 may 22 11:34 Trash

También se guardan en /var/mail/<usuario>

[root@linuxbox ~]# less /var/mail/legolas
From MAILER_DAEMON  Mon May 22 10:28:00 2017
Date: Mon, 22 May 2017 10:28:00 -0400
From: Mail System Internal Data <MAILER-DAEMON@linuxbox>
Subject: DON'T DELETE THIS MESSAGE -- FOLDER INTERNAL DATA
Message-ID: <1495463280@linuxbox>
X-IMAP: 1495462351 0000000008
Status: RO

This text is part of the internal format of your mail folder, and is not
a real message.  It is created automatically by the mail system software.
If deleted, important folder data will be lost, and it will be re-created
with the data reset to initial values.

From root@desdelinux.fan  Mon May 22 10:47:10 2017
Return-Path: <root@desdelinux.fan>
X-Original-To: legolas
Delivered-To: legolas@desdelinux.fan
Received: by desdelinux.fan (Postfix, from userid 0)
        id 7EA22C11FC57; Mon, 22 May 2017 10:47:10 -0400 (EDT)
Date: Mon, 22 May 2017 10:47:10 -0400
To: legolas@desdelinux.fan
Subject: Prueba
User-Agent: Heirloom mailx 12.5 7/5/10
MIME-Version: 1.0
Content-Type: text/plain; charset=us-ascii
Content-Transfer-Encoding: 7bit
Message-Id: <20170522144710.7EA22C11FC57@desdelinux.fan>
From: root@desdelinux.fan (root)
X-UID: 7                                                  
Status: RO

Hola. Este es un mensaje de prueba

From buzz@deslinux.fan  Mon May 22 10:53:08 2017
Return-Path: <buzz@deslinux.fan>
X-Original-To: legolas@desdelinux.fan
Delivered-To: legolas@desdelinux.fan
Received: from sysadmin.desdelinux.fan (gateway [172.16.10.1])
        by desdelinux.fan (Postfix) with ESMTP id C184DC11FC57
        for <legolas@desdelinux.fan>; Mon, 22 May 2017 10:53:08 -0400 (EDT)
Message-ID: <739874.219379516-sendEmail@sysadmin>
From: "buzz@deslinux.fan" <buzz@deslinux.fan>
To: "legolas@desdelinux.fan" <legolas@desdelinux.fan>
Subject: Hola
Date: Mon, 22 May 2017 14:53:08 +0000
X-Mailer: sendEmail-1.56
MIME-Version: 1.0
Content-Type: multipart/related; boundary="----MIME delimiter for sendEmail-794889.899510057
/var/mail/legolas

Resumen de la miniserie PAM

Hemos visto el núcleo de un Mailserver y hecho un poco de énfasis en la seguridad. Esperamos que el artículo sirva como Punto de Entrada a tema tan complicado y susceptible de cometer errores como es la implementación de un Servidor de Correo de forma manual.

Utilizamos la autenticación local de usuarios porque si leímos bien el archivo /etc/dovecot/conf.d/10-auth.conf, veremos que al final se incluye –por defecto– el archivo de autenticación de los usuarios del sistema !include auth-system.conf.ext. Percisamente éste archivo nos dice en su cabecera que:

[root@linuxbox ~]# less /etc/dovecot/conf.d/auth-system.conf.ext
# Authentication for system users. Included from 10-auth.conf.
#
# <doc/wiki/PasswordDatabase.txt>
# <doc/wiki/UserDatabase.txt>

# PAM authentication. Preferred nowadays by most systems.
# PAM is typically used with either userdb passwd or userdb static.
# REMEMBER: You'll need /etc/pam.d/dovecot file created for PAM
# authentication to actually work. <doc/wiki/PasswordDatabase.PAM.txt>
passdb {
  driver = pam
  # [session=yes] [setcred=yes] [failure_show_msg=yes] [max_requests=<n>]
  # [cache_key=<key>] [<service name>]
  #args = dovecot
}

Y existe el otro archivo /etc/pam.d/dovecot:

[root@linuxbox ~]# cat /etc/pam.d/dovecot 
#%PAM-1.0
auth       required     pam_nologin.so
auth       include      password-auth
account    include      password-auth
session    include      password-auth

¿Qué intentamos transmitir sobre la autenticación PAM?.

  • CentOS, Debian, Ubuntu, y muchas otras distribuciones Linux, instalan al Postifx y al Dovecot con la autenticación local habilitada de forma predeterminada.
  • Muchos artículos en Internet utilizan el MySQL -y mas recientemente MariaDB- para almacenar a los usuarios y a otros datos concernientes a un Mailserver. PERO se trata de servidores para MILES DE USUARIOS, y no para una clásica Red PYME con -acaso- cientos de usuarios.
  • La autenticación mediante PAM es necesaria y suficiente para brindar servicios de redes siempre y cuando éstos se ejecuten en un solo servidor como hemos visto en ésta miniserie.
  • Se puede mapear a los usuarios almacenados en una base de datos LDAP como si fueran usuarios locales, y emplear la autenticación PAM para brindar servicios de redes desde diferentes servidores Linux que actúen como clientes LDAP del servidor de autenticación central. De ésta forma, trabajaríamos con las credenciales de los usuarios almacenados en la base de datos del servidor central LDAP, y NO sería imprescindible mantener una base de datos con usuarios locales.

¡Hasta la próxima aventura!


9 comentarios, deja el tuyo

Deja tu comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

*

*

  1. Responsable de los datos: Miguel Ángel Gatón
  2. Finalidad de los datos: Controlar el SPAM, gestión de comentarios.
  3. Legitimación: Tu consentimiento
  4. Comunicación de los datos: No se comunicarán los datos a terceros salvo por obligación legal.
  5. Almacenamiento de los datos: Base de datos alojada en Occentus Networks (UE)
  6. Derechos: En cualquier momento puedes limitar, recuperar y borrar tu información.

  1.   lagarto dijo

    Creeme que en la práctica esto es un proceso que a más de un sysadmin le da dolores de cabezas fuertes, estoy convencido que a futuro será una guía de referencia para todo aquel que desee gestionar de manera propia sus correos electronicos, caso práctico que se convierte en un abc a la hora de integrar postfix, dovecot, squirrelmail..

    Muchas gracias por tu loable aporte,

  2.   Darko dijo

    ¿Por qué no usar Mailpile, si de seguridad se trata, con PGP? También Roundcube tiene una interface mucho más intuitiva y también puede integrar PGP.

  3.   Martin dijo

    Hace 3 dias que leí el post, se ma paso darte las gracias. No tengo pensado instalar un servidor de correo pero siempre es de ayuda ver la creación de certificados, util para otras aplicaciones y dificilmente caducan estos tutoriales (mas aun cuando usas centOS).

  4.   federico dijo

    Manuel Cillero: Gracias por enlazar hacia y desde tu blog éste artículo que es el núcleo mínimo de un servidor de correo basado en Postfix y Dovecot.

    Lagarto: Como siempre, tu evaluación es muy bien recibida. Gracias.

    Darko: En casi todos mis artículo expreso mas o menos que «Cada cual implemente los servicios con los programas que mas le agrade». Gracias por comentar.

    Martin: Gracias a ti también por leer el artículo y espero te sea ayuda en tu trabajo.

  5.   Zodiac Carburus dijo

    Tremendo artículo amigo Federico. Mil Gracias por tan buen tuto.

  6.   archy dijo

    exelente aunque yo usaria «usuarios virtuales» para no tener que crear un usuario de sistema cada vez que agrego un correo, gracias aprendi un monton de cosas nuevas y este es el tipo de post que estaba esperando

  7.   Wilinton Acevedo Rueda dijo

    Buenas tardes,

    Se animarian en hacer uno igual con fedora directory server + postifx + dovecot + thunderbird o outlook .

    Tengo una parte pero estoy pegado, con gusto compartiria el documento a la comunidad @desdelinux

  8.   fico dijo

    No imaginé que llegara a mas de 3000 visitas!!!

    ¡Saludos Lagarto!

  9.   Darkend dijo

    Excelente tutorial colega.
    Podrías hacerlo para Debian 10 con usuarios de un Active Directory montado sobre Samba4???
    Imagino que sería casi lo mismo pero cambiando el tipo de autenticación.
    Muy interesante el apartado que dedicas a la creación de los certificados autofirmados.