Posts tagged with “postfix”


Sun 22 Aug

MailScanner, instalación rápida

La filosofía Unix es disponer de pequeñas herramientas que hagan cosas simples, pero que las hagan bien y de forma segura. Uniendo las funcionalidades de las diferentes herramientas podemos conseguir un sistema funcional y con múltiples características donde el único límite es nuestro conocimiento. En los servidores de correos hay 3 elementos indispensables. MTA, AntiSpam y Antivirus. Para cada servicio existe una aplicación, pero hacerlas funcionar en conjunto no suele ser sencillo la primera vez.

MailScanner nos va a ayudar a unir nuestro AntiSpam y Antivirus con el MTA, creando de esta forma un servicio de correo estable y seguro. Este es un pequeño manual que nos guiará en los pasos básicos para tener funcionando Postfix + MailScanner (Spamassassin + Clamav).

Instalación

apt-get install mailscanner clamav unrar zip spamc razor pyzor

Muy complicado…

Configuración

Paramos el servicio de postfix con /etc/init.d/postfix stop. Es importante que postfix corra enjaulado en /var/spool/postfix, si no, habrá que meterlo.

Editamos /etc/postfix/main.cf y añadimos la siguiente línea:

header_checks = regexp:/etc/postfix/header_checks

Dicho fichero debe tener el siguiente contenido:

/^Received:/ HOLD 

Su finalidad es sencilla de entender. Con esas líneas le indicamos a postfix que los correos los deje en la cola HOLD. Mailscanner recogerá los correos de la cola, les pasará antivirus y antispam para terminar dejándolos en Incoming, donde postfix terminará de entregarlo.

Dentro de /etc/MailScanner/MailScanner.conf se deben cambiar como mínimos estas líneas:

%report-dir% = /etc/MailScanner/reports/es
Run As User = postfix
Run As Group = postfix
Incoming Queue Dir = /var/spool/postfix/hold
Outgoing Queue Dir = /var/spool/postfix/incoming
MTA = postfix

Por último enviamos editamos el /etc/default/mailscanner:

run_mailscanner=1

Y ya podemos arrancar mailscanner con /etc/init.d/mailscanner start

¡Importante! Al intentar arrancar mailscanner te dirá que directorios no tiene los permisos correctos. Esto es así porque mailscanner correrá como usuario postfix, por lo tanto todas las carpetas donde sea necesario escribir y eliminar fichero deberán tener como propietario a postfix.

Pruebas

Para enviar un mail que sea detectado como virus debe contener el siguiente texto en el cuerpo:

X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*

Este será el resultado:

Jan  3 17:36:36 dominioirontec MailScanner[21784]: Virus and Content Scanning: Starting 
Jan  3 17:37:27 dominioirontec MailScanner[21784]: /var/spool/MailScanner/incoming/21784/
./9A0989A81D8.80660/msg-21784-1.txt: Eicar-Test-Signature FOUND 
Jan  3 17:37:27 dominioirontec MailScanner[21784]: Virus Scanning: ClamAV found 1 infections 
Jan  3 17:37:27 dominioirontec MailScanner[21784]: Infected message 9A0989A81D8.80660 came from 127.0.0.1 
Jan  3 17:37:27 dominioirontec MailScanner[21784]: Virus Scanning: Found 1 viruses 

De la misma forma, para que sea detectado como Spam debe tener el siguiente texto en el cuerpo:

XJSC4JDBQADN1.NSBN32IDNENGTUBE-STANDARD-ANTI-UBE-TEST-EMAILC.34X

Este será el resultado:

Jan  3 17:55:56 dominioirontec MailScanner[21784]: Spam Checks: Found 1 spam messages 


Sun 15 Aug

Recetas de Postfix

Algunos trucos y consejos que siempre viene bien tener a mano :)

Habilitar uso de TLS

# TLS parameters
smtpd_tls_cert_file=/etc/postfix/ssl/smtpd.pem
smtpd_tls_key_file=/etc/postfix/ssl/smtpd.pem
smtpd_tls_CAfile=/etc/postfix/ssl/smtpd.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

Para crear el certificado usamos el comando:

openssl req -new -x509 -nodes -out smtpd.pem -keyout smtpd.pem -days 3650

Activar chequeo de listas negras

smtpd_client_restrictions =
  permit_mynetworks
  permit_sasl_authenticated
# Activa chequeo de PTR
  reject_unknown_client
# Seleccionamos las listas negras a usar
  reject_rbl_client xbl.spamhaus.org
  reject_rbl_client sbl.spamhaus.org
  reject_rbl_client list.dsbl.org
# Mensaje de error que se enviará si el emisor se encuentra en listas negras
default_rbl_reply = $rbl_code Service unavailable; $rbl_class [$rbl_what] blocked using $rbl_domain.

Es recomendable realizar los chequeos de listas negras en el propio postfix, desactivándolos en el spamassasin. De esta forma evitamos cargar aún más el sistema analizando correos que casi en un 99% serán spam.

Cambiar la dirección del remitente

Se hace mediante los llamados smtp_generic_maps. El cambio únicamente se realizará en la salida de los correos. Se crea el fichero generics:

/etc/postfix/generic:
root@localdomain.local otrocorreo@miguelangelnieto.net

Se crea la base de datos a partir del fichero con:

postmap /etc/postfix/generic

Por último se configura main.cf para que use los generic_maps.

smtp_generic_maps = hash:/etc/postfix/generic

Se reinicia postfix y ya debería funcionar. Más información en:

http://www.postfix.org/postconf.5.html#smtp_generic_maps

http://www.postfix.org/generic.5.html

Si queremos también en entrada usaremos las direcciones canónicas que se verán más abajo.

Utilizar distintos relays dependiendo del destino

Se hace mediante los transport. Creamos /etc/postfix/transport con los siguientes datos:

primero@miguelangelnieto.net smtp:[85.112.9.44]:25
segundo@irontec.com smtp:[82.194.75.72]:25
tercero@google.com smtp:gmail.com

Creamos la base de datos con:

postmap /etc/postfix/transport

Configuramos main.cf para que use los transports:

transport_maps = hash:/etc/postfix/transport

Comprobar las direcciones de destino

Con esta solución, postfix comprobará que las direcciones de destino existen realmente. Si no existen rechazará la recepción del correo.

Primero se debe crear un fichero con las direcciones de correo válidas para el sistema. Su sintaxis es la siguiente:

prueba@dominioirontec.local OK
prueba2@dominioirontec.local OK
admin@dominioirontec.local OK

Dicho fichero, una vez completado, debemos convertirlo en una base de datos con postmap.

En main.cf las opciones son las siguientes:

# Restricciones de la vida para direcciones externas (para las que se hará relay)
relay_recipient_maps = hash:/etc/postfix/valid_recipients
# Restricciones de la vida para direcciones locales (sin relay)
local_recipient_maps = hash:/etc/postfix/valid_recipients

Direcciones Canonicas

Una dirección canónica es la dirección de correo electronico con la que se termina enviando un email.

De esta forma, si cuando enviamos un email con la dirección de remitente usuario@dominio y este tiene una dirección canónica luser@hotmail.com, la dirección de remitente se reescribirá por esta última.

Para ello creamos un fichero /etc/postfix/sender_canonical donde se guardan las direcciones canónicas con el siguiente formato:

usuario luser@hotmail.com

Dicho fichero lo postmapeamos y añadimos a /etc/postfix/main.cf:

sender_canonical_maps = hash:/etc/postfix/sender_canonical

Esto también se aplicará a los correos que recibamos.

Maildrop

Programa utilizado para entregar el correo a distintas carpetas según unos filtros definidos. Su fichero de configuración se encuentra en /etc/maildroprc

Para que postfix haga uso de el es necesario configurar main.cf poniendo la siguiente opción:

mailbox_command = /usr/bin/maildrop -d $USER -f $SENDER

En el ejemplo que pegaré a continuación se definen una serie de acciones teniendo en cuenta el las cabeceras o destinatarios del correo.

# Global maildrop filter file

