mail gateway corre o exchange

Upload: nilber-roberto-benites-moriano

Post on 09-Oct-2015

13 views

Category:

Documents


0 download

TRANSCRIPT

  • MAIL GATEWAY LINUX CON FILTRO ANTISPAM PARA MICROSOFT

    EXCHANGE SERVER

    Juan Jos Lpez - Junio 2007

  • Mail Gateway para Exchange Server

    _____________________________________________________________________________

    2/18

    INDICE

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

    5.1 INSTALAMOS SASL PARA AUTENTICACIN DE USUARIOS.................................... 6 5.2 CONFIGURACIN DE POSTFIX PARA AUTENTICACIN CON SASL....................... 8 5.3 AADIR 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 AADIENDO SEGURIDAD A POSTFIX ............................................................................... 17 8 NOTAS......................................................................................................................................... 18

  • Mail Gateway para Exchange Server

    _____________________________________________________________________________

    3/18

    1 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.

  • 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

  • Mail Gateway para Exchange Server

    _____________________________________________________________________________

    5/18

    3 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.

    4 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

  • 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 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

  • Mail Gateway para Exchange Server

    _____________________________________________________________________________

    7/18

    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: [email protected] \\ usuario con permisos de consulta en la BD ldap_bind_pw: password \\ contrasea 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:

  • 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. 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 # (yes) (yes) (yes) (never) (100) #

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

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

    smtp inet n - n - - smtpd

    Revisamos la configuracin bsica. 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"

  • 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

    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

  • 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 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

  • 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

    - 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

  • Mail Gateway para Exchange Server

    _____________________________________________________________________________

    12/18

    6 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

  • Mail Gateway para Exchange Server

    _____________________________________________________________________________

    13/18

    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?}.

  • 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 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:

  • 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 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 }'`

  • 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.

  • Mail Gateway para Exchange Server

    _____________________________________________________________________________

    17/18

    7 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

  • 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 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