211.1 - Servidores de correo

Peso: 4

Conceptos fundamentales del correo electrónico

Componentes del sistema de correo

ComponenteFunciónEjemplos
MUA (Mail User Agent)Cliente de correo del usuarioThunderbird, mutt, Outlook
MTA (Mail Transfer Agent)Transfiere correo entre servidoresPostfix, Sendmail, Exim
MDA (Mail Delivery Agent)Entrega el correo al buzón localProcmail, maildrop, Dovecot LDA
MSA (Mail Submission Agent)Recibe correo del MUA para envíoPostfix (puerto 587)

Flujo del correo electrónico

Remitente (MUA) → MSA (587) → MTA (25) → MTA destino (25) → MDA → Buzón → MUA destinatario

Protocolo SMTP y puertos

PuertoProtocoloUso
25SMTPTransferencia entre MTAs (servidor a servidor)
465SMTPSSMTP sobre SSL/TLS (histórico, reutilizado)
587SubmissionEnvío de correo autenticado (MUA a MTA)

Para el examen: El puerto 25 es para comunicación entre servidores MTA. El puerto 587 es para que los clientes (MUA) envíen correo con autenticación. Memoriza estos puertos y sus funciones.

Postfix

Postfix es el MTA más utilizado en Linux. Es modular, seguro y fácil de configurar en comparación con Sendmail.

Arquitectura de Postfix

Postfix está compuesto por múltiples procesos especializados:

ProcesoFunción
masterProceso principal, gestiona los demás
smtpdRecibe correo vía SMTP
smtpEnvía correo a otros servidores
pickupRecoge correo de la cola local (maildrop)
cleanupProcesa y limpia los mensajes entrantes
qmgrGestor de la cola de correo
localEntrega local de correo
bounceGestiona mensajes devueltos

Archivo de configuración principal: main.cf

El archivo /etc/postfix/main.cf contiene la configuración principal de Postfix:

# /etc/postfix/main.cf
 
# Identidad del servidor
myhostname = correo.ejemplo.com
mydomain = ejemplo.com
myorigin = $mydomain
 
# Redes autorizadas para enviar correo
mynetworks = 127.0.0.0/8, 192.168.1.0/24
 
# Interfaces donde escuchar
inet_interfaces = all
# inet_interfaces = loopback-only   # Solo local
 
# Protocolos
inet_protocols = ipv4
 
# Destinos locales
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain
 
# Buzón
home_mailbox = Maildir/
# mailbox_command = /usr/bin/procmail
 
# Relay
relayhost = [smtp.proveedor.com]:587
 
# Alias
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
 
# Límites
message_size_limit = 10240000
mailbox_size_limit = 51200000

Parámetros principales de main.cf

ParámetroDescripción
myhostnameFQDN del servidor de correo
mydomainDominio del servidor
myoriginDominio que aparece en el campo “From”
mynetworksRedes autorizadas para enviar correo (relay)
inet_interfacesInterfaces donde escucha Postfix
mydestinationDominios para los que el servidor acepta correo final
relayhostServidor al que reenviar correo saliente
home_mailboxRuta del buzón relativa al home del usuario
alias_mapsMapa de alias de correo
alias_databaseBase de datos de alias compilada
message_size_limitTamaño máximo de mensaje (bytes)
mailbox_size_limitTamaño máximo del buzón (bytes)

Para el examen: mynetworks define qué IPs pueden usar el servidor como relay. Una configuración incorrecta puede convertir el servidor en un open relay (retransmisión abierta), lo cual es un problema de seguridad grave.

Restricciones SMTP

Las restricciones controlan qué correo se acepta y cuál se rechaza:

# Restricciones en la recepción
smtpd_recipient_restrictions =
    permit_mynetworks,
    permit_sasl_authenticated,
    reject_unauth_destination,
    reject_unknown_sender_domain,
    reject_rbl_client zen.spamhaus.org
 
# Restricciones del remitente
smtpd_sender_restrictions =
    reject_unknown_sender_domain,
    reject_non_fqdn_sender
 
