Cómo instalar y configurar Sendmail en Debian 13 desde cero

Serie: Sendmail en Debian — Parte 1 de 6
Sendmail es un agente de transporte de correo electrónico que permite a los sistemas Linux enviar mensajes, procesar correos locales y comunicarse con otros servidores mediante SMTP.
Aunque actualmente existen diferentes alternativas para gestionar correo electrónico en Linux, Sendmail continúa siendo una herramienta útil para comprender cómo funciona el transporte de mensajes y para desarrollar automatizaciones desde la terminal.
En este tutorial aprenderemos a instalar Sendmail en Debian 13, realizar su configuración inicial, corregir el nombre de nuestro equipo, enviar mensajes locales y leer su contenido desde la terminal.
No necesitas tener un dominio propio ni una cuenta de Gmail para realizar las prácticas de esta primera parte.
1. ¿Qué aprenderemos?
Al finalizar este tutorial podremos:
- Instalar Sendmail y las herramientas necesarias.
- Comprender qué es un MTA y cómo funciona.
- Identificar los archivos principales de configuración.
- Ejecutar
sendmailconfigy entender sus mensajes. - Configurar correctamente el nombre del equipo mediante
/etc/hosts. - Enviar correos entre usuarios locales.
- Consultar, leer y administrar mensajes desde la terminal.
- Revisar el estado del servicio y sus registros.
En los siguientes artículos configuraremos Sendmail para enviar correos a Internet utilizando un servidor SMTP externo con STARTTLS.
2. ¿Qué es Sendmail?
Sendmail es un MTA (Mail Transfer Agent), es decir, un programa encargado de recibir, procesar y transportar mensajes de correo electrónico.
Un MTA puede recibir mensajes de diferentes programas, colocarlos en una cola y determinar cómo entregarlos.
Por ejemplo, una aplicación desarrollada en PHP puede generar un correo de notificación y entregarlo a Sendmail. Posteriormente, Sendmail se encargará de procesarlo y enviarlo al destino correspondiente.
2.1. ¿Cómo funciona?
En nuestro primer ejemplo utilizaremos dos usuarios locales de Debian:
┌──────────────────────────────┐
│ Usuario systemx │
│ Ejecuta el comando mail │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Sendmail │
│ Procesa el mensaje │
└──────────────┬───────────────┘
│
▼
┌──────────────────────────────┐
│ Buzón local del usuario root │
│ /var/mail/root │
└──────────────────────────────┘
En este caso, el mensaje no necesita salir a Internet.
Sendmail puede realizar la entrega directamente al buzón local del destinatario.
2.2. Diferencias entre MTA y cliente de correo
Es importante comprender que Sendmail no es lo mismo que Gmail, Thunderbird o un cliente de correo convencional.
Sendmail: procesa y transporta mensajes.
GNU Mailutils: proporciona herramientas para enviar y consultar mensajes desde la terminal.
Thunderbird: es un cliente gráfico que permite consultar cuentas y enviar mensajes mediante protocolos como IMAP y SMTP.
En este tutorial utilizaremos Sendmail junto con GNU Mailutils.
3. Requisitos del tutorial
Para realizar las prácticas necesitamos:
- Debian GNU/Linux 13.
- Acceso a una terminal.
- Un usuario con permisos
sudo. - Conexión a Internet para instalar los paquetes.
- Conocimientos básicos para ejecutar comandos.
¿Funciona en otras distribuciones?
Los procedimientos también pueden servir como referencia para Debian 12 y distribuciones basadas en Debian, como Ubuntu.
Sin embargo, los paquetes, archivos y herramientas de configuración pueden variar.
En Fedora, Rocky Linux, AlmaLinux y otras distribuciones también es posible utilizar Sendmail, pero algunos procedimientos serán diferentes.
Esta guía ha sido desarrollada específicamente para Debian 13.
4. Actualizar la información de los repositorios
Antes de instalar Sendmail, actualizaremos la información de los paquetes disponibles.
Abrimos una terminal y ejecutamos:
sudo apt update
Explicación del comando
sudo
Permite ejecutar un comando con privilegios administrativos, siempre que nuestro usuario tenga autorización.
apt
Es una herramienta utilizada por Debian para administrar paquetes de software.
update
Actualiza los índices de paquetes disponibles en los repositorios configurados.
Este comando no actualiza automáticamente todos los programas instalados.
Su función principal es obtener información actualizada sobre las versiones disponibles.
Una vez finalizado, podemos continuar.
5. Instalar Sendmail y sus herramientas
Ejecutamos:
sudo apt install sendmail sendmail-cf mailutils
¿Qué hace cada parte?
sudo
Ejecuta la instalación con permisos administrativos.
apt install
Solicita al administrador de paquetes que instale los programas indicados y las dependencias necesarias.
sendmail
Instala el agente de transporte de correo.
sendmail-cf
Proporciona archivos de configuración y macros utilizadas para generar la configuración de Sendmail.
mailutils
Instala herramientas para trabajar con correo electrónico desde la terminal, incluyendo el comando mail.
Durante la instalación, Debian puede solicitar confirmación para descargar e instalar paquetes adicionales.
Podemos responder:
S
o:
Y
según el idioma y las opciones que presente APT.
También podemos presionar Enter si la opción predeterminada corresponde a continuar.
5.1. ¿Necesitamos instalar certificados TLS ahora?
Todavía no vamos a configurar el envío de mensajes por Internet.
Sin embargo, en la segunda y tercera parte utilizaremos conexiones SMTP cifradas.
Por ello, podemos instalar desde ahora:
sudo apt install ca-certificates libsasl2-modules
Estos paquetes cumplen funciones diferentes.
ca-certificates
Proporciona certificados de autoridades certificadoras de confianza que permiten verificar certificados de servidores remotos.
libsasl2-modules
Proporciona mecanismos de autenticación SASL utilizados por diferentes aplicaciones, incluyendo configuraciones de cliente SMTP.
No necesitamos generar ni comprar un certificado propio para realizar las prácticas de correo local.
6. Comprobar que Sendmail está instalado
Una vez terminada la instalación, verificaremos el estado del servicio.
Ejecutamos:
sudo systemctl status sendmail --no-pager
Explicación
systemctl
Es una herramienta utilizada para administrar servicios mediante systemd.
status
Solicita información sobre el estado de un servicio.
sendmail
Es el nombre del servicio que deseamos consultar.
--no-pager
Muestra el resultado directamente en la terminal, sin abrir un visor interactivo como less.
Resultado esperado
Podemos encontrar una línea similar a:
Active: active (running)
Esto indica que el servicio está activo.
Si el servicio no está funcionando, podemos intentar iniciarlo:
sudo systemctl start sendmail
En este comando, start solicita iniciar el servicio.
Si deseamos que el servicio se inicie automáticamente al arrancar Debian:
sudo systemctl enable sendmail
El parámetro enable habilita el inicio automático del servicio, de acuerdo con la configuración de systemd.
Importante: habilitar un servicio no significa necesariamente iniciarlo en ese mismo momento. Por eso start y enable cumplen funciones diferentes.
7. Configuración inicial mediante sendmailconfig
Debian incluye una herramienta que facilita la preparación de los archivos de configuración.
Ejecutamos:
sudo sendmailconfig
¿Qué significa?
sudo
Ejecuta la herramienta con privilegios administrativos.
sendmailconfig
Es una utilidad de configuración proporcionada por los paquetes de Sendmail en Debian.
Se encarga de comprobar y preparar diferentes archivos necesarios para su funcionamiento.
Durante su ejecución pueden aparecer varias preguntas.
Primera pregunta
Configure sendmail with the existing /etc/mail/sendmail.conf? [Y]
Nos pregunta si deseamos utilizar la configuración existente del archivo:
/etc/mail/sendmail.conf
En una instalación inicial normal, podemos aceptar la opción predeterminada:
y
y presionar Enter.
Segunda pregunta
Configure sendmail with the existing /etc/mail/sendmail.mc? [Y]
Esta pregunta hace referencia a:
/etc/mail/sendmail.mc
Es uno de los archivos principales de configuración de Sendmail.
Aceptamos:
y
Comprobación del sistema de archivos
Podemos encontrar:
Checking filesystem, this may take some time - it will not hang!
... Done.
Este mensaje indica que la herramienta está realizando comprobaciones relacionadas con los archivos necesarios.
No significa que exista un error.
Mensaje relacionado con SASL
También podemos encontrar:
sasl2-bin not installed, not configuring sendmail support.
Este mensaje informa que no está instalado sasl2-bin, utilizado para determinadas funciones de autenticación SASL del servidor.
No significa necesariamente que Sendmail no pueda autenticarse como cliente ante un servidor SMTP externo.
Para el envío autenticado que configuraremos posteriormente utilizaremos los módulos SASL correspondientes.
Por ahora no necesitamos instalar sasl2-bin solamente para eliminar esta advertencia.
Mensaje relacionado con STARTTLS
Otro mensaje habitual es:
Everything you need to support STARTTLS
is installed and configured but is NOT being used.
STARTTLS permite negociar conexiones cifradas utilizando TLS.
Este mensaje indica que existen componentes preparados para TLS, pero que la configuración correspondiente todavía no está activada.
No es necesario resolverlo en esta primera parte, porque únicamente enviaremos mensajes locales.
En la segunda parte activaremos STARTTLS para conectar Sendmail con un servidor SMTP externo.
Última pregunta
Puede aparecer:
Reload the running sendmail now with the new configuration? [Y]
Respondemos:
y
Esto solicita que el servicio cargue la configuración generada.
8. Conocer los archivos de configuración de Sendmail
Antes de modificar cualquier archivo, conviene comprender para qué sirve.
En Debian encontraremos varios archivos importantes dentro de:
/etc/mail/
Los principales son:
| Archivo | Función |
|---|---|
sendmail.mc | Archivo de configuración editable mediante macros M4. |
sendmail.cf | Configuración generada que utiliza Sendmail. |
submit.mc | Configuración de presentación local de mensajes. |
submit.cf | Archivo generado a partir de submit.mc. |
access | Reglas de acceso y políticas de conexiones. |
access.db | Base de datos generada a partir de access. |
aliases | Alias de direcciones de correo locales. |
sendmail.conf | Opciones utilizadas por las herramientas de configuración de Debian. |
8.1. Diferencia entre sendmail.mc y sendmail.cf
Esta diferencia es especialmente importante.
sendmail.mc
Es el archivo que normalmente modificaremos para configurar Sendmail.
Utiliza macros M4 que facilitan la escritura de la configuración.
sendmail.cf
Es el archivo generado que Sendmail interpreta directamente.
No recomendamos editarlo manualmente, porque puede regenerarse y sobrescribir nuestros cambios.
8.2. Consultar el contenido de sendmail.mc
Ejecutamos:
less /etc/mail/sendmail.mc
less permite consultar el contenido de un archivo sin modificarlo.
Podemos desplazarnos con las flechas del teclado.
Para salir presionamos:
q
Si deseamos editar el archivo más adelante, utilizaremos:
sudo nano /etc/mail/sendmail.mc
Pero todavía no necesitamos modificarlo.
9. Corregir el nombre del equipo Debian
Durante la instalación o configuración de Sendmail podemos encontrar una advertencia como:
WARNING: local host name (debian) is not qualified
También puede aparecer:
My unqualified host name (debian) unknown; sleeping for retry
Esto puede provocar que Sendmail tarde aproximadamente un minuto en completar determinadas operaciones de inicio.
Vamos a comprender qué significa y cómo corregirlo.
9.1. ¿Qué es el hostname?
El hostname es el nombre que identifica a un equipo.
Para consultarlo ejecutamos:
hostname
En nuestro laboratorio obtuvimos:
debian
Este es el nombre corto del equipo.
Ahora ejecutamos:
hostname -f
Explicación del parámetro
-f
Solicita el nombre de dominio completo del equipo, también conocido como FQDN (Fully Qualified Domain Name).
Inicialmente obtuvimos:
debian
Esto significa que el sistema no estaba resolviendo un nombre completo diferente del nombre corto.
9.2. ¿Qué es un FQDN?
Un nombre de dominio completo puede tener esta estructura:
debian.lab.test
En este ejemplo:
debian es el nombre del equipo.
lab.test es el dominio utilizado en nuestro laboratorio.
El dominio .test está reservado para pruebas.
No necesitamos comprar un dominio para realizar este ejercicio.
Tampoco estamos configurando un nombre público accesible desde Internet.
9.3. ¿Qué es /etc/hosts?
El archivo:
/etc/hosts
permite asociar direcciones IP con nombres de equipos.
Linux puede consultarlo para resolver nombres localmente sin depender de una consulta DNS externa.
Por ejemplo:
127.0.0.1 localhost
asocia la dirección de loopback IPv4 con el nombre localhost.
9.4. Crear una copia de seguridad
Antes de modificar el archivo, ejecutamos:
sudo cp -a /etc/hosts /etc/hosts.bak
Explicación
cp
Copia archivos.
-a
Activa el modo archivo, que intenta conservar atributos como permisos y marcas de tiempo.
/etc/hosts
Es el archivo original.
/etc/hosts.bak
Es la copia de respaldo que crearemos.
El sufijo .bak es una convención habitual para identificar archivos de respaldo.
9.5. Editar /etc/hosts
Ejecutamos:
sudo nano /etc/hosts
Podemos encontrar:
127.0.0.1 localhost
127.0.1.1 debian
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
En nuestro laboratorio cambiaremos únicamente:
127.0.1.1 debian
por:
127.0.1.1 debian.lab.test debian
El archivo quedará parecido a:
127.0.0.1 localhost
127.0.1.1 debian.lab.test debian
# The following lines are desirable for IPv6 capable hosts
::1 localhost ip6-localhost ip6-loopback
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
No debemos eliminar las demás entradas, especialmente las correspondientes a IPv6.
¿Por qué escribimos dos nombres?
En esta línea:
127.0.1.1 debian.lab.test debian
tenemos tres elementos.
127.0.1.1
Es una dirección de loopback utilizada habitualmente por Debian para asociar el nombre local del equipo.
debian.lab.test
Es el nombre completo que queremos que el sistema resuelva.
debian
Es el nombre corto o alias.
El orden es importante porque el primer nombre se utiliza como nombre canónico de esa entrada.
Guardar los cambios en Nano
Presionamos:
Ctrl + O
Después:
Enter
Finalmente:
Ctrl + X
Con esto guardamos el archivo y salimos del editor.
9.6. Comprobar la configuración
Ejecutamos:
hostname
Resultado:
debian
Ahora:
hostname -f
Resultado esperado:
debian.lab.test
Finalmente:
getent hosts debian
Explicación del comando
getent
Permite consultar diferentes bases de datos de información del sistema.
hosts
Indica que deseamos consultar la resolución de nombres de equipos.
debian
Es el nombre que queremos buscar.
Resultado esperado:
127.0.1.1 debian.lab.test debian
Esto confirma que el sistema puede resolver el nombre corto hacia la entrada configurada.
¿Es necesario reiniciar Debian?
No necesariamente.
Los cambios de /etc/hosts normalmente pueden utilizarse inmediatamente.
Podemos reiniciar Sendmail para comprobar su comportamiento:
sudo systemctl restart sendmail
Después:
sudo systemctl status sendmail --no-pager
En nuestro laboratorio, después de realizar esta modificación, desapareció la advertencia de nombre no calificado durante el siguiente inicio.
¿Qué pasa si aparece gethostbyaddr failed?
Podemos encontrar:
gethostbyaddr(192.168.100.205) failed: 2
Esta advertencia indica que Sendmail no pudo obtener un nombre asociado a esa dirección IP mediante una consulta inversa.
No significa necesariamente que el servicio esté fallando.
En una red local puede deberse a que no existe una asociación de nombres adecuada para la IP del equipo.
No debemos agregar una dirección IP a /etc/hosts sin comprobar primero que realmente pertenece a nuestro equipo y si es fija o dinámica.
En nuestro laboratorio esta advertencia no impidió enviar correos mediante Gmail.
10. Enviar nuestro primer correo local
Ahora que Sendmail está instalado y configurado, realizaremos una prueba sencilla.
Enviaremos un mensaje desde nuestro usuario normal hacia root.
Ejecutamos:
echo "Hola, este es mi primer correo desde Debian." | mail -s "Prueba de Sendmail" root
Explicación completa
echo
Imprime un texto en la salida estándar.
"Hola, este es mi primer correo desde Debian."
Es el contenido del mensaje.
Las comillas dobles permiten conservar los espacios dentro del texto.
|
Es una tubería o pipe.
Conecta la salida estándar del comando anterior con la entrada estándar del siguiente.
En este caso, el texto producido por echo se entrega a mail.
mail
Es el cliente de correo proporcionado por Mailutils.
-s
Establece el asunto del mensaje.
"Prueba de Sendmail"
Es el asunto que aparecerá en el correo.
root
Es el destinatario local.
¿Qué ocurre al ejecutar el comando?
El programa mail entrega el mensaje al sistema de correo.
Sendmail procesa la entrega local y el mensaje puede al



