Configuración de clamav-milter.

Autor: Joel Barrios Dueñas
Correo electrónico: darkshram en gmail punto com
Sitio de Red: http://www.alcancelibre.org/
Jabber ID: darkshram@jabber.org

Creative Commons Reconocimiento-NoComercial-CompartirIgual 2.1

© 1999-2016 Joel Barrios Dueñas. Usted es libre de copiar, distribuir y comunicar públicamente la obra y hacer obras derivadas bajo las condiciones siguientes: a) Debe reconocer y citar al autor original. b) No puede utilizar esta obra para fines comerciales (incluyendo su publicación, a través de cualquier medio, por entidades con fines de lucro). c) Si altera o transforma esta obra o genera una obra derivada, sólo puede distribuir la obra generada bajo una licencia idéntica a ésta. Al reutilizar o distribuir la obra, tiene que dejar bien claro los términos de la licencia de esta obra. Alguna de estas condiciones puede no aplicarse si se obtiene el permiso del titular de los derechos de autor. Los derechos derivados de usos legítimos u otras limitaciones no se ven afectados por lo anterior. Licencia completa en castellano. La información contenida en este documento y los derivados de éste se proporcionan tal cual son y los autores no asumirán responsabilidad alguna si el usuario o lector, hace mal uso de éstos.

Introducción.

Requisitos previos.

Se requiere un servidor de correo electrónico con Sendmail, previamente configurado y funcionando para enviar y recibir correo electrónico. Para más detalles al respecto, consultar el documento titulado «Configuración básica de Sendmail.».

Acerca de clamav-milter.

Clamav-milter es un componente para añadir (Plug-in) para la biblioteca de filtros de correo (libmilter) de Sendmail, que se encarga de hacer pasar todo el correo entrante, incluyendo todo lo que se reciba a través de rmail/UUCP, a través del ClamAV, que a su vez es un poderoso y robusto motor con licenciamiento libre, para la detección de gusanos, troyanos y virus. Verifica el correo electrónico durante la conexión con el servidor de correo que remite éste ultimo y lo rechaza automáticamente si éste incluye algún gusanos, troyanos o virus.

Al igual que clamav-milter, el cual es utilizado para la filtración de Spam, representa una excelente alternativa pues tiene un bajo consumo de recursos de sistema, haciéndolo idóneo para servidores con sustento físico obsoleto o donde otras aplicaciones tiene mayor prioridad en la utilización de recursos de sistema.

URL: http://www.clamav.net/

Acerca de ClamAV.

ClamAV es un conjunto de herramientas antivirus, libre y de código fuente abierto que tiene las siguiente características:

URL: http://www.clamav.net/

Equipamiento lógico necesario.

Instalación a través de yum.

Si utiliza CentOS o Red Hat™ Enterprise Linux puede utilizar el almacén YUM de Alcance Libre para servidores en producción, descargando el archivo http://www.alcancelibre.org/al/server/AL-Server.repo dentro del directorio /etc/yum.repos.d/:

wget -N http://www.alcancelibre.org/al/server/AL-Server.repo \
    -O /etc/yum.repos.d/AL-Server.repo

Omita el paso anterior si utiliza ALDOS o Fedora™.

Ejecute lo siguiente si utiliza ALDOS, CentOS 6 o Red Hat™ Enterprise Linux 6 y versiones posteriores de éstos:

yum -y install clamav-milter clamav-milter-sysvinit \
    clamav-update clamav-scanner \
    clamav-scanner-sysvinit clamav-data-empty

Ejecute lo siguiente si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7 y versiones posteriores de éstos:

yum -y install clamav-milter clamav-milter-systemd \
    clamav-update clamav-scanner \
    clamav-scanner-systemd clamav-data-empty

Ejecute lo siguiente si utiliza Fedora™ 22 y versiones posteriores de éste:

dnf -y install clamav-milter clamav-milter-systemd \
    clamav-update clamav-scanner \
    clamav-scanner-systemd clamav-data-empty

Procedimientos.

SELinux y el servicio clamav-milter.

Si utiliza ALDOS 1.4, CentOS 6 y Red Hat™ Enterprise Linux 6 y versiones posteriores de éstos, se requiere habilitar dos políticas para permitir un funcionamiento normal. Ejecute lo siguiente:

setsebool -P antivirus_use_jit=1 antivirus_can_scan_system=1

La política antivirus_use_jit permite a ClamAV utilizar el compilador JIT basado sobre LLVM (Low Level Virtual Machine), el cual es utilizado para extender las capacidades de detección de virus al compilar Bytecode.

