El SysAdmin del 3er Mundo

todo lo que expliqué mientras nadie prestaba atención

tls y ssl en postfix

| Comments

Acá en salud, ahora se están cayendo de la mata y dándose cuenta de los peligroso que son las conexiones planas.

Aún no logro hacerle entender a la gente, la diferencia entre un certificado autofirmado y un certificado emitido por una autoridad de certificación ; pero que más les vamos a pedir, si el certificado de nauta es autofirmado.

De momento con darle la muela del candadito y las letricas verdes en el navegador, van cogiendo algo.

Pero volviendo al tema postfix con SSL. Vamos a crear un certificado autofirmado, por tanto, regla de oro:

el hostname que provees en el certificado, debe ser machear al del servicio

En letra de molde. Si proveemos un certificado autofirmado, para conectarnos a smtp.hcg.sld.cu no puedes decir en el cliente de correo, que el servidor smtp es 192.168.0.1 porque no será válido.

Aún cuando el certificado no sea válido, déjame recodarte que debemos ir haciéndole cultura de seguridad informática, si no… bueno… no me voy a meter en un lío diciendo las barbaridades que se logran suplantando identidades.

Bueno entremos en materia. Lo Primero que haremos será generar la clave privada para el servidor.

Donde dice smtp.tudominio.cu tu pondrás el hostname de que apunta para tu servidor smtp. Si eres un desastre y no tiene DNS. Pon la IP de tu servidor de correo.

REPITO

Donde dice FQDN or YOUR name debe decir la dirección del servidor SMTP. La dirección tal cual la pones en los clientes.

Cuando lo hagas, te pedirá un password.

“generando clave privada del servidor”
1
openssl genrsa -des3 -out smtp.tudominio.cu.key 2048

Ahora creamos el certificado. Te pedirá hasta la talla de calzoncillos que usas. NO respondas a lo locoi, recuerda el FQDN. Te acuerdas del password que pusiste?

“creando el certificado”
1
openssl req -new -key smtp.tudominio.cu.key -out smtp.tudominio.cu.csr

Debes ver algo como esto:

“ceremonia de creación de certificado”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
Enter pass phrase for smtp.tudominio.cu.key:
You are about to be asked to enter information that will be incorporated
into your certificate request.
What you are about to enter is what is called a Distinguished Name or a DN.
There are quite a few fields but you can leave some blank
For some fields there will be a default value,
If you enter '.', the field will be left blank.
-----
Country Name (2 letter code) [AU]:CU
State or Province Name (full name) [Some-State]:Havana
Locality Name (eg, city) []:Plaza
Organization Name (eg, company) [Internet Widgits Pty Ltd]:Calixto
Organizational Unit Name (eg, section) []:Informatica
Common Name (e.g. server FQDN or YOUR name) []:smtp.tudominio.cu
Email Address []:ssl@tudominio.cu

Bites verdad? Bueno, ya hicimos lo más importante, pero no hemos terminado. Vamos a firmar el certificado con la la llave emisora.

“cri-cra firmando el certificado”
1
openssl x509 -req -days 365 -in smtp.tudominio.cu.csr -signkey smtp.tudominio.cu.key -out smtp.tudominio.cu.crt

Ahora vamos a dar un paso cuestionable.

Cada vez que un servicio con con un certificado SSL valla a ser iniciado. Debería pedir un password, para así asegurar que el legítimo operador de servicio ha sido quien le dio la arrancada. Pero poner un password cada vez que arranca postfix, no es ninguna gracia. Por tanto, quitamos el password. Obviamente, te lo pedirá una última vez.

“quitando el password”
1
2
openssl rsa -in smtp.tudominio.cu.key -out smtp.tudominio.cu.key.sinpassword
mv smtp.tudominio.cu.key.sinpassword smtp.tudominio.cu.key

Emitimos una autoridad de raíz (de pacotilla)

“la CA del chiste”
1
2
openssl req -new -x509 -extensions v3_ca -keyout cakey.pem -out cacert.pem -days 3650
# aqui te pedirá la misma rutina, ojo con lo que pones en el campo FQDN or YOUR name

Bueno, con el disi y con el mulo, ya tenemos una CA loca, que la podemos reusar para otros servicios, por tanto, tratemosla como tal.

“los puntos sobre las ies”
1
2
3
4
5
6
chmod 600 smtp.tudominio.cu.key
chmod 600 cakey.pem
mv smtp.tudominio.cu.key /etc/ssl/private/
mv smtp.tudominio.cu.crt /etc/ssl/certs/
mv cakey.pem /etc/ssl/private/
mv cacert.pem /etc/ssl/certs/

Ahora viene el turno de postfix. Haremos dos cosas

  • habilitar el tranporte ssl/tls por el puerto 465
  • habilitar las funciones ssl

Ve al master.cf y busca la cadena de texto smtps debes ver algo como esto:

“parte del master.cf ANTES”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
smtp      inet  n       -       -       -       -       smtpd
#smtp      inet  n       -       -       -       1       postscreen
#smtpd     pass  -       -       -       -       -       smtpd
#dnsblog   unix  -       -       -       -       0       dnsblog
#tlsproxy  unix  -       -       -       -       0       tlsproxy
#submission inet n       -       -       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#smtps     inet  n       -       -       -       -       smtpd
#  -o syslog_name=postfix/smtps
#  -o smtpd_tls_wrappermode=yes
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       -       -       -       qmqpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup

Descomentamos todo lo que tenga que ver con smtps debe quedarte más o menos así:

“parte del master.cf DESPUES”
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
smtp      inet  n       -       -       -       -       smtpd
#smtp      inet  n       -       -       -       1       postscreen
#smtpd     pass  -       -       -       -       -       smtpd
#dnsblog   unix  -       -       -       -       0       dnsblog
#tlsproxy  unix  -       -       -       -       0       tlsproxy
#submission inet n       -       -       -       -       smtpd
#  -o syslog_name=postfix/submission
#  -o smtpd_tls_security_level=encrypt
#  -o smtpd_sasl_auth_enable=yes
#  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
#  -o milter_macro_daemon_name=ORIGINATING
smtps     inet  n       -       -       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING
#628       inet  n       -       -       -       -       qmqpd
pickup    fifo  n       -       -       60      1       pickup
cleanup   unix  n       -       -       -       0       cleanup

Ahora trabajemos con el main.cf, habilitamos las funciones que tengan que ver con SSL, declarando esto:

“tope del main.cf”
1
2
3
4
5
6
smtpd_use_tls = yes
smtpd_tls_auth_only = no
smtpd_tls_key_file = /etc/ssl/private/smtp.tudominio.cu.key
smtpd_tls_cert_file = /etc/ssl/certs/smtp.tudominio.cu.crt
smtpd_tls_CAfile = /etc/ssl/certs/cacert.pem
tls_random_source = dev:/dev/urandom

No olvides correr postfix reload

Te voy a coser el culo con un alambre finito.
No te quedará bonito, pero te quedará seguro.

Décima popular

Si este artículo te resultó interesante, considere donar 0.003 BTC: 1LgL9cfT2StNk9gdedMJZseMnKJCEgQJdQ

Comments