Вы находитесь на странице: 1из 18

MAIL GATEWAY LINUX CON FILTRO ANTISPAM PARA MICROSOFT EXCHANGE SERVER

Juan Jos Lpez - Junio 2007

Mail Gateway para Exchange Server

INDICE

1 2 3 4 5

OBJETIVOS.................................................................................................................................. 3 DIAGRAMA DE RED .................................................................................................................. 4 INSTALACIN DEL SISTEMA ................................................................................................ 5 INSTALACIN DE SERVIDOR DNS BIND9 .......................................................................... 5 INSTALACIN DE POSTFIX.................................................................................................... 6 5.1 INSTALAMOS SASL PARA AUTENTICACIN DE USUARIOS .................................... 6 5.2 5.3 5.4 CONFIGURACIN DE POSTFIX PARA AUTENTICACIN CON SASL ....................... 8 AADIR TLS A POSTFIX .................................................................................................... 9 REENVIAR TODO EL CORREO AL EXCHANGE .......................................................... 11

6 7 8

FILTRO DE CONTENIDOS PARA POSTFIX....................................................................... 12 6.1 COMO HACER QUE SPAMASSASSIN APRENDA......................................................... 14 AADIENDO SEGURIDAD A POSTFIX ............................................................................... 17 NOTAS ......................................................................................................................................... 18

_____________________________________________________________________________ 2/18

Mail Gateway para Exchange Server

OBJETIVOS
El objeto del presente documento es detallar la Instalacin de un servidor Mail Gateway para

Exchange Server integrado en un dominio con Active Directory y con filtro AntiSpam. El principal objetivo de este proyecto es aadir seguridad de un servidor de correo Exchange Server publicado en Internet. Para ello instalaremos un sistema de correo ms seguro delante del Exchange que tenga propiedades de firewall, y filtro de contenidos. Estas medias tambin podran implementarse en un sistema Windows, pero optamos por un sistema Linux por su robustez , sus implementaciones contrastadas de seguridad y su bajo coste. Todas las herramientas necesarias para la implantacin del sistema sern gratuitas, bajo licencia GNU. Como requisito imprescindible tendremos el no realizar ninguna modificacin en la configuracin de los usuarios para enviar y recibir correo, ni realizar ninguna modificacin en el servidor de Exchange. Para ello, el nuevo servidor de correo debe reenviar los correos al servidor de Exchange, y cualquier usuario que necesite enviar correo deber autenticarse con sus credenciales del Dominio de midominio.com. Aadiremos seguridad en el envo y recepcin de correos con la instalacin de un servidor de certificados que pueda hacer que el intercambio entre el usuario y el servidor de correo se haga a travs de una conexin segura cifrada a travs de certificados de servidor. Nuestro servidor de correo es tambin nuestro servidor de DNS primario en Internet. Por esto debemos migrar tambin el servicio de DNS al nuevo servidor. Para ello utilizaremos el servidor Bind9, previamente como servidor Secundario de todas las zonas de midominio.com y posteriormente ponindolo como Primario para estas mismas zonas.

_____________________________________________________________________________ 3/18

Mail Gateway para Exchange Server

DIAGRAMA DE RED

INTERNET ISP
IP-EXTERNA Respuestas DNS, SMTP, POP3

Peticiones DNS, SMTP, POP3

POSTMAIL: Debian Linux 4.0 Etch.


DNS: BIND 9.3.4. Master dominios: midominio.com. MAIL: Servidor de Correo Postfix 2.3.8. Filtro Anti-Spam: Spamassassin 3.1.7. gestionado por MailScanner FIREWALL: Iptables 1.3.6 con shorewall 3.4.

IP: 10.10.1.20 Respuestas SMTP, POP3

DMZ

IP: 10.10.1.1

