mail gateway corre o exchange

18
MAIL GATEWAY LINUX CON FILTRO ANTISPAM PARA MICROSOFT EXCHANGE SERVER Juan José López - Junio 2007

Upload: nilber-roberto-benites-moriano

Post on 21-Oct-2015

14 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Mail Gateway Corre o Exchange

MAIL GATEWAY LINUX CON FILTRO

ANTISPAM PARA MICROSOFT

EXCHANGE SERVER

Juan José López - Junio 2007

Page 2: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

2/18

INDICE

1 OBJETIVOS.................................................................................................................................. 3 2 DIAGRAMA DE RED.................................................................................................................. 4 3 INSTALACIÓN DEL SISTEMA ................................................................................................ 5 4 INSTALACIÓN DE SERVIDOR DNS BIND9 .......................................................................... 5 5 INSTALACIÓN DE POSTFIX.................................................................................................... 6

5.1 INSTALAMOS SASL PARA AUTENTICACIÓN DE USUARIOS.................................... 6

5.2 CONFIGURACIÓN DE POSTFIX PARA AUTENTICACIÓN CON SASL....................... 8

5.3 AÑADIR TLS A POSTFIX .................................................................................................... 9

5.4 REENVIAR TODO EL CORREO AL EXCHANGE .......................................................... 11

6 FILTRO DE CONTENIDOS PARA POSTFIX....................................................................... 12 6.1 COMO HACER QUE SPAMASSASSIN APRENDA......................................................... 14

7 AÑADIENDO SEGURIDAD A POSTFIX ............................................................................... 17 8 NOTAS......................................................................................................................................... 18

Page 3: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

3/18

1 OBJETIVOS

El objeto del presente documento es detallar la Instalación 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 añadir seguridad de un servidor de correo Exchange

Server publicado en Internet. Para ello instalaremos un sistema de correo más seguro delante del

Exchange que tenga propiedades de firewall, y filtro de contenidos. Estas medias también podrían

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

implantación del sistema serán gratuitas, bajo licencia GNU.

Como requisito imprescindible tendremos el no realizar ninguna modificación en la configuración

de los usuarios para enviar y recibir correo, ni realizar ninguna modificación 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.

Añadiremos seguridad en el envío y recepción de correos con la instalación de un servidor de

certificados que pueda hacer que el intercambio entre el usuario y el servidor de correo se haga a

través de una conexión segura cifrada a través de certificados de servidor.

Nuestro servidor de correo es también nuestro servidor de DNS primario en Internet. Por esto

debemos migrar también 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

poniéndolo como Primario para estas mismas zonas.

Page 4: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

4/18

2 DIAGRAMA DE RED

INTERNET ISP

MAIL: Windows 2000 Server.

Exchange 2000 Server

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.

DMZ

LAN

Peticiones DNS, SMTP, POP3

Peticiones SMTP, POP3

Respuestas SMTP, POP3, IMAP

Respuestas DNS, SMTP, POP3

IP: 10.10.1.20

IP: 10.10.1.1

IP: 192.168.1.9

IP: 192.168.1.104

IP-EXTERNA

Respuestas SMTP, POP3

Peticiones SMTP, POP3, IMAP

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)

ACCEPT net:10.10.1.20 loc:192.168.1.114 udp 389 (ldap a CONTROLADOR DOMINIO)

ACCEPT net:10.10.1.20 loc:192.168.1.114 tcp 3268 (ldap a CONTROLADOR DOMINIO)

Peticiones SMTP, POP3, IMAP

Respuestas SMTP, POP3, IMAP

Page 5: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

5/18

3 INSTALACIÓN DEL SISTEMA

Instalamos el sistema base de Debian 4.0 Etch, sin entorno gráfico ni servidores.

Instalamos los siguientes paquetes necesarios:

- openssh-server

- vsftpd

- libnet-ssleay-perl

- webmin

Cambiamos la configuración de vsftpd (vi /etc/vsftpd.conf):

- anonymous_enable=NO

- local_enable=YES

- write_enable=YES

Cambiamos la configuración de WEBMIN:

- Cambiamos lenguaje: ESPAÑOL

- Configuración de RED:

� nombre máquina: smtp.midominio.com

� IP: 192.168.1.103/24

� GW: 192.168.1.124

Cambiamos las contraseñas por defecto "admin" de root.

4 INSTALACIÓN 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

Page 6: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

6/18

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.

5 INSTALACIÓN DE POSTFIX

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

autenticarnos:

- apt-get install postfix: En la instalación 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 también el soporte TLS. Para ello se instala automáticamente

Openssl y ssl-cert

- probamos que el servidor contesta: telnet smtp.midominio.com 25.

5.1 INSTALAMOS SASL PARA AUTENTICACIÓN DE USUARIOS

Para la autenticación 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 también lo siguiente:

