Intro
Uno de los peligros de mantener un servidor de correo es que los malos lo usen para enviar spam a diestro y siniestro. Es tan sencillo como engañar a uno de nuestros usuarios para que les envíen su nombre de usuario y contraseña. Para ello los malos usan mensajes de correo falso donde se advierte a nuestros usuarios que les cerraremos la cuenta si no actualizan sus datos o algo así.
Lo lamentable es que siempre hay alguien que pica y les cede sus credenciales. En ese momento comienza el circo. El nombre de usuario y contraseña son compartidos por cientos (quizás miles) de máquinas zombies que se afanan en enviar mensajes de spam a través de nuestro servidor.
El resultado ya lo conocemos: el servidor se queda atascado y listado en todas las blacklists del mundo mundial, con lo que ya casi ningún servidor de correo quiere hablar con él.
Lo que uno quisiera en estos casos sería colgar al usuario incauto por los pulgares, pero el daño ya está hecho, así que nos centraremos en alguna estrategia más positiva y dirigida a prevenir las consecuencias en la medida de lo posible.
La mejor forma de evitar abusos es limitar el número de correos que nuestro servidor tiene permitido enviar en el plazo de una hora (o un día, o un mes…). Por desgracia Postfix no tiene esta función incorporada, así que tendremos que echar mano de un filtro externo.
Haciendo una búsqueda en google llegamos a la conclusión de que uno de los mejores es policyd
Instalación de policyd
Nos encargamos de instalar las dependencias que se indican en la página de requerimientos de la documentación de policyd:
Requirements for PolicyD
-
MySQL, PostgreSQL or SQLite
-
Net::Server >= 0.96
-
Net::CIDR
-
Config::IniFiles (debian: libconfig-inifiles-perl, rpm: perl-Config-IniFiles)
-
Cache::FastmMap (debian: libcache-fastmmap-perl, rpm: perl-Cache-FastMmap)
-
Mail::SPF (required for CheckSPF module)
WebUI
-
PHP v5+ (compiled with PDO support for your database)
Luego descargamos los paquetes .deb (nuestro servidor está basado en debian) de la sección de descargas:
cluebringer_2.1.x~201310261831_all.deb
cluebringer-webui_2.1.x~201310261831_all.deb
Luego veremos la razón, pero hemos de descargar también el archivo que contiene las fuentes:
cluebringer-v2.1.x-201310261831.tar.gz
El archivo fuente lo necesitamos para poblar la base de datos. Una vez descomprimido entramos en el directorio cluebringer-v2.1.x-201310261831/database y ejecutamos lo siguiente:
for i in core.tsql access_control.tsql quotas.tsql amavis.tsql checkhelo.tsql checkspf.tsql greylisting.tsql accounting.tsql; do ./convert-tsql mysql55 $i; done > policyd.sql
Es muy importante que el primer archivo que procesemos en el bucle for sea core.tsql porque si no, no se cumplen las dependencias de foreign index del resto de tablas.
Para versiones de mysql inferiores a 5.5 emplear convert-tsql mysql en lugar de convert-tsql mysql55
Luego poblamos la base de datos policyd con el archivo policyd.sql y creamos un usuario mysql con todos los permisos para esta base de datos.
Los archivos de configuración
Los archivos de configuración los instala en /etc/cbpolicyd y son:
cluebringer.conf
webui.conf
Hemos de indicar el nombre de la base de datos, el usuario y la contraseña en ambos archivos.
Tembién tenemos que configurar apache para que podamos acceder a /usr/share/cluebringer/webui/ que es donde el sistema instala los archivos de la webui
Configurar Postfix
Para que el filtro funcione hemos de añadir lo siguiente en las secciones smtpd_recipient_restrictions Y smtpd_end_of_data_restrictions:
check_policy_service inet:127.0.0.1:10031
Es conveniente ponerlo al principio de las secciones para que sea el primer filtro que se ejecute.
Crear reglas
Para crear las reglas seguimos el tutorial de https://imanudin.net/2014/09/09/zimbra-tips-how-to-configure-rate-limit-sending-message-on-policyd/
Más info:
http://en.enisozgen.com/policydcluebringer-installation/
https://enchufado.com/post.php?ID=366