108.3 Fundamentos de MTA - Teoria

Conceptos fundamentales del correo electronico

Componentes del sistema de correo

ComponenteNombre completoFuncionEjemplos
MUAMail User AgentCliente de correo (leer/escribir)Thunderbird, mutt, mail/mailx, Evolution
MTAMail Transfer AgentTransfiere correo entre servidoressendmail, postfix, exim
MDAMail Delivery AgentEntrega correo al buzon localprocmail, maildrop, dovecot-lda

Flujo del correo

Remitente (MUA) --> MTA local --> MTA remoto --> MDA --> Buzon --> Destinatario (MUA)
  1. El usuario escribe un correo con su MUA
  2. El MUA entrega al MTA local (puerto 25 SMTP)
  3. El MTA local envia al MTA del servidor destino
  4. El MTA destino pasa el correo al MDA
  5. El MDA deposita el correo en el buzon del usuario
  6. El destinatario lee el correo con su MUA

SMTP (Simple Mail Transfer Protocol)

  • Protocolo estandar para envio de correo
  • Puerto 25 (SMTP clasico)
  • Puerto 587 (submission, con autenticacion)
  • Puerto 465 (SMTPS, SMTP sobre SSL/TLS)

MTAs principales

sendmail

  • MTA mas antiguo y historicamente el mas usado
  • Configuracion compleja (/etc/mail/sendmail.cf)
  • Todavia presente en muchos sistemas como compatible
  • Todos los demas MTAs proporcionan un comando sendmail compatible

Postfix

  • MTA moderno, seguro y facil de configurar
  • Creado por Wietse Venema como reemplazo de sendmail
  • Configuracion principal: /etc/postfix/main.cf
  • Parametros basicos de main.cf:
# Nombre del host
myhostname = mail.ejemplo.com

# Dominio
mydomain = ejemplo.com

# Origen del correo saliente
myorigin = $mydomain

# Interfaces en las que escuchar
inet_interfaces = all

# Destinos locales
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# Redes confiables
mynetworks = 127.0.0.0/8, 192.168.1.0/24

# Buzon del usuario
home_mailbox = Maildir/

Exim

  • MTA predeterminado en distribuciones Debian
  • Muy configurable y flexible
  • Configuracion: /etc/exim4/

Para el examen LPIC-1: No se requiere configurar un servidor de correo completo. El foco esta en aliases, reenvio y comandos basicos.


Comando mail / mailx

Utilidad de linea de comandos para enviar y leer correo.

Enviar correo

# Forma interactiva
mail usuario@ejemplo.com
Subject: Asunto del mensaje
Cuerpo del mensaje aqui
.                            # Punto solo en una linea para terminar
 
# Forma no interactiva (pipe)
echo "Cuerpo del mensaje" | mail -s "Asunto" usuario@ejemplo.com
 
# Con archivo adjunto (usando mailx)
mail -s "Reporte" -a /tmp/reporte.txt usuario@ejemplo.com < /dev/null

Leer correo (modo interactivo)

mail                    # Abrir buzon del usuario actual

Dentro del modo interactivo de mail/mailx:

ComandoDescripcion
hListar encabezados de mensajes (headers)
N (numero)Leer el mensaje numero N (ej: 1, 2, 3)
pImprimir (mostrar) el mensaje actual (print)
nMostrar el siguiente mensaje (next)
dBorrar el mensaje actual (delete)
d 1 3 5Borrar multiples mensajes
rResponder al mensaje actual (reply)
RResponder a todos los destinatarios
s archivoGuardar mensaje en un archivo
qSalir guardando cambios (mensajes leidos se mueven a ~/mbox)
xSalir sin guardar cambios (buzon queda intacto)

Ubicacion de los buzones de correo

Los buzones en formato mbox se almacenan en:

  • /var/spool/mail/usuario - Ubicacion clasica (Red Hat/CentOS)
  • /var/mail/usuario - Ubicacion moderna (Debian/Ubuntu). En muchos sistemas es un enlace simbolico a /var/spool/mail/

Ambas rutas pueden coexistir. La variable MAIL del entorno del usuario apunta al buzon correspondiente:

echo $MAIL
# /var/spool/mail/sandra  o  /var/mail/sandra

Aliases de correo: /etc/aliases

Los aliases permiten redirigir correo destinado a un usuario a otro usuario, multiples usuarios o un comando.

Formato

alias: destino1, destino2, ...

Ejemplo de /etc/aliases

# Aliases obligatorios
postmaster: root
mailer-daemon: postmaster

# Redirigir correo de root a un usuario real
root: admin

# Alias a multiples usuarios
webmaster: juan, maria

# Alias a una direccion externa
soporte: soporte@empresa.com

# Alias a un archivo (agregar correo)
registro: /var/log/correo-registro

# Alias a un comando (pipe)
tickets: |/usr/local/bin/procesar-ticket.sh

# Alias a un archivo include
desarrolladores: :include:/etc/mail/lista-devs

Activar cambios

Despues de modificar /etc/aliases, se debe ejecutar:

newaliases

Este comando reconstruye la base de datos de aliases (normalmente /etc/aliases.db). Sin ejecutar newaliases, los cambios no tendran efecto.

Importante para el examen: Siempre ejecutar newaliases despues de editar /etc/aliases.


