El documento describe los pasos para instalar y configurar Policyd v2, un servicio multiplataforma que permite implementar políticas de seguridad anti-spam. Estos pasos incluyen instalar los requisitos, crear la base de datos, configurar el archivo de configuración, instalar los directorios y servicios necesarios, y configurar el servicio Postfix para que use Policyd.
1. POLICYD: INSTALACION y CONFIGURACION
INTRODUCCIÓN
Policyd v2 (también llamado cluebringer) es un servicio multi-plataforma que permite implementar
políticas de seguridad anti-spam para servidores MTA.
INSTALACION Y CONFIGURACION DEL POLICYD
1.- REQUISITOS
PolicyD:
• MySQL, PostgreSQL or SQLite
• Net::Server >= 0.96
• Net::CIDR
• Config::IniFiles (debian: libconfig-inifiles-perl, rpm: perl-Config-IniFiles)
• Cache::FastMap (debian: libcache-fastmmap-perl, rpm: perl-Cache-FastMmap)
• Mail::SPF (required for CheckSPF module)
WebUI - Para la parte web del Policyd (opcional):
• PHP v5+ (compiled with PDO support for your database)
2.- INSTALACIÓN
• Descargamos la última versión desde http://devlabs.linuxassist.net/projects/policyd/files y
extraemos los ficheros:
tar -xvvzf cluebringer-v2.1.x-201211111115.tar.gz
• Entramos en el directorio database y creamos la estructura de la base de datos, para ello
ejecutamos:
for i in core.tsql access_control.tsql quotas.tsql amavis.tsql checkhelo.tsql checkspf.tsql greylisting.tsql accounting.tsql
do
./convert-tsql mysql $i
done > policyd.sql
• Ejecutamos el sql que acabamos de crear, en el servidor que vaya a tener la base de datos del
policyd y creamos el usuario que va a acceder a la base de datos:
mysql -u root -p -e "create database policyd"
mysql -u root -p policyd < policyd.sql
mysql -u root -p -e "grant select, insert, update, delete on policyd.* to usuarioBD@'servidorCorreoPolicyd' identified by 'passwordDelUsuarioBD';"
mysql -u root -p -e "flush privileges;"
• Creamos el usuario y grupo con el que se va a ejecutar el demonio del policyd:
/usr/sbin/groupadd cbpolicyd
/usr/sbin/useradd -s /sbin/nologin -g cbpolicyd cbpolicyd
2. • Creamos el directorio /etc/cbpolicyd y movemos el cluebringer.conf a dicho directorio:
mkdir /etc/cbpolicyd
mv cluebringer.conf /etc/cbpolicyd/
• Modificamos las siguientes líneas en el /etc/cbpolicyd/cluebringer.conf, sobretodo hay que
especificar el puerto y los datos de la base de datos:
vi /etc/cbpolicyd/cluebringer.conf
# Preforking configuration
#
# min_server - Minimum servers to keep around
# min_spare_servers - Minimum spare servers to keep around ready to
# handle requests
# max_spare_servers - Maximum spare servers to have around doing nothing
# max_servers - Maximum servers alltogether
# max_requests - Maximum number of requests each child will serve
min_servers=4
min_spare_servers=4
max_spare_servers=12
max_servers=25
max_requests=1000
# Log level:
# 2 - Notices, warnings, errors
log_level=2
log_file=/var/log/cbpolicyd/cbpolicyd.log
# Things to log in extreme detail
log_detail=modules,tracking,policies,protocols
proto=tcp
# IP to listen on, * for all. Blank for unix sockets
host=*
port=10031
# Timeout in communication with clients
# Idle timeout in postfix defaults to 1015s (active connection)
timeout_idle=1015
# Busy sockets in postfix defaults to 100s
timeout_busy=115
# cidr_allow/cidr_deny
# Comma, whitespace or semi-colon separated. Contains a CIDR block to
# compare the clients IP to. If cidr_allow or cidr_deny options are
# given, the incoming client must match a cidr_allow and not match a
# cidr_deny or the client connection will be closed.
cidr_allow=0.0.0.0/0
cidr_deny=
# DATOS DE NUESTRA BASE DE DATOS: nombre, usuario y password correspondiente
[database]
#DSN=DBI:SQLite:dbname=policyd.sqlite
DSN=DBI:mysql:database=policyd;host=localhost
Username=usuarioBD
Password=passwordDelUsuarioBD
• Movemos los directorios cbp/ y awitpt/ a /usr/local/lib/cbpolicyd-2.1:
mkdir /usr/local/lib/cbpolicyd-2.1
mv cbp /usr/local/lib/cbpolicyd-2.1/
3. mv awitpt/awitpt /usr/local/lib/cbpolicyd-2.1/
• Movemos los servicios cbpolicyd y cbpadmin a /usr/local/sbin y /usr/local/bin respectivamente:
mv cbpadmin /usr/local/bin/
mv cbpolicyd /usr/local/sbin/
• Creamos los directorios /var/log/cbpolicyd y /var/run/cbpolicyd y asignamos los permisos
adecuados:
mkdir /var/log/cbpolicyd
mkdir /var/run/cbpolicyd
chown cbpolicyd.cbpolicyd /var/log/cbpolicyd /var/run/cbpolicyd
• Si queremos gestionar las políticas vía web, movemos el contenido del directorio webui/* a un
directorio que vea el apache y modificamos los parámetros del includes/config.php con los datos
de nuestra base de datos (nombre, usuario y password).
• Creamos un script de inicio para arrancar y parar el servicio del cbpolicyd
(/usr/local/sbin/cbpolicyd):
• Tenemos un modelo de script de inicio para debian (en el directorio debian) y otro para
Fedora (en el directorio contrib/initscripts/Fedora). Como nuestra distribución es
debian, hacemos una copia del que viene de ejemplo para debian:
cp -prf debian/cluebringer.init /etc/init.d/cbpolicyd
• Modificamos los siguientes parámetros:
DAEMON="/usr/local/sbin/cbpolicyd"
NAME="cbpolicyd"
PATH="/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin"
LOGFILE="/var/log/cbpolicyd/cbpolicyd.log"
RUNDIR="/var/run/cbpolicyd"
• Damos permiso de ejecución:
chmod +x /etc/init.d/cbpolicyd
• Lo configuramos en el arranque de la máquina. En debian, por defecto, no tenemos
el chkconfig (se puede instalar pero instala más cosas críticas), como equivalente
tenemos el update-rc.d:
update-rc.d cbpolicyd defaults
Note
• Habilitar servicio --> update-rc.d servicio defaults --> Crea enlaces
que inician el servicio en los runlevels 2345 y enlaces que lo
terminan en los runlevels 016 con la prioridad 20. Equivale a
update-rc.d servicio start 20 2 3 4 5 . stop 20 0 1 6
4. • Dehabilitar servicio --> update.rc.d -f servicio remove--> Borra todos
los enlaces en los directorios rc.?.d.
• Configuramos la rotación del log. Tenemos un fichero de ejemplo para debian, hacemos una copia
y modificamos los parámetros que necesitemos:
cp debian/cluebringer.logrotate /etc/logrotate.d/cbpolicyd
vi /etc/logrotate.d/cbpolicyd
/var/log/cbpolicyd/cbpolicyd.log {
weekly
rotate 7
copytruncate
compress
notifempty
missingok
}
• Para que el Postfix use el cbpolicyd, debemos añadir las directiva check_policy_service
inet:127.0.0.1:10031 en los parámetros smtpd_recipient_restrictions y
smtpd_end_of_data_restrictions del main.cf:
vi /etc/postfix/main.cf
smtpd_recipient_restrictions=
check_policy_service inet:127.0.0.1:10031,
....
permit
smtpd_end_of_data_restrictions =
check_policy_service inet:127.0.0.1:10031,
permit
BIBLIOGRAFíA
http://wiki.policyd.org/
http://www.policyd.org/