Servidor de correo · 8 min read · Oct 23, 2025

Configuración de un Servidor de Correo Electrónico en Casa a Prueba de Spam (La Forma Algo Alternativa) (Debian Squeeze)

Configuración de un Servidor de Correo Electrónico en Casa a Prueba de Spam (La Forma Algo Alternativa) (Debian Squeeze)

Introducción

El spam en el correo electrónico es un gran problema. Sin embargo, he encontrado una solución bastante simple para mí, aunque tomará un tiempo “migrar” completamente a ella.

La solución es crear una dirección de correo electrónico única cada vez que tenga que dar una dirección de correo electrónico a alguien más o a algún sitio web para registrarme. Si quiero una cuenta en Twitter, usaría “[email protected]”. Para servicios basados en la web, uso el nombre de dominio completo, incluyendo el subdominio (www) a la izquierda del @ (algunos sitios web mal diseñados no reconocen el www. como una dirección de correo electrónico válida, para esos simplemente lo omito).

Para personas, uso un formato como este: “[email protected]”. También podrías usar “[email protected]”. Lo bueno es que el lado izquierdo del @ para las direcciones de correo electrónico es casi “ilimitado”.

Como genero direcciones de correo electrónico únicas para cada contacto, puedo averiguar fácilmente dónde se filtró mi dirección de correo electrónico y luego puedo eliminarla fácilmente.

Este tutorial configurará un servidor de correo electrónico completamente funcional con scripts correspondientes para facilitar la gestión del correo electrónico. También incluye la parte de configuración de DNS, incluso si estás en una dirección dinámica, por ejemplo, si deseas ejecutar tu propio pequeño servidor de correo desde casa.

Resumen

En este tutorial utilizo Debian Squeeze como servidor. Para otras distribuciones de Linux, tendrás que hacer los cambios correspondientes tú mismo.

Un breve resumen de lo que se hace en este tutorial es el siguiente:

  • Obtener un nombre de dominio
  • Manejar una IP dinámica - si es necesario
  • Encargarse del DNS y el enrutamiento
  • Configurar postfix
  • Configurar procmail
  • Configurar dovecot
  • Configurar un servidor web para la gestión de direcciones de correo electrónico
  • Configurar Thunderbird con complemento

Créditos

En este tutorial también me baso en algunos otros tutoriales aquí, especialmente en lo que respecta a la configuración del servidor bind y de correo electrónico. Para esos, copié más o menos de los tutoriales de Falko sobre el Servidor Perfecto de Debian. También la sección de reenvío de correo fue tomada de un tutorial aquí de sjau. Sin ellos, probablemente no habría podido configurar esto.

Obtención de un Nombre de Dominio

Antes de que puedas comenzar a ejecutar tu propio servidor de correo, necesitas un nombre de dominio para el cual también puedas establecer registros MX. No quiero hacer ninguna sugerencia ya que hay toneladas y toneladas de registradores de dominios por ahí. Uno de los más baratos que conozco es GoDaddy.

No uso GoDaddy yo mismo, pero hasta donde he oído, ofrecen un servicio sólido.

Manejo de IPs Dinámicas

Otro desafío que enfrentamos es cómo manejar las cosas en una dirección IP dinámica. Si no tienes una caja dedicada alquilada en algún lugar, sino que usas tu conexión a Internet en casa, entonces es muy probable que no tengas una IP estática.

En la web, es esencial tener una IP estática para que otros siempre sepan dónde encontrarte. Sin embargo, hay servicios que te ayudan con eso.

Uno de los servicios que utilizo es EveryDNS. Me permiten alojar el DNS para el nombre de dominio.

Hasta ahora, todavía ofrecen el servicio de forma gratuita. Aunque fueron comprados en 2010, la promesa fue que los entonces clientes que donaron dinero, también pueden usar el sistema de forma gratuita en el futuro. En su página web, no mencionan nada aún de que los nuevos clientes necesiten pagar, pero no lo sé con certeza.

