Probando postfix en Centos 5.5 Parte 3

*.Vamos a dar el siguiente paso que es configurar TLS para postfix.*

En la parte 2 configuramos nuestra CA y nuestros certificados en donde ya lo firmamos para poder empezar a trabajar.

Nuestro certificado de CA quedo en /etc/CA/cacert.pem

Vamos a crear un directorio para poner nuestros certificados firmados.

[root@mail CA]# mkdir /etc/postfix/tls
[root@mail CA]# cp /root/mail.villadalmine.com.cert /etc/postfix/tls/
[root@mail CA]# cp /root/mail.villadalmine.com.key /etc/postfix/tls/
[root@mail CA]# cp /etc/CA/cacert.pem /etc/postfix/tls/
[root@mail CA]#

Ahora que ya configuramos nuestras rutas de certificados, vamos a configurar el postfix para que haga uso de ellos y active TLS.

[root@mail CA]# mkdir /etc/postfix/tls
[root@mail CA]# cp /root/mail.villadalmine.com.cert /etc/postfix/tls/
[root@mail CA]# cp /root/mail.villadalmine.com.key /etc/postfix/tls/
[root@mail CA]# cp /etc/CA/cacert.pem /etc/postfix/tls/
[root@mail CA]# postconf -e "smtp_tls_security_level=may"
[root@mail CA]# postconf -e "smtpd_tls_security_level=may"
[root@mail CA]# postconf -e "smtpd_tls_key_file=/etc/postfix/tls/mail.villadalmine.com.key"
[root@mail CA]# postconf -e "smtpd_tls_cert_file=/etc/postfix/tls/mail.villadalmine.com.cert"
[root@mail CA]# postconf -e "smtpd_tls_CAfile=/etc/postfix/tls/cacert.pem"
[root@mail CA]# postconf -e "smtpd_tls_loglevel=1"
[root@mail CA]# postconf -e "smtpd_tls_received_header=yes"
[root@mail CA]# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]
[root@mail CA]#

Ahora veamos si TLS esta andando en nuestro server

[root@mail CA]# nc mail.villadalmine.com 25
220 mail.villadalmine.com ESMTP Postfix
ehlo villadalmine.com
250-mail.villadalmine.com
250-PIPELINING
250-SIZE 10240000
250-VRFY
250-ETRN
250-STARTTLS
250-ENHANCEDSTATUSCODES
250-8BITMIME
250 DSN
STARTTLS # escribimos eso y vemos que nos responde.
220 2.0.0 Ready to start TLS

Como vemos postfix nos responde que ya tenemos TLS para iniciar una conexion encriptada.
Tengan encuenta solo se van a encriptar cuando el servidor destino tambien soporta encriptacion.

Ahora tendriamos que configurar nuestro parametro mynetworks en /etc/postfix/main.cf para que solo acepte conexiones desde nuestra red para que no funcione como un open-relay.(retransmision abierta)
Un open relay permite a cualquiera enviarle un correo y a la inversa. Los spammers hacen un amplio uso de los open-relays para contaminar internet con correos no deseados..y lo demas ya lo saben ..

Hay que tener cuidado con los open relay porque sino lo configuramos como se debe podemos entrar en una lista negra en donde aƱaden nuestra ip para que nadie mas pueda aceptar mails desde ese origen.
Para verificar esto pueden usar www.abuse.net/relay.html

La configuracion por defecto que viene con postfix nos evita que funcione de esta manera pero nos va a traer otras complicaciones. Dado que cualquier que este dentro de la red nuestra o tome una ip del rago dado puede utilizar nuestro servidor como open relay.
Tambien genera un problema para aquellas personas que se conectan desde afuera de nuestra red ya sea por celulares o porque trabajan de sus casas y es por eso que tendran que usar un servidor de su proveedor que le permita retransmisiones o sino entrar por medio de la vpn a su trabajo.
Ahora gracias a la auntentificacion los usuarios podran enviar correo desde cualquier parte siempre que esten autentificados.

SMTL AUTH Y SASL