# Uncomment this line to make maildrop default to ~/Maildir for # delivery- this is where courier-imap (amongst others) will look. DEFAULT="$HOME/Maildir" # Si el correo es spam lo movemos # a la carpeta de spam y lo aprendemos. \if (/^X-Spam-Flag: YES/) { cc "|/usr/bin/sa-learn --spam" to "Maildir/.Spam" } if (/^Delivered-To: ebay@midominio.net/) { cc "|/usr/bin/sa-learn --ham" to "Maildir/.Ebay" } if (/^Delivered-To: curriculum@midominio.net/) { cc "|/usr/bin/sa-learn --ham" to "Maildir/.Curriculum" } # El resto lo aprendemos como correo NO spam # y lo dejamos en nuestro INBOX. cc "|/usr/bin/sa-learn --ham" to "Maildir"


Thu 8 Jul

Postfix TLS con múltiples certificados

Cuando hablamos de TLS o SSL siempre nos encontramos con el mismo problema, el certificado. Este debe ser único por puerto e IP, de forma que dependiendo de a donde se conecte el cliente le entregamos un certificado u otro acorde a su dominio. Esto es algo con lo que tenemos que pelear constantemente en Apache, creando un VirtualHost por cada IP y asignándole un certificado.

Postfix no se libra y también necesitamos una IP por certificado, de forma que a cada cliente le muestre el certificado de su dominio y nos evitemos los famosos warning. Para hacerlo en primer lugar es necesario tener una IP por cada dominio. Una vez completado ese simple requisito pasamos a configurar Postfix. Primero ponemos TLS a nivel global en Postfix dentro del main.cf:

#TLS
smtpd_use_tls = yes
smtpd_tls_key_file = /etc/ssl/dominio1.com.key 
smtpd_tls_cert_file = /etc/ssl/dominio1.com.crt 
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
tls_random_source = dev:/dev/urandom

Ahora tenemos que hacer que Postfix arranque un proceso smtpd por cada una de las IPs/Dominios. Esto lo hacemos en el master.cf. Al mismo tiempo que indicamos la IP, también le indicamos el certificado que usará:


#==========================================================================
# service type  private unpriv  chroot  wakeup  maxproc command + args
#               (yes)   (yes)   (yes)   (never) (100)
#==========================================================================
10.10.10.1:smtp      inet  n       -       -       -       -       smtpd
127.0.0.1:smtp      inet  n       -       -       -       -       smtpd
10.10.20.1:smtp inet    n   -   -   -   -   smtpd
  -o smtpd_tls_cert_file=/etc/ssl/dominio2.com.crt
10.10.30.1:smtp    inet    n       -       -       -       -       smtpd
  -o smtpd_tls_cert_file=/etc/ssl/dominio3.com.crt
10.10.40.1:smtp    inet    n       -       -       -       -       smtpd
  -o smtpd_tls_cert_file=/etc/ssl/dominio4.com.crt

Listo, en cada IP entregará un certificado :)

· Tags: , ,

Mon 4 Jan

Desactivar el Fixup Smtp de Cisco

Si tienes un firewall Cisco entre tu red y el resto del mundo, tendrás problemas con los correos salientes. Por ejemplo, hacer algo tan simple como un relay de tu smtp interno a uno externo no funcionará. Si tienes postfix, este será el mensaje que verás en el log:

postfix/smtp: enabling PIX workarounds: disable_esmtp delay_dotcrlf for ironmail.irontec.com:25

La solución es ejecutar lo siguiente en el Cisco:

en
conf t
no fixup smtp
^Z
wr mem

El origen de este problema es el uso de un Firewall Cisco bugeado:

smtp_pix_workarounds (default: disable_esmtp, delay_dotcrlf)

A list that specifies zero or more workarounds for CISCO PIX firewall bugs. These workarounds are implemented by the Postfix SMTP client. Workaround names are separated by comma or space, and are case insensitive. This parameter setting can be overruled with per-destination smtp_pix_workaround_maps settings.

delay_dotcrlf

Insert a delay before sending "." after the end of the message content. The delay is subject to the smtp_pix_workaround_delay_time and smtp_pix_workaround_threshold_time parameter settings.

disable_esmtp

Disable all extended SMTP commands: send HELO instead of EHLO. This feature is available in Postfix 2.4 and later. The default settings are backwards compatible with earlier Postfix versions.

· Tags: , , ,