La razón para usar EveryDNS es que también ofrecen un pequeño script en perl que se puede usar para actualizar el DNS. Esto es esencial ya que tu IP cambia con el tiempo si no tienes una dirección IP estática. Puedes obtener el script en perl desde aquí.

Cuando tengas un nombre de dominio, primero ve a What Is My IP. Te mostrará tu dirección IP pública actual. Luego crea una cuenta en EveryDNS y haz al menos las siguientes entradas donde MYDOMAIN.COM sería tu nombre de dominio:

(1) Haz un registro de tipo “A”, configurado como nombre de dominio completamente calificado “MYDOMAIN.COM” y establece como valor tu dirección IP pública.

(2) Haz un registro de tipo “CNAME”, configurado como nombre de dominio completamente calificado “*.MYDOMAIN.COM” y establece como “MYDOMAIN.COM”.

(3) Haz un registro de tipo “MX”, configurado como nombre de dominio completamente calificado “MYDOMAIN.COM”, establece como valor “MYDOMAIN.COM” y establece como “MX Value” “10”.

Lo que acabamos de hacer es configurar el DNS para el dominio. El dominio principal se encuentra en tu dirección IP (registro A), todos los demás dominios también se encuentran allí (el * en el registro CNAME apunta al dominio principal) y también operamos un servidor de correo allí (registro MX).

Usuario root

Las siguientes cosas se realizan como usuario root, a menos que se indique lo contrario.

Actualización de IP Dinámica

Como se dijo antes, si no tienes una dirección IP estática, necesitarás actualizar regularmente la información del DNS.

(1) Obtén el script en perl y hazlo ejecutable

cd /root  
wget http://www.everydns.net/eDNS.pl  
chmod 0755 eDNS.pl

(2) Crea un script bash que llame al script en perl (hay otras formas, pero encontré que esta es la más simple):

touch eDNS.sh  
echo "#!/bin/bash" > eDNS.sh  
echo "perl /root/eDNS.pl -u USERNAME -p PASSWORD -d MYDOMAIN.COM" >> eDNS.sh

Reemplaza USERNAME y PASSWORD con tus credenciales de inicio de sesión de EveryDNS.

(3) Configura un cron para ejecutarlo regularmente

Me gusta trabajar con un archivo cron.txt que contiene todos los cron. Creo que es mucho más simple mantenerlo así.

Primero debes verificar si ya hay una entrada de cron:

crontab -l

Si no hay ninguna entrada de cron aún, simplemente ejecuta los siguientes comandos:

touch cron.txt  
chmod 0700 cron.txt  
echo "*/5 * * * * /root/eDNS.sh >/dev/null 2>&1" > cron.txt

Si ya hay entradas de cron, cópialas, crea un archivo cron.txt e insértalas y añade también el siguiente comando:

*/5 * * * * /root/eDNS.sh >/dev/null 2>&1 

Ahora cargamos el cron.txt como cron:

crontab cron.txt

Y verificamos si se agregó correctamente:

crontab -l

LAN/Ruteo/Bind

El siguiente problema que enfrentamos es cómo resolver el dominio en tu LAN. Si tu servidor de correo está detrás de un enrutador, entonces probablemente tendré una IP local como 192.168.0.x o 10.0.0.x.

Si estás detrás de un enrutador, necesitarás redirigir los siguientes puertos a tu servidor: 25, 80, 143, 443, 991. Podría haber más puertos requeridos como el 587.

También enfrentamos el problema de cómo resolver el nombre de dominio desde dentro de la LAN. Desde fuera de la LAN tienes la entrada DNS que debería apuntar a tu dirección IP actual. Sin embargo, cuando estás dentro de la LAN y haces una consulta DNS, solo devolverá tu IP pública y generalmente fallará entonces.

Hay varias soluciones para ese problema, si es que el problema existe en absoluto.

Una forma sería el uso de dnsmasq en enrutadores (por ejemplo, dd-wrt o tomato-wrt). Sin embargo, como no puedo garantizar que funcione, la única otra opción que veo es configurar un servidor DNS completo en tu servidor de correo.