libsasl2-modules-opt

libsasl2-modules-ldap

Page 7: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

7/18

libsasl2-modules-sql

libsasl2-modules--gssapi-mit

Nosotros queremos usar SASL para autenticación 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: [email protected] \\ usuario con permisos de consulta en la BD

ldap_bind_pw: password \\ contraseña del usuario con permisos de lectura en la BD

ldap_version: 3

ldap_search_base: CN=Users,DC=MIDOMINIO,DC=COM

ldap_filter: (&(objectclass=user)(sAMAccountName=%u))

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:

Page 8: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

8/18

4465 ? Ss 0:00 /usr/sbin/saslauthd -a ldap -c -n 5

4466 ? S 0:00 /usr/sbin/saslauthd -a ldap -c -n 5

4467 ? S 0:00 /usr/sbin/saslauthd -a ldap -c -n 5

4468 ? S 0:00 /usr/sbin/saslauthd -a ldap -c -n 5

4469 ? S 0:00 /usr/sbin/saslauthd -a ldap -c -n 5

4486 pts/1 S+ 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. También podemos usar un sniffer en el

controlador de dominio para ver si le están llegando peticiones LDAP.

5.2 CONFIGURACIÓN DE POSTFIX PARA AUTENTICACIÓN CON SASL

Quitamos el CHROOT a postfix para que pueda coger toda la configuración de /etc. Para

editamos el fichero /etc/postfix/master.cf y cambiamos la línea smtp y en el campo chroot ponemos

"n":

#

=================================================== ==========

=============

# service type private unpriv chroot wakeup maxproc command + args

# (yes) (yes) (yes) (never) (100)

#

=================================================== ==========

=============

smtp inet n - n - - smtpd

Revisamos la configuración básica. Para ello utilizamos el comando dpkg-recofigure postfix:

Tipo de servidor: "sitio de Internet".

correo para superusuario: "[email protected]"

Nombre del servidor: "smtp.midominio.com"

Page 9: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

9/18

Redes locales: "127.0.0.0/8 192.168.1.0/24"

entrega local: "usar procmail"

resto de opciones por defecto

Añadimos 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"

Después añadimos el fichero smtpd.conf para que postfix tome el tipo de autenticación:

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

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

y añadimos 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 AÑADIR TLS A POSTFIX

Para añadir seguridad a postfix debemos hacer que el intercambio de credenciales sea seguro.

Para ello se implementará un tunel TLS a través de certificados de Servidor que podremos usar en

cualquier cliente SMTP con soporte SSL:

- creamos el directorio donde se almacenarán las claves y los certificados de servidor:

mkdir /etc/postfix/ssl

Page 10: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

10/18

- 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 pública. 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

Page 11: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

11/18

5.4 REENVIAR TODO EL CORREO AL EXCHANGE

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

vi transport

- Añadimos la siguiente línea:

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 ningún

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 añadir en

/etc/postfix/main.cf:

local_recipient_maps =

Al dejar esta directiva vacía, 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 máquina como a nivel de

dominio. Debe quedar así:

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

Page 12: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

12/18

6 FILTRO DE CONTENIDOS PARA POSTFIX

Una vez que hemos comprobado que funciona correctamente el envío y recepción de correo a a

través de POSTFIX, incluyendo la seguridad (a través de TLS) instalaremos un filtro de contenidos

para evitar el SPAM. Para poder filtrar por contenidos debemos instalar una aplicación 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 parámetros en su fichero de configuración. 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 parámetros del fichero de configuración 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

Page 13: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

13/18

Debemos asegurarnos de que el usuario postfix puede escribir en todos los ficheros de

configuración 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 más. Solamente tenemos que utilizar chown para cambiar el propietario y el grupo

de todos los que nos pida.

Ahora solamente nos queda hacer una modificación en Postfix para que MailScanner pueda

funcionar correctamente. Si observamos en las líneas 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 añadimos:

/^Recived:/ HOLD

- Luego añadimos una línea 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?}.

Page 14: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

14/18

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 instalación vemos que no tenemos usuarios locales.

Todos los usuarios son del EXCHANGE. Por ello nos vamos a crear un usuario que pueda leer un

buzón 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 buzón 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:

Page 15: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

15/18

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 buzón de HAM y lo

envíe a Spamassassin para que aprenda. El script sería:

#!/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 }'`

Page 16: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

16/18

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.

Page 17: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

17/18

7 AÑADIENDO SEGURIDAD A POSTFIX

Vamos a añadirles 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 añadir estas restricciones, abrimos el fichero

/etc/postfix/main.cf y añadimos 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

Page 18: Mail Gateway Corre o Exchange

Mail Gateway para Exchange Server

_____________________________________________________________________________

18/18

8 NOTAS

1: 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 numérico la puntuación 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