Configuración de resistencia a correos no deseados
C@mpus - @cademia Linux

Introducción

Se entiende por UCE -Unsolicited Comercial Email- a todo mensaje de caracter comercial que no ha sido pedido. Para mantener un poco más a salvo a los usuarios de esto LXE proporciona una serie de políticas para la configuración del MTA.


Políticas

Para poder implementar un MTA con soporte anti-UCE se deben tener en cuenta las siguientes políticas en el orden indicado:

  1. El comando HELO/EHLO y los involucrados con el RELAY (MAIL FROM y RCPT TO) deben cumplir con la formas fqdn. Se prohíbe la verificación de direcciones.
  2. Prohibición del pipelining.
  3. Permitir cualquier tráfico desde las redes locales, sin importar el destino.
  4. Rechazar cualquier tráfico de la red externa que no tenga como destino el dominio local.
  5. Verificación de listas de acceso locales a destinatarios.
  6. Verificación de listas negras, blancas y combinadas.
  7. Verificación de DNSbls y RHSbls remotas.

Configuración

Editar el archivo main.cf usualmente localizado en /etc/postfix.

Postfix 1.1.x
smtpd_helo_required = yes
disable_vrfy_command = yes

maps_rbl_domains =
  relays.ordb.org,
  opm.blitzed.org,
  list.dsbl.org,
  sbl.spamhaus.org,
  blackholes.easynet.nl,
  cbl.abuseat.org
  relays.mail-abuse.org,
  bl.spamcop.net

smtpd_recipient_restrictions =
  reject_invalid_hostname,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unknown_sender_domain,
  reject_unknown_recipient_domain,
  reject_unauth_pipelining,
  permit_mynetworks,
  reject_unauth_destination,
  check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
  check_helo_access hash:/etc/postfix/helo_checks,
  check_sender_access hash:/etc/postfix/sender_checks,
  check_client_access hash:/etc/postfix/client_checks,
 check_client_access pcre:/etc/postfix/client_checks.pcre,
  reject_maps_rbl,
  permit

 

Postrfix 2.x

smtpd_helo_required = yes
disable_vrfy_command = yes

smtpd_recipient_restrictions =
  reject_invalid_hostname,
  reject_non_fqdn_hostname,
  reject_non_fqdn_sender,
  reject_non_fqdn_recipient,
  reject_unknown_sender_domain,
  reject_unknown_recipient_domain,
  reject_unauth_pipelining,
  permit_mynetworks,
  reject_unauth_destination,
  check_recipient_access pcre:/etc/postfix/recipient_checks.pcre,
  check_helo_access hash:/etc/postfix/helo_checks,
  check_sender_access hash:/etc/postfix/sender_checks,
  check_client_access hash:/etc/postfix/client_checks,
  check_client_access pcre:/etc/postfix/client_checks.pcre,
  reject_rbl_client relays.ordb.org,
  reject_rbl_client opm.blitzed.org,
  reject_rbl_client list.dsbl.org,
  reject_rbl_client sbl.spamhaus.org,
  reject_rbl_client blackholes.easynet.nl,
  reject_rbl_client cbl.abuseat.org,
  reject rbl client relays.mail-abuse.org,
  reject rbl client bl.spamcop.net,
  permit

Como nota hay que resaltar que los clientes de RBL's pueden cambiar. El listado de este documento muestra los más comunes.

Las opciones dbm o hash dependen del sistema. Linux utiliza hash mientras que Sun dbm. Es necesario tener compilado el soporte PCRE para las opciones con este prefijo. Por defecto Postfix en su distribución con Mandrake lo tiene.


Filtrado del destinatario

recipient_checks.pcre
/^\@/ 550 Invalid address format.
/[!%\@].*\@/ 550 This server disallows weird address syntax
/^postmaster\@/ OK
/^hostmaster\@/ OK
/^abuse\@/ OK!

Las restricciones que contengan un código 5xx serán interpretadas según el protocolo como errores y se podrá detener el RELAY. Para permitir el paso los postfijos OK o 200 serán suficientes. Se recomienda el uso de OK.


Filtrado en el saludo

helo_cheks
fool.net REJECT You are not allowed
dominio.tld REJECT You are not in dominio.tld
192.168.1.2 REJECT You are not 192.168.1.2
localhost REJECT You are not me

Las restricciones listadas aquí aplicarán al parámetro del comando HELO. De esta forma:

Helo fool.net

Producirá cerrar la conexión.

Una vez terminados los cambios se tendrá que ejecutar el comando postmap para crear la tabla hash del archivo de la siguiente manera:

postmap helo_checks

Y reiniciar el servicio para la lectura de los nuevos cambios.

service postfix restart


Filtrado del saludo por expresión regular 

Aunque el listado de este archivo no está presente en main.cf se lista en caso de que se necesite su activación (añadiendo check_helo_access hash:/etc/postfix/helo_checks.pcre).

El siguiente ejemplo prohibirá el RELAY a los hosts que se identifiquen con un IP que no cumpla la nomenclatura estándar del protocolo IP versión 4.

helo_checks.pcre
/^[0-9]+(\.[0-9]+){3}$/ REJECT Invalid hostname

Al igual, el MTA tendrá que ser reiniciando para la lectura de los cambios.


Filtrado del remitente 

Las restricciones listadas aquí aplican a los parámetros enviados por el comando MAIL FROM.

sender_checks
example.tld 554 Spam not tolerated here
example2.tld OK
Esta dirección electrónica esta protegida contra spambots. Es necesario activar Javascript para visualizarla OK
example3.tld REJECT

Al terminar los cambios se debe correr el comando postmap sender_checks para crear la tabla hash y reiniciar el MTA.


Filtrado del cliente por IP 

Las restricciones listadas aquí aplican a las direcciones IP's de los servidores SMTP que realizan la conexión. En el caso de especificar nombres de dominio el éxito de la prueba depende de la disponibilidad de la resolución inversa de los dominios.

client_checks
spam.tld 554 Spam not tolerated here
# Es probalbe que spam2.tld exista en alguna lista negra sin embargo queremos recibir correo
spam2.tld OK

# Por IP address
# 10.0.0.0/8
10 554 Go away!

# 172.16/16
172.16 554 Bugger off!

# 192.168.4/24 está mal, pero 192.168.4.128 está bien
192.168.4.128 OK
192.168.4 554 Take a hike!

Al terminar los cambios se debe correr el comando postmap client_checks para crear la tabla hash y reiniciar el MTA


Filtrado del cliente por expresión regular 

El siguiente ejemplo sólo es una forma de cómo se pueden bloquear algunos orígenes por expresiones regulares. Este caso puede utilizarse para sustituir la notación CIDR la cual el MTA no soporta en estos archivos.

client_checks.pcre
# 10.9.8.0 - 10.9.9.255
/10\.9\.[89]\.\d+/ REJECT

# 10.9.8.0 - 10.9.10.255 no se permitirá, pero 10.9.8.7 si
/10\.9\.8\.7/ OK
/10\.9\.([89]|10)\.\d+/ 554 Go away. We don't want any!

# 10.33.192.0/19 = 10.33.192.0 - 10.33.223.255
/^10\.33\.(19[2-9])|(2(0[0-9]|1[0-9]|2[0-3]))\.\d{1,3}$/ REJECT

Al igual, el MTA tendrá que ser reiniciando para la lectura de los cambios.