Establece una cuota para tus buzones de correo (y algo más) con PolicyD Cluebringer

PolicyD es un software desarrollado en C que permite implementar políticas de seguridad en nuestro servidor MTA con facilidad dado que nos proprociona un interface web muy simple: gestión de EHLO/HELO, gestión de SPF, Greylisting y cuotas. La versión que instalé es la 2.0.10 (Cluebringer) en un sistema CentOS 5 con servidor Postfix y MySQL. Los requisitos previos son:

  • MySQL, PostgreSQL, or SQLite
  • Net::Server >= 0.96
  • Net::CIDR
  • Config::IniFiles
  • Cache::FastMmap
  • Mail::SPF
  • PHP 5+ con soporte PDO para tu DB (si vas a usar la interface web, muy recomendable)

Descargamos el software

wget http://sourceforge.net/projects/policyd/files/2.0.x%20%28Stable%29/v2.0.10/cluebringer-2.0.10.tar.bz2/download?use_mirror=biznetnetworks


y descomprimimos

for file in cluebringer-2.0.10.tar.bz2; do tar jxf "${file}"; done

Configuramos MySQL

Entramos en la carpeta /cluebringer-2.0.10/database y ejecutamos mysql

mysql -u root -p
Enter password
...
> CREATE DATABASE policyd;
> GRANT ALL ON policyd TO 'policyduser'@'localhost' IDENTIFIED BY 'password';

> quit

Creamos el fichero de tablas que necesita PolicyD en formato MySQL:

for i in  core.tsql access_control.tsql quotas.tsql amavis.tsql checkhelo.tsql checkspf.tsql greylisting.tsql
do
  ./convert-tsql mysql $i
done > policyd.mysql

lo cargamos en nuestra base de datos:

mysql -u root -p policyd < policyd.mysql

y volvemos a la carpeta superior.

Instalamos el software

cp -r cbp /usr/local/lib/policyd-2.0/
cp cbpadmin /usr/local/bin/
cp cbpolicyd /usr/local/sbin/

Creamos un usuario

useradd -d /etc/cluebringer -u 125 cluebringer

Y configuramos

Creamos una carpeta para el fichero de configuración mkdir /etc/cluebringer en la que copiamos cluebringer.conf, las directivas de este fichero son muy claras. En mi caso inhabilité el protocolo Bizanga y cargo todos los módulos aunque no los use, en cuanto al resto:
# User to run this daemon as
user=cluebringer
group=cluebringer

# Filename to store pid of parent process (imprescindible para poder activar el servicio)
pid_file=/var/run/cbpolicyd/cbpolicyd.pid
...

# File to log to instead of stdout
log_file=/var/log/cbpolicyd.log
...

log_detail=tracking,policies

# IP to listen on, * for all
host=*

# Port to run on
port=10031
...

[database]
#DSN=DBI:SQLite:dbname=policyd.sqlite
DSN=DBI:mysql:database=policyd;host=localhost
Username=policyduser
Password=password
#
y para terminar necesitamos un par de ficheros de inicialización que pueden descargarse aquí. Están modificados para correr en CentOS 5 sin complicarme la vida, la versión original para correr sobre Ubuntu puede encontrarse aquí. Los renombramos y los movemos, ambos deben tener de propietario root:
  • postfix-cluebringer.init.txt lo renombramos a cluebringer y lo movemos a /etc/init.d, permisos 755
  • postfix-cluebringer.default lo renombramos a postfix-cluebringer y lo movemos a /etc/default, permisos 644

Arrancar el daemon

/etc/init.d/cluebringer start

y echamos un vistazo a /var/log/cbpolicyd.log para ver si todo va bien. Si no aparecen errores ejecutamos /etc/init.d/cluebringer status y nos mostrará los procesos activos y el bind al puerto 10031:
 3619 ?        Ss     0:02 /usr/bin/perl /usr/local/sbin/cbpolicyd --config /etc/cluebringer.conf
 5713 ?        S      0:03 /usr/bin/perl /usr/local/sbin/cbpolicyd --config /etc/cluebringer.conf
16205 ?        S      0:03 /usr/bin/perl /usr/local/sbin/cbpolicyd --config /etc/cluebringer.conf
21529 ?        S      0:03 /usr/bin/perl /usr/local/sbin/cbpolicyd --config /etc/cluebringer.conf
32730 ?        S      0:03 /usr/bin/perl /usr/local/sbin/cbpolicyd --config /etc/cluebringer.conf
tcp        0      0 :::10031                    :::*                        LISTEN      3619/perl
Para que el programa arranque automáticamente en los reinicios:

chkconfig --add cluebringer
chkconfig --level 2345 cluebringer on


Instalar WebUI

Copiamos la carptea /webui a nuestro directorio web:

cp -r webui /var/www/.../webui

y abrimos el fichero /includes/config.php para configurar el acceso a la base de datos:

# mysql:host=localhost;dbname=policyd
#
# pgsql:host=xx;dbname=yyy
#
# sqlite:////full/unix/path/to/file.db?mode=0666
#
#$DB_DSN="sqlite:////tmp/cluebringer.sqlite";
$DB_DSN="mysql:host=localhost;dbname=policyd";
$DB_USER="policyduser";
$DB_PASS="password";
Para terminar protegemos nuestra carpeta con clave: creamos un .htaccess en /webui
# /var/www/.../webui/.htaccess
AuthUserFile /usr/share/cluebringer/webui/.htpasswd
AuthGroupFile /dev/null
AuthName "user and password"
AuthType Basic

<LIMIT GET>
require valid-user
</LIMIT>
creamos el usuario con su clave
htpasswd -c /usr/share/cluebringer/webui/.htpasswd elusuario
y modificamos httpd.conf
<Directory "/var/www/.../webui"> AllowOverride AuthConfig Order allow,deny Allow from all </Directory>

Integración con Postfix

Para indicarle a Postfix que use PolicyD modificamos las directivas smtpd_recipient_restrictionssmtpd_end_of_data_restrictions añadiéndole check_policy_service inet:127.0.0.1:10031 al principio de la lista, importante. Ya podemos reiniciar Postfix:

postfix reload

En el próximo artículo veremos como configurar los chequeos EHLO/HELO y el establecimiento de cuotas para los buzones, la gestión SPF y el Greylisting los realizo por otro lado.

No hay comentarios:

Publicar un comentario