Spam Filtering · 6 min read · Oct 13, 2025

La Perfecta SpamSnake - Ubuntu Jeos 12.04 LTS Pangolín Preciso

La Perfecta SpamSnake - Ubuntu Jeos 12.04 LTS Pangolín Preciso

Autor: Rocky
Versión: 5

Postfix con Filtrado Bayesiano, Postscreen, Llamada de Destinatario de Postfix (Destinatarios de Relay a través de look-ahead Opcional), Nginx/Uwsgi, Mysql, Dnsmasq, MailScanner (Spamassassin, ClamAV, Pyzor, Razor, DCC-Client), Baruwa, Comprobaciones SPF, FuzzyOcr, Firmas de Sanesecurity, Greyfix, KAM, Scamnailer, FireHOL (Cortafuegos Iptables), Script de Destinatarios de Relay (Opcional), Webmin (Opcional), Descargo de Responsabilidad Saliente con alterMIME (Opcional)

Este tutorial muestra cómo configurar un servidor basado en Ubuntu Jeos como un filtro de spam en modo Gateway. Al final, tendrás un Gateway SpamSnake que retransmitirá correos electrónicos limpios a tu MTA. También podrás ver tu cola de entrada, entrenar tu SpamSnake y llevar a cabo algunas operaciones más avanzadas a través de Baruwa.

No puedo ofrecer ninguna garantía de que esto funcione para ti, de la misma manera que está funcionando para mí.

Usaré el siguiente software:
• Servidor Web: Nginx v1.1.19/Uwsgi v1.0.3
• Servidor de Base de Datos: MySQL v5.5.28
• Servidor de Correo: Postfix v2.9.3
• Servidor DNS en Caché: Dnsmasq 2.59
• Filtro: MailScanner v4.84.5-3
• Frontend: Baruwa v1.1.2-4sn

El crédito va para los chicos de HowToForge y los desarrolladores de MailScanner, Baruwa, Clamav, Nginx/Uwsgi, Mysql, Postfix, Spamassassin, Razor/Pyzor/DCC y Firehol.

INSTALACIÓN BASE

  1. Instalar opción mínima de vm
    Establecer nombre de host a server1
  2. Método de partición guiado por defecto
  3. Configurar usuario:
    u: administrador
    p: contraseña
    Sin cifrado
  4. Sin actualizaciones automáticas
  5. Instalar OpenSSH

POST INSTALACIÓN

1. Obtener Privilegios de Root

Habilita el inicio de sesión de root ejecutando lo siguiente y dando una contraseña a root. Luego podrás iniciar sesión directamente como root:

sudo passwd root

2. Configurar La Red

Debido a que el instalador de Ubuntu ha configurado nuestro sistema para obtener sus configuraciones de red a través de DHCP, tenemos que cambiar eso ahora porque un servidor debe tener una dirección IP estática. Edita /etc/network/interfaces y ajústalo a tus necesidades (en este ejemplo usaré la dirección IP 192.168.0.100):

vi /etc/network/interfaces

y haz que se vea como lo siguiente:

# Este archivo describe las interfaces de red disponibles en tu sistema
# y cómo activarlas. Para más información, consulta interfaces(5).
# La interfaz de red de loopback
auto lo
iface lo inet loopback
# La interfaz de red primaria
auto eth0
iface eth0 inet static
        address 192.168.0.100
        netmask 255.255.255.0
        network 192.168.0.0
        broadcast 192.168.0.255
        gateway 192.168.0.1
        dns-nameservers 192.168.0.1

Luego reinicia tu red:

/etc/init.d/networking restart
vi /etc/hosts

y haz que se vea así:

127.0.0.1       localhost.localdomain   localhost
192.168.0.100   server1.example.com     server1
# Las siguientes líneas son deseables para hosts capaces de IPv6
::1     localhost ip6-localhost ip6-loopback
fe00::0 ip6-localnet
ff00::0 ip6-mcastprefix
ff02::1 ip6-allnodes
ff02::2 ip6-allrouters
ff02::3 ip6-allhosts

Ahora ejecuta:

echo server1.example.com > /etc/hostname  
reboot now

Después, ejecuta:

hostname  
hostname -f

Ambos deberían mostrar server1.example.com ahora.

3. Cambiar La Shell Por Defecto

/bin/sh es un enlace simbólico a /bin/dash, sin embargo necesitamos /bin/bash, no /bin/dash. Por lo tanto, hacemos esto:

dpkg-reconfigure dash

¿Instalar dash como /bin/sh? <– No

Instala algunos paquetes y requisitos que se necesitan más adelante:

apt-get install binutils cpp fetchmail flex gcc libarchive-zip-perl libc6-dev libcompress-raw-zlib-perl libdb4.8-dev libpcre3 libpopt-dev lynx m4 make ncftp nmap openssl perl perl-modules unzip zip zlib1g-dev autoconf automake1.9 libtool bison autotools-dev g++ build-essential telnet wget gawk -y

4. Dnsmasq en Caché

apt-get install dnsmasq -y
vi /etc/dnsmasq.conf

y haz que Dnsmasq escuche en localhost:

listen-address=127.0.0.1

5. Instalar Mysql

apt-get install mysql-client mysql-server libdbd-mysql-perl -y 

Se te pedirá que proporciones una contraseña para el usuario root de MySQL - esta contraseña es válida para el usuario root@localhost así como para [email protected], así que no tenemos que especificar una contraseña de root de MySQL manualmente más adelante:

Nueva contraseña para el usuario “root” de MySQL: <– tucontraseñaderootsql
Repite la contraseña para el usuario “root” de MySQL: <– tucontraseñaderootsql

6. Instalar Postfix:

apt-get install postfix postfix-mysql postfix-doc procmail -y

Se te harán dos preguntas. Responde de la siguiente manera:

Tipo general de configuración de correo: –> Internet Site
Nombre del sistema de correo: –> server1.example.com

Detén Postfix:

postfix stop
vi /etc/postfix/master.cf

y haz que se vea como lo siguiente:

pickup    fifo  n       -       -       60      1       pickup
         -o content_filter=
         -o receive_override_options=no_header_body_checks

Edita main.cf:

vi /usr/src/postfix.sh

con lo siguiente:

#!/bin/sh
postconf -e "alias_maps = hash:/etc/aliases"
newaliases
postconf -e "myorigin = domain.tld"
postconf -e "myhostname = server1.domain.tld"
postconf -e "mynetworks = 127.0.0.0/8, 192.168.0.0/24"
postconf -e "message_size_limit = 10485760"
postconf -e "local_transport = error:No local mail delivery"
postconf -e "mydestination = "
postconf -e "local_recipient_maps = "
postconf -e "relay_domains = mysql:/etc/postfix/mysql-relay_domains.cf"
postconf -e "relay_recipient_maps = mysql:/etc/postfix/mysql-relay_recipients.cf"
postconf -e "transport_maps = mysql:/etc/postfix/mysql-transports.cf"
postconf -e "virtual_alias_maps = hash:/etc/postfix/virtual"
postconf -e "disable_vrfy_command = yes"
postconf -e "strict_rfc821_envelopes = no"
postconf -e "smtpd_banner = $myhostname ESMTP SpamSnake"
postconf -e "smtpd_delay_reject = yes"
postconf -e "smtpd_recipient_limit = 100"
postconf -e "smtpd_helo_required = yes"
postconf -e "smtpd_client_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_helo_restrictions = permit_sasl_authenticated, permit_mynetworks, permit"
postconf -e "smtpd_sender_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_non_fqdn_sender, reject_unknown_sender_domain, permit"
postconf -e "smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unknown_recipient_domain, reject_unauth_destination, whitelist_policy, grey_policy, rbl_policy, spf_policy, permit"
postconf -e "smtpd_data_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_pipelining"
postconf -e "smtpd_restriction_classes = spf_policy, grey_policy, whitelist_policy"
postconf -e "spf_policy = check_policy_service unix:private/policy-spf"
postconf –e "policy-spf_time_limit = 3600s"
postconf -e "rbl_policy = reject_rbl_client zen.spamhaus.org, reject_rbl_client bl.spamcop.net"
postconf -e "grey_policy = check_policy_service unix:private/greyfix"
postconf -e "whitelist_policy = check_client_access mysql:/etc/postfix/mysql-global_whitelist.cf, check_sender_access mysql:/etc/postfix/mysql-global_whitelist.cf"
postconf -e "header_checks = regexp:/etc/postfix/header_checks"
touch /etc/postfix/virtual
echo "root [email protected]" >> /etc/postfix/virtual && echo "abuse [email protected]" >> /etc/postfix/virtual && echo "postmaster [email protected]" >> /etc/postfix/virtual
postmap /etc/postfix/virtual
touch /etc/postfix/header_checks
echo "/^Received:/ HOLD" >> /etc/postfix/header_checks
postmap /etc/postfix/header_checks
cat > /etc/postfix/mysql-global_whitelist.cf < /etc/postfix/mysql-relay_domains.cf < /etc/postfix/mysql-relay_recipients.cf < /etc/postfix/mysql-transports.cf <

Nota: Para este paso, asegúrate de reemplazar [email protected], example.com y @example.com con valores reales que coincidan con tu configuración.

Hazlo ejecutable y ejecútalo:

chmod +x /usr/src/postfix.sh
./usr/src/postfix.sh

*Nota: El usuario/contraseña para los archivos cf necesita ser el mismo que el usuario/contraseña que usarás con tu configuración de base de datos Baruwa más adelante. Asegúrate de cambiar todo en rojo antes de ejecutar el script.

Llamada de Destinatario de Postfix (Opcional)

Esta función consulta el servidor del destinatario para ver si el destinatario existe. Si no, responde con un error 550 al servidor de envío y cierra la conexión. Si el usuario existe, el SpamSnake continuará procesando el correo electrónico. Este es solo otro método para prevenir el backscatter, pero tiene un costo. Infórmate sobre ello en http://www.postfix.org/ADDRESS_VERIFICATION_README.html. Puedes omitir este método y usar el método del script (más adelante en esta guía) si decides que ralentizará tu servidor.

vi /etc/postfix/main.cf y agrega lo siguiente:

verify_recipient = reject_unknown_recipient_domain, reject_unverified_recipient  
look_ahead = check_recipient_access hash:/etc/postfix/access  
unverified_recipient_reject_code = 550  
address_verify_map = btree:/var/lib/postfix/verify

Agrega esto a tus smtpd_restriction_classes:

verify_recipient, look_ahead

Agrega esto a smptd_recipient_restrictions:

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, look_ahead, whitelist_policy, grey_policy, rbl_policy, spf_policy, permit

Crea el archivo de acceso:

touch /etc/postfix/access

Agrega tus dominios:

cat > /etc/postfix/access <#mysql-transports
example.com verify_recipient
example2.com verify_recipient
EOF

*Nota: Asegúrate de agregar dominios válidos que estés filtrando.

Postmap it:

postmap /etc/postfix/access

Última mirada a la instalación de Postfix:

less /etc/postfix/main.cf

Verifica el contenido del archivo en busca de errores y repara si es necesario. Inicia Postfix:

postfix start

Verifica que Postfix responda:

telnet 127.0.0.1 25

Deberías ver:

220 [tuFQDNaquí] ESMTP Postfix (Ubuntu)
Share: X/Twitter LinkedIn

Recibe nuevas publicaciones en tu bandeja de entrada.

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