La política antivirus_can_scan_system permite a ClamAV poder realizar la verificación todo lo que se encuentre en el sistema de archivos.

Actualizaciones recientes de SELinux impedirán que servicio clamav-milter pueda establecer los permisos y pertenencias requeridos para el zócalo del servicio y la comunicación entre el servicio sendmail y el servicio clamav-milter. El siguiente procedimiento crea una política que permitirá a clamav-milter operar normalmente.

Crear el directorio /usr/share/selinux/packages/clamav-milter:

mkdir /usr/share/selinux/packages/clamav-milter

Cambiarse al directorio /usr/share/selinux/packages/clamav-milter:

cd /usr/share/selinux/packages/clamav-milter

Si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7 descargue el archivo http://www.alcancelibre.org/linux/secrets/clamav-milter.te:

wget http://www.alcancelibre.org/linux/secrets/clamav-milter.te

Nota.

Si utiliza CentOS 6 o Red Hat™ Enterprise Linux 6 descargue en su lugar el archivo http://www.alcancelibre.org/linux/secrets/el6/clamav-milter.te:

Editar el archivo clamav-milter.te:

vi clamav-milter.te

Si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7, verifique que el archivo clamav-milter.te tenga el siguiente contenido:

module clamav-milter 1.0;

require {
        type antivirus_t;
        type sendmail_t;
        type init_t;
        type init_tmp_t;
        class unix_stream_socket connectto;
        class file write;
        class capability fowner;
}

#============= antivirus_t ==============
allow antivirus_t self:capability fowner;
allow antivirus_t init_tmp_t:file write;

#============= sendmail_t ==============
allow sendmail_t init_t:unix_stream_socket connectto;

Nota.

Si utiliza CentOS 6 o Red Hat™ Enterprise Linux 6, verifique que el archivo clamav-milter.te tenga el siguiente contenido:


module varios 1.0;

require {
	type antivirus_t;
	class capability fowner;
}

#============= antivirus_t ==============
allow antivirus_t self:capability fowner;

Crear el archivo de módulo clamav-milter.mod a partir del archivo clamav-milter.te:

checkmodule -M -m -o clamav-milter.mod clamav-milter.te

Crear el archivo de política clamav-milter.pp a partir del archivo clamav-milter.mod

semodule_package -o clamav-milter.pp -m clamav-milter.mod

Incluir la política al sistema:

semodule -i /usr/share/selinux/packages/clamav-milter/clamav-milter.pp

Regrese al directorio de inicio de root.

cd

Archivos /etc/freshclam.conf y /etc/sysconfig/freshclam.

Edite el archivo /etc/freshclam.conf:

vi /etc/freshclam.conf

El archivo /etc/freshclam.conf de los paquetes distribuidos por Alcance Libre ya incluye las modificaciones necesarias para permitir el funcionamiento de freshclam. Sin embargo, si se utilizan paquetes para Fedora o EPEL es necesario editar este archivo y comentar la línea 9. Esta incluye la palabra inglesa Example y su presencia es impedirá ejecutar freshclam con el fin de deshabilitar el servicio de modo predeterminado:

##
## Example config file for freshclam
## Please read the freshclam.conf(5) manual before editing this file.
##


# Comment or remove the line below.
# Example

Defina además las siguientes opciones:

UpdateLogFile /var/log/freshclam.log
LogSyslog yes
PidFile /var/run/freshclam.pid
# Si utiliza CentOS 6 o RHEL 6 defina 'clamav' como usuario.
user clamupdate
DatabaseOwner clamupdate
AllowSupplementaryGroups yes
DatabaseMirror database.clamav.net
# Number of database checks per day.
# Default: 12 (every two hours)
Checks 24
NotifyClamd /etc/clamd.d/scan.conf

Dependiendo del distribuidor de los paquetes de ClamAV el usuario puede variar respecto de este documento. Puede ser clamupdate o bien clamav.

Edite el archivo /etc/sysconfig/freshclam:

vi /etc/sysconfig/freshclam

El archivo /etc/sysconfig/freshclam de los paquetes distribuidos por Alcance Libre ya incluyen las modificaciones necesarias para permitir la actualización automática de la base de datos de ClamAV. Si se utilizan paquetes de Fedora™ o EPEL, es necesario editar el archivo /etc/sysconfig/freshclam y deshabilitar la última línea:

### !!!!! REMOVE ME !!!!!!
### REMOVE ME: By default, the freshclam update is disabled to avoid
### REMOVE ME: network access without prior activation
# FRESHCLAM_DELAY=disabled-warn # REMOVE ME

