General

Tablas y restricciones en Postfix

Henry me pidió apoyo hace ya varios meses con un problema de Postfix. Con el cambio de trabajo no tuve tiempo de revisarlo pero decidí al menos documentarlo en el blog para cualquier persona que lo necesite, aunque seguramente está en algún otro sitio.

Para cualquier configuración más compleja que simplemente enviar y recibir correos por SMTP y entregarlos a un buzón local, cualquier administrador de sistemas de correo basado en Postfix debe conocer cómo funcionan las tablas de mapeo, llamadas lookup tables en Postfix.

Postfix permite manejar relaciones de mapeo usando archivos planos, que se convierten en hashes Berkeley DB, y también bases de datos relacionales y directorios LDAP. A efectos de estos ejemplos utilizaremos archivos locales. El archivo /etc/aliases (plano) y su contraparte /etc/aliases.db (Berkeley DB) son un ejemplo omnipresente de lookup tables. Ahora veamos algunos escenarios específicos.

Dominios virtuales

Si tenemos un usuario pedro que recibe correos para un dominio foo.com, también podemos hacer que los reciba para otros dominios, siempre y cuando estén correctamente delegados (registros MX) al MTA en cuestión, y el dominio sea reconocido por el MTA. Por ejemplo, si queremos que pedro@foo.com también reciba correos para pedro@bar.com, solo hay que agregar bar.com a la opción mydestination en el archivo main.cf de Postfix.

Pero si queremos que pedro@bar.com se entregue a otro buzón, incluyendo un buzón remoto, entonces necesitamos hacer una tabla de alias virtuales. Creamos, por ejemplo, /etc/postfix/virtual con este contenido:

pedro@bar.com         maria

Creamos el hash Berkeley DB con postmap /etc/postfix/virtual y agregamos la ruta a la base de datos en la opción de coniguración virtual_alias_maps de main.cf. Llamamos a postfix reload y listo.

Controlando el acceso exteo

Una función muy utilizada de control de acceso en Postfix permite restringir a qué usuarios exteos se atienden. Normalmente se usa para minimizar la incidencia de correo no deseado. Por ejemplo, yo uso las opciones de configuración smtpd_[client|helo|sender]_restrictions para comparar con listas negras. Esta comparación suele ser económica en términos de los recursos que utiliza. Otra restricción que uso es smtpd_recipient_restrictions donde utilizo listas grises, que son un recurso local de la máquina, y que continúa siendo mi método más económico para eliminar spam.

smtpd_recipient_restrictions =   permit_mynetworks,   ...   check_policy_service ... # lista gris   permitsmtpd_sender_restrictions =   permit_mynetworks,   ...   reject_rbl_client ... # una o más listas negras   permit

Restringiendo a nuestros usuarios

Una preocupación típica en entoos empresariales radica en el posible abuso de listas de correo o aliases por parte de usuarios inteos. Siempre que el correo pase por el MTA, podemos restringir esto. El ejemplo formal está en la documentación de Postfix y me remito a explicarlo:

Establecemos la restricción tan pronto en smtpd_recipient_restrictions como queramos. Tenga cuidado con la posición donde coloca el check_recipient_access con respecto a permit_mynetworks:

smtpd_recipient_restrictions =        check_recipient_access hash:/etc/postfix/access

Y también declaremos una clase, insiders_only donde iremos desagregando la permisología por usuarios y dominios:

smtpd_restriction_classes = insiders_only    insiders_only = check_sender_access hash:/etc/postfix/insiders, reject

En el archivo /etc/postfix/access, definamos los destinos y las clases que podrán enviar a ellos:

lista@foo.com   insiders_only

Y en el archivo /etc/postfix/insiders, definamos los orígenes que aprobaremos para pertenecer a la clase insiders_only:

pedro@foo.com OK    bar.com OK

Notas finales: todo el esquema está sujeto a suplantación de la identidad del remitente vía SMTP, aunque en entoos controlados eso podría no ser una preocupación. Siempre recuerde correr postmap <archivo> al finalizar de editar un archivo plano. postfix reload es suficiente para cargar cualquier cambio en su main.cf. Y una nota importante: cuando declara una clase con smtpd_restriction_classes, ahora puede usar su nombre del lado izquierdo de una sentencia en main.cf.

Standard

2 thoughts on “Tablas y restricciones en Postfix

  1. Yoire amador says:

    hola: como pudiera restringir solo a algunos usuarios que reciban correo del exteriorejemplo:que todos meciba correo del dominio .cuy que solo lolo@versal.cu reciba correo del exterior.saludos

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s