Redireccion personal: ~/.forward

Cada usuario puede crear un archivo ~/.forward en su directorio home para redirigir su correo sin necesidad de permisos de root.

Formato

usuario@otro-servidor.com

Ejemplos de ~/.forward

# Redirigir todo el correo a otra direccion
usuario@gmail.com
 
# Redirigir y mantener copia local
\usuario, otrousuario@gmail.com
 
# Redirigir a multiples destinos
admin@empresa.com, backup@empresa.com
  • La barra invertida \usuario evita la expansion recursiva del alias y entrega localmente
  • Sin \, el correo solo se reenvia (no se guarda copia local)

Comando mailq

Muestra la cola de correo pendiente de envio.

mailq                   # Ver cola de correo

Salida tipica:

-Queue ID-  --Size-- ----Arrival Time---- -Sender/Recipient-------
A1B2C3D4E5      1234 Mon Jan 15 14:30:00  usuario@ejemplo.com
      (host remoto no disponible)
                                           destino@otro.com
-- 1 Kbytes in 1 Request.

Equivalente en postfix:

postqueue -p            # Igual que mailq
postqueue -f            # Forzar reenvio de la cola
postsuper -d ALL        # Eliminar toda la cola

Comando sendmail (interfaz compatible)

Todos los MTAs proporcionan un comando sendmail compatible en /usr/sbin/sendmail o /usr/lib/sendmail.

# Enviar correo
sendmail usuario@ejemplo.com < mensaje.txt
 
# Procesar la cola
sendmail -q
 
# Ver la cola (equivalente a mailq)
sendmail -bp

Opciones comunes:

OpcionDescripcion
-qProcesar la cola de correo
-bpMostrar la cola (como mailq)
-biReconstruir aliases (como newaliases)
-tLeer destinatarios del encabezado del mensaje

Buzones de correo

Formatos de buzon

FormatoDescripcionUbicacion tipica
mboxUn archivo por usuario con todos los mensajes/var/spool/mail/usuario o /var/mail/usuario
MaildirUn directorio por usuario, un archivo por mensaje~/Maildir/

Estructura de Maildir

~/Maildir/
    cur/        # Mensajes leidos
    new/        # Mensajes nuevos
    tmp/        # Mensajes en proceso de entrega

Puntos clave para el examen

  1. MUA = cliente, MTA = transferencia, MDA = entrega local
  2. SMTP usa el puerto 25 (o 587 para submission)
  3. /etc/aliases define aliases del sistema; despues de editarlo ejecutar newaliases
  4. ~/.forward permite redireccion personal sin ser root
  5. mailq muestra la cola de correo pendiente
  6. El comando sendmail esta disponible como interfaz compatible en todos los MTAs
  7. Postfix se configura en /etc/postfix/main.cf
  8. La barra invertida en ~/.forward (\usuario) mantiene copia local
  9. sendmail -bi equivale a newaliases
  10. sendmail -bp equivale a mailq

Trampas del examen

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

  • MUA vs MTA vs MDA — MUA (Mail User Agent) es el cliente de correo (Thunderbird, mutt); MTA (Mail Transfer Agent) transfiere correo entre servidores (postfix, sendmail, exim); MDA (Mail Delivery Agent) entrega al buzon local (procmail). El examen describe una funcion y espera que identifiques el componente
  • newaliases es OBLIGATORIO despues de editar /etc/aliases — Sin ejecutar newaliases, los cambios en aliases NO tienen efecto porque la base de datos (/etc/aliases.db) no se actualiza. sendmail -bi es equivalente a newaliases
  • ~/.forward permite redireccion SIN ser root — A diferencia de /etc/aliases (que requiere root), cada usuario puede crear ~/.forward en su home para redirigir su propio correo. El examen pregunta como un usuario normal redirige su correo
  • Barra invertida en ~/.forward: \usuario — Sin \, el correo solo se reenvia (no se guarda copia local). Con \usuario, se mantiene copia local Y se reenvia. La barra invertida evita la expansion recursiva del alias
  • SMTP usa puerto 25, submission usa 587 — El puerto 25 es SMTP clasico; 587 es para submission (con autenticacion). El examen puede preguntar que puerto usar para envio autenticado de correo
  • Todos los MTAs proporcionan un comando sendmail compatible — Aunque uses postfix o exim, existe /usr/sbin/sendmail como interfaz compatible. El examen puede preguntar si el comando sendmail existe en un sistema con postfix (si, existe)
  • sendmail -bp = mailq, sendmail -bi = newaliases — Estas equivalencias son clasicas en el examen. -bp muestra la cola de correo, -bi reconstruye la base de datos de aliases
  • /var/spool/mail/ vs /var/mail/ — Ambas ubicaciones son validas para buzones mbox. En muchos sistemas /var/mail es un enlace simbolico a /var/spool/mail/. El examen puede preguntar por cualquiera de las dos
  • mbox vs Maildir — mbox almacena todos los mensajes en un SOLO archivo; Maildir usa un directorio con un archivo por mensaje (subdirectorios cur/, new/, tmp/). Maildir es mas robusto ante fallos pero mbox es el formato clasico
  • mailq muestra correo PENDIENTE de envio — No muestra correo recibido ni el buzon del usuario. Solo muestra la cola de correo saliente que aun no se ha podido entregar