# Restricciones del cliente
smtpd_client_restrictions =
    permit_mynetworks,
    reject_unknown_client_hostname

Restricciones comunes

RestricciónDescripción
permit_mynetworksPermitir redes en mynetworks
permit_sasl_authenticatedPermitir usuarios autenticados SASL
reject_unauth_destinationRechazar relay no autorizado
reject_unknown_sender_domainRechazar remitentes con dominio sin DNS
reject_unknown_recipient_domainRechazar destinatarios con dominio sin DNS
reject_non_fqdn_senderRechazar remitentes sin FQDN
reject_rbl_clientRechazar clientes en listas negras (RBL)

Archivo master.cf

El archivo /etc/postfix/master.cf define los servicios y procesos de Postfix:

# /etc/postfix/master.cf
# servicio  tipo  privado  unpriv  chroot  wakeup  maxproc  comando
smtp        inet  n        -       y       -       -        smtpd
submission  inet  n        -       y       -       -        smtpd
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_recipient_restrictions=permit_sasl_authenticated,reject

Aliases de correo

Los alias permiten redirigir correo de un usuario a otro.

Archivo /etc/aliases

# /etc/aliases
postmaster:    root
root:          admin@ejemplo.com
webmaster:     juan
abuse:         admin
info:          juan, maria, pedro

Comando newaliases

Después de modificar /etc/aliases, se debe regenerar la base de datos:

# Regenerar la base de datos de alias
newaliases
 
# Equivalente con postalias de Postfix
postalias /etc/aliases

Para el examen: Siempre que se modifique /etc/aliases, hay que ejecutar newaliases para que los cambios surtan efecto. Esto genera el archivo hash /etc/aliases.db.

Cola de correo

Gestión de la cola

# Ver la cola de correo
mailq
# o equivalente:
postqueue -p
 
# Forzar el reenvío de la cola
postqueue -f
 
# Ver detalles de un mensaje en cola
postcat -q ID_MENSAJE
 
# Eliminar un mensaje de la cola
postsuper -d ID_MENSAJE
 
# Eliminar todos los mensajes de la cola
postsuper -d ALL
 
# Poner un mensaje en espera
postsuper -h ID_MENSAJE
 
# Liberar un mensaje en espera
postsuper -H ID_MENSAJE
 
# Reencolar todos los mensajes
postsuper -r ALL

Comandos de cola de Postfix

ComandoDescripción
mailq / postqueue -pListar mensajes en cola
postqueue -fForzar envío inmediato de la cola
postsuper -d IDEliminar un mensaje de la cola
postsuper -d ALLEliminar todos los mensajes
postsuper -h IDPoner en espera (hold)
postsuper -H IDLiberar de espera
postsuper -r ALLReencolar todos los mensajes
postcat -q IDVer contenido de un mensaje en cola

Sendmail (conceptos básicos)

Sendmail es el MTA histórico de Unix. Aunque Postfix es más popular, conviene conocer los conceptos básicos de Sendmail.

Archivos de configuración

ArchivoDescripción
/etc/mail/sendmail.cfConfiguración principal (compleja, generada automáticamente)
/etc/mail/sendmail.mcArchivo fuente de macros m4 (se edita este)
/etc/mail/accessControl de acceso (relay, rechazo)
/etc/mail/local-host-namesNombres de host locales
/etc/mail/aliasesAlias de correo

Macros m4 de Sendmail

El archivo sendmail.mc se procesa con m4 para generar sendmail.cf:

dnl /etc/mail/sendmail.mc
VERSIONID(`ejemplo')dnl
OSTYPE(`linux')dnl
define(`SMART_HOST', `smtp.proveedor.com')dnl
FEATURE(`access_db')dnl
MAILER(`local')dnl
MAILER(`smtp')dnl
# Regenerar sendmail.cf desde sendmail.mc
m4 /etc/mail/sendmail.mc > /etc/mail/sendmail.cf
 
# O en distribuciones con make
cd /etc/mail && make

Para el examen: Nunca se edita directamente sendmail.cf. Se edita sendmail.mc y se genera el .cf con m4. Postfix es mucho más sencillo de configurar y es el foco principal del examen.

Logs del correo

# Ubicación de logs
/var/log/mail.log       # Debian/Ubuntu
/var/log/maillog        # RHEL/CentOS
 
# Ver logs en tiempo real
tail -f /var/log/mail.log
 
# Filtrar logs de Postfix
journalctl -u postfix
 
# Buscar mensajes de un remitente
grep "from=<usuario@ejemplo.com>" /var/log/mail.log

Comandos de gestión de Postfix

# Verificar configuración
postconf -n            # Mostrar solo parámetros modificados
postconf -d            # Mostrar valores por defecto
postconf myhostname    # Mostrar un parámetro específico
 
# Gestión del servicio
systemctl start postfix
systemctl reload postfix    # Recargar sin reiniciar
postfix check               # Verificar configuración
postfix reload              # Equivalente a systemctl reload

Resumen de archivos clave

ArchivoFunción
/etc/postfix/main.cfConfiguración principal de Postfix
/etc/postfix/master.cfDefinición de servicios de Postfix
/etc/aliasesAlias de correo
/etc/aliases.dbBase de datos compilada de alias
/var/spool/postfix/Directorio de colas de Postfix
/var/log/mail.logLog de correo (Debian)
/var/log/maillogLog de correo (RHEL)
/etc/mail/sendmail.mcFuente de configuración de Sendmail
/etc/mail/sendmail.cfConfiguración generada de Sendmail

Trampas del examen

Errores comunes y distinciones criticas que LPI suele evaluar en este subtema:

  • Puerto 25 (MTA a MTA) vs puerto 587 (MUA a MTA) — el puerto 25 es para transferencia entre servidores. El puerto 587 (submission) es para que los clientes envien correo con autenticacion. El examen puede preguntar cual usar en cada escenario.

  • mynetworks mal configurado = open relay — si mynetworks incluye redes demasiado amplias o 0.0.0.0/0, cualquiera puede usar tu servidor para enviar spam. reject_unauth_destination en smtpd_recipient_restrictions es esencial para evitarlo.

  • newaliases es OBLIGATORIO despues de editar /etc/aliases — sin ejecutar newaliases (o postalias /etc/aliases), los cambios en el archivo de alias no surten efecto. Postfix lee la base de datos compilada .db, no el archivo de texto.

  • mydestination define los dominios LOCALES, relay_domains los de relay — si un dominio esta en mydestination, Postfix lo acepta para entrega local. Si necesitas reenviar correo a otro servidor, se usa relayhost o transport_maps.

  • Nunca editar sendmail.cf directamente — se edita sendmail.mc y se regenera con m4 sendmail.mc > sendmail.cf. El .cf es extremadamente complejo y se genera automaticamente.

  • main.cf vs master.cf en Postfixmain.cf define la configuracion global (parametros). master.cf define los servicios y procesos que Postfix ejecuta. El puerto 587 (submission) se configura en master.cf.

  • postconf -n muestra solo parametros modificadospostconf -d muestra los valores por defecto, postconf -n solo los que difieren del default. Para diagnosticar, -n es mas util.

  • MUA, MTA, MDA, MSA: conocer las siglas y sus funciones — MUA es el cliente (Thunderbird), MTA transfiere correo (Postfix), MDA entrega al buzon (Procmail), MSA recibe del MUA para envio (Postfix en puerto 587). El examen puede pedir identificar el componente correcto.

  • mailq y postqueue -p son equivalentes — ambos muestran la cola de correo. postqueue -f fuerza el reenvio. postsuper -d ALL borra toda la cola. Conocer los equivalentes es importante.

  • home_mailbox = Maildir/ la barra final indica formato Maildir — sin la barra, se interpreta como archivo mbox. Con la barra, se crea la estructura de directorios cur/, new/, tmp/. Este detalle sutil es trampa clasica.