La autentificacion para los servidores de correo la proporciona un mecanismo llamado SMTP AUTH en donde otro comando STMP solicita a los usuarios una clave y usuario.
Estos usuarios y claves se pueden pasar de varias formas ya sea encriptado o en texto plano o tambien pueden ser tokens.
Para corrobrar que las credenciales son validas el comando AUTH emplea un entorno de autentificacion llamado SASL (SImple AUthentication and Security Layer).
Es muy parecio a PAM en el sentido que abstrae la autentificacion dado que nos permite ocultar varios tipos de autentificacion detras de SASL.
Lo que querra decir que el servidor de correo puede verificar varios servicios de administracion para validar que el usuario tiene permiso para enviar correo sin necesidad de entender como se autentican dichos servicios.
Estos servicios pueden incluir PAM (lo quehace que se auntentiquen con los usuarios del sistema), u otro metodo .
Postfix no tiene SASL incorporado por lo cual va a hacer uso de otras aplicaciones para integrarlo y es por eso que vamos a utilizar dovecot.
Para corroborar que postfix lo soporte.

[root@mail ~]# postconf -a
cyrus
dovecot
[root@mail ~]#

*.Vamos a a configurar nuestro dovecot para que soporte SASL.*

Editamos el archivo /etc/dovecot.conf

Para eso vamos a configurar la parte de auth default.

esta es la seccion que tendriamos que llenar

[root@mail ~]# sed '/#/d' /etc/dovecot.conf |sed '/^$/d'
protocol imap {
}

protocol pop3 {
}
protocol lda {
  postmaster_address = postmaster@example.com
}
auth default {
  mechanisms = plain
  passdb pam {
  }
  userdb passwd {
  }
  user = root
}
dict {
}
plugin {
}
[root@mail ~]#

Esa seccion la tienen vacia y la tenemos que llenar con esta config quedandole todo el archivo de configuracion asi:

[root@mail ~]# sed '/#/d' /etc/dovecot.conf |sed '/^$/d'
protocol imap {
}

protocol pop3 {
}
protocol lda {
  postmaster_address = postmaster@example.com
}
auth default {
  mechanisms = plain login
  passdb pam {
  }
  userdb passwd {
  }
  user = root
  socket listen {
    client {
      path = /var/spool/postfix/private/auth
      mode = 0660
      user = postfix
      group = postfix
       }
    }
}
dict {
}
plugin {
}
[root@mail ~]#

Ahora describamos un poco que fue lo que hicimos..

El servicio auth va a contener una coleccion de directivas que van entre {}.

La directiva mechanisms indica los mecanismos de autentificacion que acepta.
Por defecto siempre viene PLAIN (usuarios y claves texto plano)
LOGIN es uno de los tantos mecanimos que existen para autentificacion ( CRAM-MD5,DIGEST-MDG,NTLM,GSSAPI,ANONYMOUS,OTP,SKEY).
Para mas info –> http://en.wikipedia.org/wiki/Comparison_of_e-mail_clients#Authentication_support
La siguente passdb pam es la que me permite aunteticar los usuarios contra mi sistema operativo y para eso utiliza un archivo especial en /etc/pam.d/dovecot.

[root@mail ~]# cat /etc/pam.d/dovecot
#%PAM-1.0
auth       required     pam_nologin.so
auth       include      system-auth
account    include      system-auth
session    include      system-auth
[root@mail ~]#

Para mas info acerca como funciona dovecto con Pam
http://wiki.dovecot.org/PasswordDatabase y httpd://wiki.dovecot.org/PasswordDatabase/PAM

La que sigue userdb passwd realiza una busqueda en mis archivos de sistema para poder tener el UID y GID. Para mas info
http://wiki.dovecot.org/UserDatabase

La ultima que nos queda es socket que esta relacionada a la conexion que se realiza entre postfix y dovecot.Este escucha las peticiones de autentificacion de postfix y luego devuele los resultados.
El parametro path me indica donde va estar el archivo que va a ser de tipo socket que permite la comunicacion entre las dos aplicaciones.
Las ultimas que siguen son los permisos que va a manejar la conexion socket.

Luego reiniciamos el servicio dovecot:

[root@mail ~]# service dovecot restart
Stopping Dovecot Imap:                                     [FAILED]
Starting Dovecot Imap:                                     [  OK  ]
[root@mail ~]# ls  -l /var/spool/postfix/private/auth
srw-rw---- 1 postfix postfix 0 Sep 24 18:47 /var/spool/postfix/private/auth
[root@mail ~]#
[root@mail ~]# ps -A |grep 'dovecot'
 4323 ?        00:00:00 dovecot
 4325 ?        00:00:00 dovecot-auth
[root@mail ~]# tail -f /var/log/maillog
Sep 24 18:47:43 mail dovecot: Dovecot v1.0.7 starting up

Ya podemos ver que esta andando, tenemos le archivo con el socket, tenemos el proceso de auth corriendo y en el log vemos que esta arriba dovecot.

*.Configuremos Postfix para SASL.*
Vamos agregar estas lineas a nuestro main.cf

[root@mail ~]# postconf -e “smtpd_sasl_type=dovecot”
[root@mail ~]# postconf -e “smtpd_sasl_path=private/auth”
[root@mail ~]# postconf -e “smtpd_sasl_auth_enable=yes”
[root@mail ~]# postconf -e “smtpd_tls_auth_only=yes”
[root@mail ~]# postconf -e “smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination”
[root@mail ~]#

Veamos cada uno de estos:
smtpd_sasl_type=dovecot: especifica que estamos usando dovecot para autenticar con SASL.
smtpd_sasl_path=private/auth : la ubicacion de donde va estar nuestro socket (path relativo al spool de postfix)
smtpd_sasl_auth_enable=yes : activa la autenticacion SASL
smtpd_tls_auth_only=yes : solo activa autenticacion si TLS esta activo y en ejecucion. (se activo mediante STARTTLS)
smptd_recipient_restrictions : es una lista de restricciones de postfix quees lo que tiene que denegar o aceptar en una conexion.
permit_mynetworks : solo aquellos de mi red
permit_sasl_authenticated : acepta correo de usuarios autenticados por SASL
reject_unauth_destination: esta ultima rechaza todo lo que no cumpla con lo anterior.
Si quieren ver mas acerca de las restricciones:
http://www.postfix.org/postconf.5.html#smtpd_recipient_restrictions

Reiniciamos :

[root@mail ~]# service postfix restart
Shutting down postfix:                                     [  OK  ]
Starting postfix:                                          [  OK  ]
[root@mail ~]#

Ahora tendriamos que probar nuestro servidor de correo para ver si puede realizar una conexion cifrada, para eso vamos a utilizar otra herramienta que se llama swaks.

[root@mail opt]# wget http://jetmore.org/john/code/swaks/latest/swaks
--2010-09-25 00:05:18--  http://jetmore.org/john/code/swaks/latest/swaks
Resolving jetmore.org... 208.97.177.64
Connecting to jetmore.org|208.97.177.64|:80... connected.
HTTP request sent, awaiting response... 200 OK
Length: 111264 (109K) [text/plain]
Saving to: `swaks'

100%[========================================================>] 111,264     16.0K/s   in 6.8s    

2010-09-25 00:05:31 (16.0 KB/s) - `swaks' saved [111264/111264]

[root@mail opt]# chmod u+x swaks
[root@mail opt]#

Tambien tenemos que instalar estos paquetes:
[root@mail opt]# yum install perl-Digest-SHA1 perl-Digest-HMAC perl-Net-IP perl-Net-DNS perl-Net-SSLeay

Ahora vamos a ver como enviamos un mail :

[root@mail opt]# ./swaks  -tls -a -au juan -ap juan -t pepe@dalmine.com -f juan@dalmine.com
=== Trying mx1.interac.it:25...

[root@mail opt]# ./swaks  -tls -a -au juan -ap juan -t pepe@villadalmine.com -f juan@villadalmine.com
=== Trying mail.villadalmine.com:25...
=== Connected to mail.villadalmine.com.
<-  220 mail.villadalmine.com ESMTP Postfix
 -> EHLO mail.villadalmine.com
<-  250-mail.villadalmine.com
<-  250-PIPELINING
<-  250-SIZE 10240000
<-  250-VRFY
<-  250-ETRN
<-  250-STARTTLS
<-  250-ENHANCEDSTATUSCODES
<-  250-8BITMIME
<-  250 DSN
 -> STARTTLS