En este tutorial utilizaré un Bind9 en chroot ya que es con lo que más familiarizado estoy. Para otros servidores DNS encontrarás mucha documentación en línea.

(1) Instala el software y deténlo

apt-get install bind9  
/etc/init.d/bind9 stop

(2) Cambia la configuración de /etc/default/bind9 para que la línea de opciones sea así:

OPTIONS="-u bind  -t /var/lib/named" 

(3) Crea los directorios necesarios bajo /var/lib:

mkdir -p /var/lib/named/etc  
mkdir /var/lib/named/dev  
mkdir -p /var/lib/named/var/cache/bind  
mkdir -p /var/lib/named/var/run/bind/run

(4) Luego mueve el directorio de configuración de /etc a /var/lib/named/etc:

mv /etc/bind /var/lib/named/etc

(5) Crea un enlace simbólico al nuevo directorio de configuración desde la antigua ubicación (para evitar problemas cuando BIND se actualice en el futuro):

ln -s /var/lib/named/etc/bind /etc/bind

(6) Crea dispositivos nulos y aleatorios, y corrige los permisos de los directorios:

mknod /var/lib/named/dev/null c 1 3  
mknod /var/lib/named/dev/random c 1 8  
chmod 666 /var/lib/named/dev/null /var/lib/named/dev/random  
chown -R bind:bind /var/lib/named/var/*  
chown -R bind:bind /var/lib/named/etc/bind

(7) Edita el archivo /etc/rsyslog.d/bind-chroot.conf y añade

$AddUnixListenSocket /var/lib/named/dev/log 

(8) Reinicia los servicios

/etc/init.d/rsyslog restart  
/etc/init.d/bind9 start

y verifica /var/log/syslog en busca de errores.

Ahora hemos configurado Bind9 en un entorno chroot. Lo siguiente que hay que hacer es agregar un archivo de zona para tu dominio.

(9) Edita /etc/bind/named.conf.local y añade

zone "MYDOMAIN.COM" IN {
        type master;
        file "/etc/bind/zones/MYDOMAIN.COM.db";
        allow-update { none; };
};

(10) Crea la carpeta de zona y el archivo de zona

mkdir /etc/bind/zones  
touch /etc/bind/zones/MYDOMAIN.COM.db  
chown -R bind:bind /etc/bind/zones/MYDOMAIN.COM.db

(11) Añade la información de tu archivo de zona a MYDOMAIN.COM.db

$TTL    86400
@               IN SOA  @ MYDOMAIN.COM. (
                                        1              ; serial
                                        2600              ; refresh
                                        15M             ; retry
                                        3600              ; expiry
                                        360 )            ; minimum
@               IN NS           ns.MYDOMAIN.COM.
ns              IN A            LOCALIP
www             IN A            LOCALIP
MYDOMAIN.COM.             IN A            LOCALIP
MYDOMAIN.COM.     IN MX   10      LOCALIP

Por supuesto, reemplaza MYDOMAIN.COM con tu nombre de dominio real y LOCALIP con tu dirección IP LAN estática. Básicamente, aquí le decimos que el servidor de nombres para ese dominio está alojado en “ns.MYDOMAIN.COM” y “ns.MYDOMAIN.COM” se encuentra en la dirección IP local estática.

(12) Reinicia Bind9

/etc/init.d/bind9 restart

(13) Cambia la resolución de NS del enrutador

Mientras Bind9 está configurado ahora, hay una última cosa que hacer. En tu enrutador, debes cambiar el orden de resolución del servidor de nombres. El primer servidor de nombres debe ser ahora tu “servidor de correo” con la dirección IP local estática correspondiente. De lo contrario, toda la configuración de bind9 no habría servido de nada. Como segundo servidor de nombres, ingresa el valor de lo que ya estaba allí como primero. Dependiendo de tu enrutador, puede ser un poco más complicado.

Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

No spam. Cancela la suscripción en cualquier momento.