DMZ
ACCEPT net:10.10.1.20 loc:192.168.1.104 tcp 25,110 (smpt,pop3) ACCEPT net:10.10.1.20 loc:192.168.1.114 tcp 389 (ldap a CONTROLADOR DOMINIO) (ldap a CONTROLADOR DOMINIO) (ldap a CONTROLADOR DOMINIO)

Peticiones SMTP, POP3

ACCEPT net:10.10.1.20 loc:192.168.1.114 udp 389 ACCEPT net:10.10.1.20 loc:192.168.1.114 tcp 3268

IP: 192.168.1.9 Peticiones SMTP, POP3, IMAP Respuestas SMTP, POP3, IMAP IP: 192.168.1.104 Respuestas SMTP, POP3, IMAP

LAN
Peticiones SMTP, POP3, IMAP

MAIL: Windows 2000 Server. Exchange 2000 Server

_____________________________________________________________________________ 4/18

Mail Gateway para Exchange Server

INSTALACIN DEL SISTEMA

Instalamos el sistema base de Debian 4.0 Etch, sin entorno grfico ni servidores. Instalamos los siguientes paquetes necesarios: - openssh-server - vsftpd - libnet-ssleay-perl - webmin

Cambiamos la configuracin de vsftpd (vi /etc/vsftpd.conf): - anonymous_enable=NO - local_enable=YES - write_enable=YES

Cambiamos la configuracin de WEBMIN: Cambiamos lenguaje: ESPAOL Configuracin de RED: nombre mquina: smtp.midominio.com IP: 192.168.1.103/24 GW: 192.168.1.124

Cambiamos las contraseas por defecto "admin" de root.

INSTALACIN DE SERVIDOR DNS BIND9


Necesitaremos un servidor de DNS primario para sustituir el DNS de Windows. Para ello

configuraremos previamente un servidor de DNS secundario de nuestro primario en la IP-Externa y posteriormente lo pasaremos a primario.

Instalamos Bind9:

apt-get install bind9 bind9-doc dnsutils

_____________________________________________________________________________ 5/18

Mail Gateway para Exchange Server

Configuramos Bind9 para que sea servidor de nombres secundario de midominio.com: Creamos una nueva zona secundaria en BIND cuyo servidor master sea IP-Externa. Debemos indicar al DNS de Windows para que permita la transferencia de zona al IP-Interna del servidor.

INSTALACIN DE POSTFIX
Instalamos los paquetes necesarios, necesitamos soporte ssl (para certificados) y ldap para

autenticarnos:

apt-get install postfix: En la instalacin de postfix nos har una serie de preguntas: Tipo de servidor: "sitio de Internet". Nombre del servidor: "smtp.midominio.com". Resto de opciones por defecto.

apt-get install postfix-ldap apt-get install postfix-doc apt-get install postfix-pcre apt-get install postfix-tls (me dice que ya se ha instalado con postfix).

NOTA: Al instalar postfix, se instala tambin el soporte TLS. Para ello se instala automticamente Openssl y ssl-cert - probamos que el servidor contesta: telnet smtp.midominio.com 25.

5.1

INSTALAMOS SASL PARA AUTENTICACIN DE USUARIOS

Para la autenticacin de usuarios utilizaremos SASL que contiene soporte LDAP

apt-get install sasl2-bin apt-get install libsasl2-modules.

Al instalar este paquete nos sugiere instalar tambin lo siguiente:

libsasl2-modules-opt libsasl2-modules-ldap _____________________________________________________________________________ 6/18

Mail Gateway para Exchange Server

libsasl2-modules-sql libsasl2-modules--gssapi-mit

Nosotros queremos usar SASL para autenticacin de usuarios contra un Active Directory. Para ello necesitamos que SASL soporte LDAP. Instalamos por tanto libsasl2-modules-ldap

apt-get install libsasl2-modules-ldap

Para que SASL funcione con LDAP debemos crear el siguiente fichero /etc/saslauthd.conf (vi /etc/saslauthd.conf) con el siguiente contenido:

ldap_servers: ldap://192.168.1.1/ \\ servidor donde est el servicio LDAP ldap_bind_dn: ldap@midominio.com ldap_bind_pw: password ldap_version: 3 ldap_search_base: CN=Users,DC=MIDOMINIO,DC=COM ldap_filter: (&(objectclass=user)(sAMAccountName=%u)) \\ usuario con permisos de consulta en la BD

\\ contrasea del usuario con permisos de lectura en la BD

Nos falta decirle al demonio de saslauthd que se ejecute al inicio, Para ello debemos cambiar el fichero /etc/default/saslauthd:

START=yes

y que se ejecute con soporte LDAP. Para ello debemos cambiar el fichero /etc/default/saslauthd, donde pone "pam" cambiamos a "ldap":

MECHANISMS="ldap"

reiniciamos el demonio de saslauthd:

/etc/inid.d/saslauthd start restart

Comprobamos que el demonio est corriendo con soporte ldap. para ello usamos ps -ax | grep sasl y debe aparecer: _____________________________________________________________________________ 7/18

Mail Gateway para Exchange Server

4465 ? 4466 ? 4467 ? 4468 ? 4469 ? 4486 pts/1

Ss S S S S S+

0:00 /usr/sbin/saslauthd -a ldap -c -n 5 0:00 /usr/sbin/saslauthd -a ldap -c -n 5 0:00 /usr/sbin/saslauthd -a ldap -c -n 5 0:00 /usr/sbin/saslauthd -a ldap -c -n 5 0:00 /usr/sbin/saslauthd -a ldap -c -n 5 0:00 grep sasl

Realizamos una prueba para consultar en la base de datos de LDAP del Active Directory:

smtp:/etc# testsaslauthd -u ldap -p password 0: OK "Success."

Si cambiamos el password nos debe dar error. Tambin podemos usar un sniffer en el controlador de dominio para ver si le estn llegando peticiones LDAP.

5.2

CONFIGURACIN DE POSTFIX PARA AUTENTICACIN CON SASL

Quitamos el CHROOT a postfix para que pueda coger toda la configuracin de /etc. Para editamos el fichero /etc/postfix/master.cf y cambiamos la lnea smtp y en el campo chroot ponemos "n":

# ============================================================= ============= # service type private unpriv chroot wakeup maxproc command + args # # ============================================================= ============= smtp inet n n smtpd (yes) (yes) (yes) (never) (100)

Revisamos la configuracin bsica. Para ello utilizamos el comando dpkg-recofigure postfix:

Tipo de servidor: "sitio de Internet". correo para superusuario: "root@midominio.com" Nombre del servidor: "smtp.midominio.com" _____________________________________________________________________________ 8/18

Mail Gateway para Exchange Server

Redes locales: "127.0.0.0/8 192.168.1.0/24" entrega local: "usar procmail" resto de opciones por defecto

Aadimos soporte SASL a postfix. Para ello utilizamos el comando postconf -e:

postconf -e "smtpd_sasl_local_domain =" postconf -e "smtpd_sasl_auth_enable = yes" postconf -e "smtpd_sasl_security_options = noanonymous" postconf -e "broken_sasl_auth_clients = yes" postconf -e "smtpd_recipient_restrictions = permit_sasl_authenticated,permit_mynetworks, reject_unauth_destination" postconf -e "inet_interfaces = all"

Despus aadimos el fichero smtpd.conf para que postfix tome el tipo de autenticacin:

echo "pwcheck_method: saslauthd" >> /etc/postfix/sasl/smtpd.conf echo "mech_list: plain login" >> /etc/postfix/sasl/smtpd.conf

y aadimos permisos a postfix para poder leer los ficheros de saslauthd:

adduser postfix sasl

Con esto debemos poder enviar correo autenticado contra un servidor LDAP con Active Directory.

5.3

AADIR TLS A POSTFIX