Archivo /etc/mail/clamav-milter.conf.

Edite el archivo /etc/mail/clamav-milter.conf:

vi /etc/mail/clamav-milter.conf

El archivo /etc/mail/clamav-milter.conf de los paquetes distribuidos por Alcance Libre ya incluye las modificaciones necesarias para permitir el funcionamiento de clamav-milter. Sin embargo, si se utilizan paquetes para Fedora o EPEL es necesario editar este archivo y comentar la línea 6. Esta incluye la palabra inglesa Example y su presencia es impedirá ejecutar clamav-milter con el fin de deshabilitar el servicio de modo predeterminado:

##
## Example config file for clamav-milter
##

# Comment or remove the line below.
# Example

Defina además las siguientes opciones:

MilterSocket /var/run/clamav-milter/clamav-milter.sock
# Remove stale socket after unclean shutdown.
FixStaleSocket yes
# Si utiliza CentOS 6 o RHEL 6 defina 'clamav' como usuario.
User clamilt
AllowSupplementaryGroups yes
PidFile /var/run/clamav-milter/clamav-milter.pid
TemporaryDirectory /var/tmp
ClamdSocket unix:/var/run/clamd.scan/clamd.sock
# Default: Quarantine
OnInfected Reject
RejectMsg 550 Message contaminated with %v
LogFile /var/log/clamav-milter.log
LogTime yes
LogSyslog yes

Dependiendo del distribuidor de los paquetes de ClamAV el usuario puede variar respecto de este documento. Puede ser clamilt o bien clamav.

Tome nota que la ruta del zócalo /var/run/clamav-milter/clamav-milter.sock —definida en la opción MilterSocket— deberá ser la misma que se defina en el macro que se añadirá al archivo /etc/mail/sendmail.mc. Dependiendo de del distribuidor del conjunto de paquetes de ClamAV la ruta puede estar predefinida como /var/run/clamav-milter/clamav.sock o /var/run/clamav-milter/clamav-milter.socket. Es probable que deba ajustar la ruta.

Tome nota también que la ruta del zócalo del servicio clamad —definida en la opción ClamdSocket— deberá coincidir con la ruta establecida en la opción LocalSocket del archivo /etc/clamd.d/scan.conf.

Archivo /etc/clamd.d/scan.conf.

Edite el archivo /etc/mail/clamav-milter.conf:

vi /etc/clamd.d/scan.conf

El archivo /etc/clamd.d/scan.conf de los paquetes distribuidos por Alcance Libre ya incluye las modificaciones necesarias para permitir el funcionamiento de clamad.scan. Sin embargo, si se utilizan paquetes para Fedora o EPEL es necesario editar este archivo y comentar la línea 8. Esta incluye la palabra inglesa Example y su presencia es impedirá ejecutar clamd.scan con el fin de deshabilitar el servicio de modo predeterminado:

##
## Example config file for the Clam AV daemon
## Please read the clamd.conf(5) manual before editing this file.
##


# Comment or remove the line below.
# Example

Defina además las siguientes opciones:

LogSyslog yes
PidFile /var/run/clamd.scan/clamd.pid
LocalSocket /var/run/clamd.scan/clamd.sock
# Remove stale socket after unclean shutdown.
FixStaleSocket yes
TCPSocket 3310
TCPAddr 127.0.0.1
# Si utiliza CentOS 6 o RHEL 6 defina 'clamav' como usuario.
User clamscan
AllowSupplementaryGroups yes
DetectBrokenExecutables yes

Dependiendo del distribuidor de los paquetes de ClamAV el usuario puede variar respecto de este documento. Puede ser clamscan o bien clamav.

Tome nota que la ruta del zócalo del servicio clamad —definida en la opción LocalSocket— deberá coincidir con la ruta establecida en la opción ClamdSocket del archivo /etc/mail/clamav-milter.conf.

Genere un enlace simbólico como /etc/clamd.conf que apunte hacia /etc/clamd.d/scan.conf para permitir que otras aplicaciones puedan utilizar la misma configuración:

ln -s /etc/clamd.d/scan.conf /etc/clamd.conf

Archivo /etc/mail/sendmail.mc.

Edite el archivo /etc/mail/sendmail.mc:

vi /etc/mail/sendmail.mc