<-  220 2.0.0 Ready to start TLS
=== TLS started w/ cipher DHE-RSA-AES256-SHA
=== TLS peer subject DN="/C=AR/ST=BSAS/O=ITRESTAURACION/CN=mail.villadalmine.com/emailAddress=postmaster@villadalmine.com"
 ~> EHLO mail.villadalmine.com
<~  250-mail.villadalmine.com
<~  250-PIPELINING
<~  250-SIZE 10240000
<~  250-VRFY
<~  250-ETRN
<~  250-AUTH PLAIN LOGIN
<~  250-ENHANCEDSTATUSCODES
<~  250-8BITMIME
<~  250 DSN
 ~> AUTH LOGIN
<~  334 VXNlcm5hbWU6
 ~> anVhbg==
<~  334 UGFzc3dvcmQ6
 ~> anVhbg==
<~  235 2.0.0 Authentication successful
 ~> MAIL FROM:
<~  250 2.1.0 Ok
 ~> RCPT TO:

<~  250 2.1.5 Ok
 ~> DATA
<~  354 End data with .
 ~> Date: Sat, 25 Sep 2010 00:27:35 -0300
 ~> To: pepe@villadalmine.com
 ~> From: juan@villadalmine.com
 ~> Subject: test Sat, 25 Sep 2010 00:27:35 -0300
 ~> X-Mailer: swaks v20100211.0 jetmore.org/john/code/swaks/
 ~>
 ~> This is a test mailing
 ~>
 ~> .
<~  250 2.0.0 Ok: queued as 5040158551
 ~> QUIT
<~  221 2.0.0 Bye
=== Connection closed with remote host.
[root@mail opt]#

Ahora vemos como pepe ya tiene su email:

[root@mail new]# ls -la
total 32
drwx—— 2 pepe pepe 4096 Sep 25 00:27 .
drwx—— 9 pepe pepe 4096 Sep 18 22:52 ..
-rw——- 1 pepe pepe 587 Sep 18 23:03 1284861837.Vfd00I112aaM55067.mail
-rw——- 1 pepe pepe 597 Sep 25 00:27 1285385256.Vfd00I112adM446416.mail.villadalmine.com
[root@mail new]#
Las opciones que usamos fueron -tls para que active la encriptacion.
-a activa autenticacion.
-au usuario
-ap password
-t y -f quien recibe y quien envia.
Si analizan lo que hizo el comando van a ver que se inicia una conexion cifrada y se invoca al comando AUTH.

Si miramos los logs

Sep 25 00:32:11 mail postfix/smtpd[3921]: connect from ns1.villadalmine.com[172.16.31.140]
Sep 25 00:32:11 mail postfix/smtpd[3921]: setting up TLS connection from ns1.villadalmine.com[172.16.31.140]
Sep 25 00:32:11 mail postfix/smtpd[3921]: TLS connection established from ns1.villadalmine.com[172.16.31.140]: TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
Sep 25 00:32:11 mail postfix/smtpd[3921]: 5862C58551: client=ns1.villadalmine.com[172.16.31.140], sasl_method=LOGIN, sasl_username=juan
Sep 25 00:32:11 mail postfix/cleanup[3928]: 5862C58551: message-id=<20100925033211.5862C58551@mail.villadalmine.com>
Sep 25 00:32:11 mail postfix/qmgr[3918]: 5862C58551: from=, size=499, nrcpt=1 (queue active)
Sep 25 00:32:11 mail postfix/smtpd[3921]: disconnect from ns1.villadalmine.com[172.16.31.140]
Sep 25 00:32:11 mail postfix/local[3929]: 5862C58551: to= , relay=local, delay=0.11, delays=0.08/0.02/0/0.02, dsn=2.0.0, status=sent (delivered to maildir)
Sep 25 00:32:11 mail postfix/qmgr[3918]: 5862C58551: removed

No se olviden de especificar esto en su main.cf
mynetworks = 127.0.0.0/8, 172.16.31.0/24, 192.168.0.0/24
para decirle de que red pueden recibir y enviar mails.

Con esto terminamos ya esta parte, la que sigue vamos a explicar como configurar postfix con imap con squirrel.

3 thoughts on “Probando postfix en Centos 5.5 Parte 3

Leave a Reply