Para aadir seguridad a postfix debemos hacer que el intercambio de credenciales sea seguro. Para ello se implementar un tunel TLS a travs de certificados de Servidor que podremos usar en cualquier cliente SMTP con soporte SSL:

- creamos el directorio donde se almacenarn las claves y los certificados de servidor:

mkdir /etc/postfix/ssl _____________________________________________________________________________ 9/18

Mail Gateway para Exchange Server

- Nos cambiamos de a ese directorio y utilizamos las rutinas de openssl para crear los certificados. Nos pedir una clave cada vez que generemos la clave pblica. Siempre usaremos la clave "mipassword"

cd /etc/postfix/ssl/ openssl genrsa -des3 -rand /etc/hosts -out smtpd.key 1024 chmod 600 smtpd.key openssl req -new -key smtpd.key -out smtpd.csr openssl x509 -req -days 3650 -in smtpd.csr -signkey smtpd.key -out smtpd.crt openssl rsa -in smtpd.key -out smtpd.key.unencrypted mv -f smtpd.key.unencrypted smtpd.key openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650

- Configuramos Postfix para que soporte TLS:

postconf -e 'smtpd_tls_auth_only = no' postconf -e 'smtp_use_tls = yes' postconf -e 'smtpd_use_tls = yes' postconf -e 'smtp_tls_note_starttls_offer = yes' postconf -e 'smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key' postconf -e 'smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt' postconf -e 'smtpd_tls_CAfile = /etc/postfix/ssl/cacert.pem' postconf -e 'smtpd_tls_loglevel = 1' postconf -e 'smtpd_tls_received_header = yes' postconf -e 'smtpd_tls_session_cache_timeout = 3600s' postconf -e 'tls_random_source = dev:/dev/urandom'

- reiniciamos postfix: /etc/init.d/postfix restart

_____________________________________________________________________________ 10/18

Mail Gateway para Exchange Server

5.4

REENVIAR TODO EL CORREO AL EXCHANGE

- Para enviar todo el correo al Exchange debemos crear el fichero /etc/postfix/transport

vi transport

- Aadimos la siguiente lnea:

midominio.com

smtp:192.168.1.104

- ejecutamos postmap transport. Esto nos crea el fichero /etc/postfix/transport.db

- Le decimos a postfix que busque aqu:

postconf -e "transport_maps=hash:/etc/postfix/transport"

- Reiniciamos postfix. De esta forma todo el correo CORRECTO se reenviar al exchange.

Debemos realizar unos cambios para que POSTFIX acepte correo que no sea para ningn usuario local (debemos recordar que todo el correo debe enviarse al Exchange y que por tanto el postfix no tendr dados de alta los usuarios que reciben el correo). Para ello debemos aadir en /etc/postfix/main.cf:

local_recipient_maps =

Al dejar esta directiva vaca, postfix aceptar todo el correo que sea de Internet. Ahora solo queda revisar los dominios que acepta postfix. Esto lo veremos en la directiva MYDESTINATION. Aqu debemos incluir todos los dominios que acepta postifx, tanto a nivel de mquina como a nivel de dominio. Debe quedar as:

mydestination = smtp.midominio.com, midominio.com,localhost

_____________________________________________________________________________ 11/18

Mail Gateway para Exchange Server

FILTRO DE CONTENIDOS PARA POSTFIX


Una vez que hemos comprobado que funciona correctamente el envo y recepcin de correo a a

travs de POSTFIX, incluyendo la seguridad (a travs de TLS) instalaremos un filtro de contenidos para evitar el SPAM. Para poder filtrar por contenidos debemos instalar una aplicacin que interactue entre Postfix y el filtro de contenidos. Para ello usaremos Mailscanner como intermediario y Spamassassin como filtro de contenidos.

- Instalamos SPAMASSASSIN.

apt-get install spamassassin spamc

- Debemos cambiar algunos parmetros en su fichero de configuracin. Para ello nos vamos a /etc/mail/spamassasin/local.cf:

report_safe 1 required_score 5.0 use_bayes 1 bayes_auto_learn 1

Nos hace falta un componente que interactue entre Postfix y Spamassassin. Para ello instalaremos MAILSCANNER. Previamente debemos parar postfix:

/etc/init.d/postfix stop apt-get install mailscanner

Cambiamos los siguientes parmetros del fichero de configuracin de MailScanner para que funcione con Postfix:

Run As User=postfix Run As Group=postfix Incoming Queue Dir=/var/spool/postfix/hold Outgoing Queue Dir=/var/spool/postfix/incoming MTA=postfix

_____________________________________________________________________________ 12/18

Mail Gateway para Exchange Server

Debemos asegurarnos de que el usuario postfix puede escribir en todos los ficheros de configuracin de MailScanner. Para ello cambiamos el propietario y el grupo de los siguientes directorios de la siguiente forma:

chown postfix.postfix /var/spool/MailScanner/incoming chown postfix.postfix /var/spool/MailScanner/quarantine

NOTA: Cuando arranquemos MailScanner veremos como nos dice que el usuario no es correcto para varios directorios ms. Solamente tenemos que utilizar chown para cambiar el propietario y el grupo de todos los que nos pida.

Ahora solamente nos queda hacer una modificacin en Postfix para que MailScanner pueda funcionar correctamente. Si observamos en las lneas anteriores le hemos dicho a MailScanner que la cola de entrada (Incoming Queue) es la cola Hold de Postfix, y que la cola de salida de MailScanner es la cola de incoming de Postfix. Esto es as porque cualquier correo que reciba Postfix, lo pondr en su cola HOLD. De aqu lo coger MailScanner, lo analizar y lo pondr en la cola de incoming de Postfix, que seguir su proceso normal.

Para decirle a Postfix que ponga todos los correos recibidos en la cola HOLD debemos hacer lo siguiente:

- editamos el fichero (no existe, lo creamos) /etc/postfix/header_checks y aadimos:

/^Recived:/

HOLD

- Luego aadimos una lnea a /etc/postfix/main.cf

header_checks=regexp:/etc/postfix/header_checks

- Arrancamos Postfix y MailScanner

/etc/init.d/postfix start /etc/init.d/mailscanner start

Para probarlo nos enviamos un mail y en las cabeceras debemos ver entradas de MailScanner. Cualquier correo que identifique como SPAM lo marcar cambiando el subjet por {Spam?}. _____________________________________________________________________________ 13/18

Mail Gateway para Exchange Server

6.1

COMO HACER QUE SPAMASSASSIN APRENDA

Ahora nos queda ver como Spamassassin puede aprender que correos son buenos y cuales no. Para ello tenemos que indicarle durante un tiempo que correos son SPAM y cuales HAM (buenos). En el entorno donde nosotros estamos haciendo la instalacin vemos que no tenemos usuarios locales. Todos los usuarios son del EXCHANGE. Por ello nos vamos a crear un usuario que pueda leer un buzn donde iremos metiendo correo SPAM y correo HAM. Para ello seguiremos los siguientes pasos:

- Instalamos un cliente de correo IMAP que pueda acceder al Exchange:

apt-get install fetchmail

- Creamos un usuario local para leer estos correos:

adduser mailrd

- En el HOME de este usuario modificamos el .procmailrc y el .fetchmailrc de la siguiente forma

.procmailrc: PATH=/bin:/usr/bin:/usr/local/bin MAILDIR=$HOME/Mail DEFAULT=$MAILDIR/Inbox LOGFILE=$MAILDIR/logfile.txt SHELL=/bin/sh :0: Inbox

.fetchmailrc: poll 192.168.1.104 protocol imap username ham password password

- creamos en el Exchange el usuario ham con password password, y dos carpetas en el buzn del usuario, una carpeta llamada spam (donde iremos metiendo correo basura) y otra carpeta llamada ham (donde iremos metiendo correos buenos). - creamos y damos los permisos necesarios a los directorios que hemos establecido: _____________________________________________________________________________ 14/18

