En este artículo describimos como configurar el antivirus de correos clamav con clamav-milter en un OpenBSD 3.7 con sendmail.

Configuración de ClamAV

Instalar desde portes, pues clamav depende de arc que está disponible sólo como porte:

# cd /root/tmp
# ftp rt.fm/pub/OpenBSD/3.7/ports.tar.gz
# cd /usr
# tar xvfz /root/tmp/ports.tar.gz
# cd /usr/ports/security/clamav
# make install

Edite /etc/clamd.conf y /etc/freshclam.conf, en ambos quite la linea Example y active las apropiadas. En ambos emplee como usuario _clamav y emplee archivos logs.

Prepare archivos de log:

# touch /var/log/freshclam.log
# chown _clamav:_clamav /var/log/fresclam.log

Ejecutar freshclam para actualizar la base de datos de virus.

# freshclam

Vale la pena hacer esta actualización a diario. Puede ser agregando al archivo /etc/daily.local:

if ![ -f /usr/local/bin/freshclam; ] then
        /usr/local/bin/freshclam
fi

Puede asegurar que durante el arranque se ejecuta el servidor agregando a /etc/rc.local:

if ![ -x /usr/local/sbin/clamd; ] then
        mkdir -p /var/run/clamav
        chown _clamav:_clamav /var/run/clamav
        echo -n " clamd"; /usr/local/sbin/clamd
        if ![ -x /usr/local/sbin/clamav-milter ] then
                echo -n " clamav-milter"; 
                /usr/local/sbin/clamav-milter ${clamav_milter_flags}
        fi
fi

Y a /etc/rc.conf.local:

clamav_milter_flags="--max-children=2 -olb local:/var/run/clamav/clamav-milter.sock"

Configuración de sendmail para que soporte milter de ambos:

Asegurese de tener:

WANT_LIBMILTER=1

en /etc/mk.conf

Descargue las fuentes del sistema base (src.tar.gz) e instalelas en /usr/src después:

cd /usr/src/gnu/usr.sbin/sendmail/
make
cd cf/cf
cp openbsd-proto.mc openbsd-proto-milter.mc

Edite openbsd-proto-milter.ml para añadir:

dnl
dnl End of masquerading section.
define(`confMILTER_MACROS_CONNECT',`b, j, _, {daemon_name}, {if_name}, {if_addr}')dnl
INPUT_MAIL_FILTER?(`clamav', `S=local:/var/run/clamav/clamav-milter.sock, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `clamav')dnl
dnl Fin de milters
MAILER(local)dnl
MAILER(smtp)dnl

Termine la configuración con:

make openbsd-proto-milter.cf
cp openbsd-proto-milter.cf /etc/mail/sendmail.cf

Pruebas

La siguiente vez que reinicie su equipo debe quedar funcionando la nueva configuración, para probarla sin reiniciar:

# . /etc/rc.conf
# mkdir -p /var/run/clamav
# chown _clamav:_clamav /var/run/clamav
# /usr/local/sbin/clamd
# pkill -9 sendmail
# sendmail $sendmail_flags
# /usr/local/sbin/clamav-milter $clamav_milter_flags

En la bitácora de correo (/var/log/maillog) por cada correo que entra o sale por el servidor debe quedar una entrada del estilo:

Aug  3 12:04:21 correo sm-mta15245?: j73H4I2N015245: Milter add: header: X-Virus-Scanned: 
  ClamAV version 0.83, clamav-milter version 0.83 on 192.168.6.108
Aug  3 12:04:21 correo sm-mta15245?: j73H4I2N015245: Milter add: header: X-Virus-Status: 
  Infected with Worm.Mydoom.I
Aug  3 12:04:21 correo sm-mta15245?: j73H4I2N015245: Milter: data, reject=554 5.7.1 virus 
  Worm.Mydoom.I detected by ClamAV - http://www.clamav.net
Aug  3 12:04:21 correo sm-mta15245?: j73H4I2N015245: to=<a@pasosdeJesus.org>, 
  delay=00:00:02, pri=100560, stat=virus Worm.Mydoom.I detected by ClamAV - 
  http://www.clamav.net

Un problema que puede surgir y solución

Nos parece que si su servidor maneja un volumen alto de correos, esta configuración puede reiniciar esporádicamente el computador o producir fallas en el kernel.

clamav-milter permite distribuir la carga de la busqueda de virus en diversos servidores. Suponiendo que planee emplar 2 servidores (uno de recepción de correos y otro como antivirus), en el primero puede deshabilitar clamd, dejando solo clamav-milter mientras que en el segundo puede dejar solo clamd.

En el que recibe correos debe iniciar clamav-milter con flags como:

clamav_milter_flags="--server=192.168.3.10 -d --max-children=2 -q -e -olb local:
/var/run/clamav/clamav-milter.sock"

Siendo 192.168.3.10 la IP del computador donde corre clamd. En ese mismo el archivo de configuración /etc/clamd.conf puede incluir las lineas:

!LogFile /var/log/clamd.log
!LogTime
!LogSyslog
!PidFile /var/run/clamd.pid
!TemporaryDirectory /tmp
!DatabaseDirectory /var/db/clamav
TCPSocket 3310
User _clamav

asegurese de no dejar o dejar con comentarios las líneas !LocalSocket y TCPAddr.

El archivo /etc/clamd.conf del computador donde correrá sólo clamd puede incluir:

!LogFile /var/log/clamd.log
!LogTime
!PidFile /var/run/clamd.pid
!DatabaseDirectory /var/db/clamav
TCPSocket 3310
User _clamav

asegurandose de no dejar la línea !LocalSocket.

REFERENCIAS

  • Mauricio Rivera
  • Páginas man de clamd y clamav-milter