Añada el siguiente contenido justo arriba de la línea MAILER(smtp)dnl.

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav-milter.sock, F=, T=S:4m;R:4m')dnl
define(`confINPUT_MAIL_FILTERS', `clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Tome nota que la ruta del zócalo /var/run/clamav-milter/clamav-milter.sock deberá ser la misma que se defina en la opción MilterSocket del archivo /etc/mail/clamav-milter.conf. Dependiendo de del distribuidor del conjunto de paquetes de ClamAV la ruta puede estar predefinida como /var/run/clamav-milter/clamav.sock o /var/run/clamav-milter/clamav-milter.socket. Es probable que deba ajustar la ruta.

Utilice lo siguiente si se combina con Spamassassin Milter:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav-milter.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z')dnl
define(`confINPUT_MAIL_FILTERS', `spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Utilice lo siguiente si se combina con Spamassassin Milter y Milter Greylist:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`greylist', `S=local:/var/run/milter-greylist/milter-greylist.sock')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav-milter.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z, {greylist}')dnl
define(`confMILTER_MACROS_CONNECT', `{_}, {j}, {if_addr}, {daemon_port}')dnl
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl
define(`confMILTER_MACROS_ENVFROM', `{i}, {auth_authen}')dnl
define(`confINPUT_MAIL_FILTERS', `greylist,spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Utilice lo siguiente si se combina con Spamassassin Milter, Milter Greylist y DKIM Milter:

dnl MASQUERADE_DOMAIN(localhost)dnl
dnl MASQUERADE_DOMAIN(localhost.localdomain)dnl
dnl MASQUERADE_DOMAIN(mydomainalias.com)dnl
dnl MASQUERADE_DOMAIN(mydomain.lan)dnl

INPUT_MAIL_FILTER(`dkim-milter', `S=local:/var/run/dkim-milter/dkim-milter.sock')dnl
INPUT_MAIL_FILTER(`greylist', `S=local:/var/run/milter-greylist/milter-greylist.sock')dnl
INPUT_MAIL_FILTER(`spamassassin', `S=unix:/var/run/spamass-milter/spamass-milter.sock, F=, T=C:15m;S:4m;R:4m;E:10m')dnl
INPUT_MAIL_FILTER(`clamav', `S=local:/var/run/clamav-milter/clamav-milter.sock, F=, T=S:4m;R:4m')dnl
define(`confMILTER_MACROS_ENVRCPT', `b, r, v, Z, {greylist}')dnl
define(`confMILTER_MACROS_CONNECT', `{_}, {j}, {if_addr}, {daemon_port}')dnl
define(`confMILTER_MACROS_HELO', `{verify}, {cert_subject}')dnl
define(`confMILTER_MACROS_ENVFROM', `{i}, {auth_type}, {auth_authen}, {auth_ssf}, {auth_author}, {mail_mailer}, {mail_host}, {mail_addr}')dnl
define(`confINPUT_MAIL_FILTERS', `dkim-milter,greylist,spamassassin,clamav')dnl

MAILER(smtp)dnl
MAILER(procmail)dnl

dnl MAILER(cyrusv2)dnl

Configuración.

Clamav-milter depende totalmente de la base de datos de ClamAV. El funcionamiento estándar —que consiste en rechazar correo electrónico que contenga virus y otros programas malignos— funciona sin necesidad de argumentos. Las opciones de inicio para clamav-milter se pueden definir en el archivo /etc/sysconfig/clamav-milter. La configuración predeterminada es suficiente para funcionar normalmente.

man 8 clamav-milter

Iniciar, detener y reiniciar el servicio clamav-milter.

Si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7 y versiones posteriores de éstos, ejecute lo siguiente para añadir los servicios clamd@scan y clamav-milter a los servicios de inicio de sistema:

systemctl enable clamd@scan
systemctl start clamd@scan
systemctl enable clamav-milter
systemctl start clamav-milter

Nota.

Si utiliza CentOS 6 o Red Hat™ Enterprise Linux 6 y versiones anteriores de éstos, ejecute lo siguiente para añadir los servicios clamd.scan y clamav-milter a los servicios de inicio de sistema:

chkconfig clamd.scan on
service clamd.scan start
chkconfig clamav-milter on
service clamav-milter start

Ejecute lo siguiente para actualizar manualmente la base de datos de firmas:

freshclam

Si utiliza CentOS 7 o Red Hat™ Enterprise Linux 7 y versiones posteriores de éstos, ejecute lo siguiente para reiniciar el servicio sendmail y aplicar los cambios.

systemctl restart sendmail

Nota.

Si utiliza CentOS 6 o Red Hat™ Enterprise Linux 6 y versiones anteriores de éstos, ejecute lo siguiente para reiniciar el servicio sendmail y aplicar los cambios.

service sendmail restart