Controles de acceso en Postfix

La configuración de Postfix permite realizar una gran variedad de acciones en relación a un correo entrante en función de los más variados criterios.

Así por ejemplo, podemos aplicar diferentes listas de restricciones en función de qué etapa de una conversación SMTP se trate. Para aplicar restricciones en el momento de la conexión de un cliente, tenemos la directiva smtpd_client_restrictions o para aplicar controles de acceso cuando el cliente envía el «MAIL FROM» tenemos la directiva smtpd_sender_restrictions.

La lista completa puede consultarse aquí.

Las restricciones que podemos aplicar en cada una de las listas pueden consultarse en el apartado correspondiente a cada directiva en el manual de los parámetros de configuración de Postfix (man 5 postconf). Por ejemplo: smtpd_client_restrictions

Como vemos, la cantidad de restricciones que podemos aplicar es muy elevada pero muchas de ellas hacen uso de la tabla access de acceso al servidor.

Su funcionamiento es sencillo, por un lado se especifica un patrón, que puede ser una IP, una red, una dirección de correo, un dominio, etc y por otro se especifica la acción a llevar a cabo en caso de coincidencia.

Las acciones a llevar a cabo incluyen rechazar el correo, diferirlo, descartarlo, enviar una copia oculta a otra dirección, colocar el correo en la cola HOLD, hacer un redirect a otra dirección…

Basándonos en esta tabla podemos crear ficheros para indicar las opciones que queramos y generar después los database files con el comando postmap.

Veamos un ejemplo para ilustrar todo esto ya que resultará mucho más sencillo:

Ejemplo:

Queremos que lo que venga de una determinada dirección de correo (por ej: example@desdelaconsola.es) sea colocado en la cola HOLD para su posterior análisis.

Por tanto, como queremos filtrar en función de remitente, la etapa de una conversación SMTP que nos interesa es la de «MAIL FROM» por lo que la directiva o lista de restricciones que nos interesa es smtpd_sender_restrictions.

Repasamos lo que dice el manual del main.cf sobre esta directiva (aquí) y vemos que la opción que nos interesa es la de «check_sender_access»:

check_sender_access type:table
Search the specified access(5) database for the MAIL FROM address, domain, parent domains, or localpart@, and execute the corresponding action.

Por tanto, creamos un fichero (por ej: /etc/postfix/sender_access) con el siguiente contenido:

example@desdelaconsola.es	HOLD

Generamos el fichero db con postmap:

postmap /etc/postfix/sender_access

Ahora, solo nos queda hacer referencia a él desde el fichero de configuración «main.cf» haciendo uso de la directiva smtpd_sender_restrictions como ya habíamos visto:

smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/sender_access

En función del contenido

Cuando lo que nos interesa es filtrar, o realizar alguna de las acciones vistas anteriormente, en función de determinadas palabras o frases encontradas en el asunto o en el cuerpo del mensaje podemos usar un filtro incorporado ya en Postfix que inspecciona el contenido de los correos antes de que sean almacenados en la cola.

Este filtro (llamado header_checks) incorporado en Postfix está ideado para casos concretos en los que queremos controlar determinados flujos de correo y no debería utilizarse como un filtro genérico anti-spam ya que podría acarrear problemas de rendimiento.

Para esa otra tarea, Postfix implementa otros métodos (ver Content inspection overview y Built-in content inspection)

El funcionamiento de este «built-in filter» de inspección de contenido es muy parecido al de la tabla «access» vista anteriormente, es decir mediante un fichero especificamos la cadena a buscar y la acción a realizar en caso de coincidencia.

El formato que debe tener el fichero de header_checks es:

/^HEADER: .*contenido_a_buscar/ ACTION

Es interesante revisar la documentación relativa al filtro para ver las acciones disponibles (aqui)

Se puede especificar el contenido a buscar mediante una expresión regular «regexp» o también en formato pcre.

Veamos un ejemplo para dejarlo claro:

Ejemplo

Queremos descartar (desechar el mensaje pero para el cliente la entrega habrá sido exitosa) los correos electrónicos cuyo Asunto contenga las palabras «Free Money».

Creamos un fichero (por ej: /etc/postfix/header_checks) con el siguiente contenido:

/^Subject.*Free Money.*/ DISCARD

Ahora habilitamos el filtro en el fichero main.cf:

header_checks = regexp:/etc/postfix/header_checks

Antes de recargar la configuración de Postfix podemos comprobar que el filtro funciona adecuadamente con postmap:

[root@desdelaconsola.es]# postmap -q "Subject: WIN Free Money NOW" -f regexp:/etc/postfix/header_checks
DISCARD
[root@desdelaconsola.es]#

Sólo nos queda hacer un «reload» de Postfix para aplicar los cambios.

 

tags: , ,
Escrito en Correo por Ignacio Vazquez

Follow comments via the RSS Feed | Deja un comentario | Trackback URL

1 Comment to "Controles de acceso en Postfix"

  1. Anger wrote:

    Buen día, agradecido por la información que facilitaste, muy referencial al tema del postfix. A modo de consulta, para mi caso soy algo nuevo en la administración del postfix, pero pregunto en el siguiente ejemplo. Quiero restringir para que no puedan enviar correos a una cuenta de email de mi dominio ListaPersonal@midominio.com desde un dominio distinto al mio @midominio.com. Gracias por la referencia que me puedas ayudar con este caso.

Leave Your Comment

 
desdelaconsola.es