Mail Gateway para Exchange Server

mkdir Mail mkdir Mail/Inbox chown -R mailrd.mailrd Mail/ chmod -R 710 Mail/

Para probar si funciona enviamos un correo desde un usuario local al usuario mailrd, por ejemplo desde root hacemos lo siguiente:

echo hola | mail mailrd

nos debe llegar un correo al $HOME/Mail/Inbox

En el crontab de mailrd, nos creamos un scritp que recoja el correo del buzn de HAM y lo enve a Spamassassin para que aprenda. El script sera:

#!/bin/bash ################################################# # #learnspam # #

#################################################

date

rm ~/Mail/Inbox touch ~/Mail/Inbox

fetchmail --folder inbox/spam --all

INBOXSIZE="uno.." # lo que sea menos 0 NEWSIZE="0"

while [ "$INBOXSIZE" != "$NEWSIZE" ] do INBOXSIZE="$NEWSIZE" sleep 5 NEWSIZE=`ls -l ~/Mail/Inbox | awk '{ print $5 }'` _____________________________________________________________________________ 15/18

Mail Gateway para Exchange Server

done

sa-learn --mbox --no-sync --spam ~/Mail/Inbox rm ~/Mail/Inbox touch ~/Mail/Inbox

fetchmail --folder inbox/ham --all

INBOXSIZE="uno.." # lo que sea menos 0 NEWSIZE="0"

while [ "$INBOXSIZE" != "$NEWSIZE" ] do INBOXSIZE="$NEWSIZE" sleep 5 NEWSIZE=`ls -l ~/Mail/Inbox | awk '{ print $5 }'` done

sa-learn --mbox --no-sync --ham ~/Mail/Inbox rm ~/Mail/Inbox touch ~/Mail/Inbox

sa-learn --sync

Este script lo planificamos para que se ejecute cada hora: crontab -e

5****

/home/mailrd/learnspam >> ~/loglearning.txt 2>/dev/null

Es importante destacar que para que fetchmail pueda recoger el correo del Exchange debe hacer uso de postfix. Por ello debemos decirle que para el usuario que estamos usando (mailrd) cualquier correo se entregue en local. Debemos modificar por tanto el transport de Postfix.

_____________________________________________________________________________ 16/18

Mail Gateway para Exchange Server

AADIENDO SEGURIDAD A POSTFIX


Vamos a aadirles una serie de normas standarizadas con las cuales vamos a eliminar la mayor

parte del correo basura. Para ver el significado de cada una de las etiquetas debemos revisar la web de postfix en http://www.postfix.org/uce.html. Para aadir estas restricciones, abrimos el fichero /etc/postfix/main.cf y aadimos las siguientes etiquetas:

# Medidas antispam (anti-UCE)

smtpd_helo_required = yes disable_vrfy_command = yes strict_rfc821_envelopes = yes

smtpd_recipient_restrictions = reject_invalid_hostname, # reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unknown_sender_domain, reject_unknown_recipient_domain, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, reject_rbl_client dul.dnsbl.sorbs.net, reject_rbl_client dnsbl.sorbs.net, permit

smtpd_data_restrictions = reject_unauth_pipelining, permit

_____________________________________________________________________________ 17/18

Mail Gateway para Exchange Server

8
1:

NOTAS
reject_non_fqdn_hostname lo tengo que quitar porque si no desde equipos que se llamen

EQUIPO1, EQUIPO2, CORREO, que son nombres de host no FQDN no se puede enviar correo.

2: Cambio en MailScanner la etiqueta SpamScore Number Instead Of Stars = yes para que muestre en formato numrico la puntuacin que le da SpamAssassin al correo en vez de mostrar "S".

3: cambio esto para que no aparezca disarmed en el asunto de estos correos Disarmed Modify Subject = no

_____________________________________________________________________________ 18/18