You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

14 KiB

title date draft
Práctica: Servidor de correos 2023-02-07T01:57:14+01:00 false

Gestión de correo desde el servidor

Tarea 1

Documenta una prueba de funcionamiento, donde envíes desde tu servidor local al exterior. Muestra el log donde se vea el envío. Muestra el correo que has recibido. Muestra el registro SPF.

Creo las siguientes entradas en el DNS de mi dominio:

MX

Donde hay un registro MX que apunta a mail.admichin.es, que a su vez es un registro A que apunta a la IP de mi servidor. Además, hay un registro SPF que apunta a la ip de la máquina.

Además, configuro resolución inversa en la configuración de la VPS:

Reverse

Ahora, en la VPS instalo los siguientes paquetes:

apt update
apt install postfix bsd-mailx -y

Durante la configuración, selecciono Internet Site y admichin.es.

Envío un correo a mi cuenta personal:

mail robertorodriguezmarquez98@gmail.com
Subject: Prueba de funcionamiento
Hola buenos días
Cc:

Vemos el log de postfix:

tail /var/log/mail.log

Log

Y el correo recibido:

Correo

Tarea 2

Documenta una prueba de funcionamiento, donde envíes un correo desde el exterior (gmail, hotmail,…) a tu servidor local. Muestra el log donde se vea el envío. Muestra cómo has leído el correo. Muestra el registro MX de tu dominio.

Ahora envío un correo desde mi cuenta personal a mi servidor:

Correo

Y compruebo que el correo ha llegado a mi servidor:

Correo Correo

Y el log de postfix:

Log

Uso de alias y redirecciones

Tarea 3

Usos de alias y redirecciones. Vamos a comprobar como los procesos del servidor pueden mandar correos para informar sobre su estado. Por ejemplo cada vez que se ejecuta una tarea cron podemos enviar un correo informando del resultado. Normalmente estos correos se mandan al usuario root del servidor, para ello:

 crontab -e

E indico donde se envía el correo:

MAILTO=root

Puedes poner alguna tarea en el cron para ver como se mandan correo.

Posteriormente usando alias y redirecciones podemos hacer llegar esos correos a nuestro correo personal.

Configura el cron para enviar correo al usuario root. Comprueba que están llegando esos correos al root. Crea un nuevo alias para que se manden a un usuario sin privilegios. Comprueban que llegan a ese usuario. Por último crea una redirección para enviar esos correo a tu correo personal (gmail,hotmail,…).

Voy a crear un script que muestre la fecha y el espacio en el disco. Lo guardo en /root/script-espacio.sh:

#!/bin/bash

echo "##################################"
echo "Fecha y hora: $(date)"
echo "##################################"
echo "Espacio en el disco:"
df -h

Ahora creamos la tarea de cron para que se ejecute cada 5 minutos:

crontab -e

Y añadimos las siguientes líneas:

MAILTO = root

*/5 * * * * /root/script-espacio.sh

Cuando pasan 5 minutos, recibimos el correo:

Correo

Ahora voy a crear un alias para que se envíen los correos a un usuario sin privilegios (en este caso, calcetines), editando el fichero /etc/aliases:

root: calcetines

Y ejecuto el comando newaliases para que se actualicen los alias.

Ahora, cuando pasen 5 minutos, recibimos el correo en el usuario sin privilegios:

Correo

Ahora voy a crear una redirección para que se envíen los correos a mi correo personal, editando el fichero /home/calcetines/.forward:

robertorodriguezmarquez98@gmail.com

Y ahora, cuando pasen 5 minutos, recibimos el correo en mi correo personal:

Correo

Para asegurar el envío

Tarea 4

Configura de manera adecuada DKIM es tu sistema de correos. Comprueba el registro DKIM en la página https://mxtoolbox.com/dkim.aspx. Configura postfix para que firme los correos que envía. Manda un correo y comprueba la verificación de las firmas en ellos. }

Voy a instalar el paquete opendkim:

apt install opendkim opendkim-tools -y

En el fichero /etc/opendkim.conf, edito las siguientes líneas:

Domain                  admichin.es
Selector                default
KeyFile                 /etc/opendkim/keys/admichin.es/default.private
#Socket                 local:/run/opendkim/opendkim.sock
Socket                  local:/var/spool/postfix/opendkim/opendkim.sock
PidFile                 /run/opendkim/opendkim.pid
TrustAnchorFile         /usr/share/dns/root.key

Ahora añado el socket en el fichero /etc/default/opendkim.

Tras eso, en el fichero /etc/postfix/main.cf, añado las siguientes líneas:

milter_default_action = accept
milter_protocol = 6
smtpd_milters = local:opendkim/opendkim.sock
non_smtpd_milters = $smtpd_milters

Ahora genero los ficheros de claves:

mkdir /etc/opendkim/keys/admichin.es
cd /etc/opendkim/keys/admichin.es
opendkim-genkey -b 2048 -d admichin.es -D /etc/opendkim/keys/admichin.es -s default -v

Ahora, utilizando el contenido de /etc/opendkim/keys/admichin.es/default.txt, añado un registro TXT en el dominio admichin.es:

Registro

Reinicio los servicios:

systemctl restart opendkim postfix

Ahora, cuando envío un correo, se añade la firma DKIM:

Correo

Finalmente, compruebo la verificación de la firma en la página mxtoolbox:

Verificación

Para luchar contra el spam

Gestión de correos desde un cliente

Tarea 8

Configura el buzón de los usuarios de tipo Maildir. Envía un correo a tu usuario y comprueba que el correo se ha guardado en el buzón Maildir del usuario del sistema correspondiente. Recuerda que ese tipo de buzón no se puede leer con la utilidad mail.

Voy a cambiar el tipo de buzón de los usuarios, editando el fichero /etc/postfix/main.cf:

home_mailbox = Maildir/

Ahora instalamos el cliente mutt para poder leer los correos:

apt install mutt -y
systemctl restart postfix

Tengo que hacer la siguiente configuración en cada usuario:

nano ~/.muttrc
set mbox_type=Maildir
set mbox="~/Maildir"
set folder="~/Maildir"
set spoolfile="~/Maildir"
set record="+.Sent"
set postponed="+.Drafts"
set mask="!^\\.[^.]"

Podemos ver el contenido del directorio Maildir:

Directorio

Ahora, cuando envío un correo, se guarda en el buzón Maildir del usuario del sistema correspondiente, y lo podemos leer con mutt:

Correo

Tarea 9

Instala configura dovecot para ofrecer el protocolo IMAP. Configura dovecot de manera adecuada para ofrecer autentificación y cifrado.

Instalo dovecot:

apt install dovecot-imapd -y

Modifico el fichero /etc/dovecot/conf.d/10-ssl.conf para añadir el certificado que generamos con certbot al crear la página, modificando las siguientes líneas:

ssl_cert = </etc/letsencrypt/live/admichin.es-0001/fullchain.pem
ssl_key = </etc/letsencrypt/live/admichin.es-0001/privkey.pem

Ahora cambiamos la localización de los mailbox en el fichero /etc/dovecot/conf.d/10-mail.conf:

mail_location = maildir:~/Maildir

Tarea 10

Instala un webmail (roundcube, horde, rainloop) para gestionar el correo del equipo mediante una interfaz web. Muestra la configuración necesaria y cómo eres capaz de leer los correos que recibe tu usuario.

Voy a instalar roundcube utilizando docker:

apt install docker.io -y

Creo una entrada de tipo CNAME con el nombre webmail:

CNAME

Ahora vamos a crear la configuración en un directorio que montaremos posteriormente por medio de bind mount en el docker;

mkdir /root/cuboredondo
nano -cl /root/cuboredondo/custom.inc.php
<?php
$config['mail_domain'] = array(
    'mail.admichin.es' => 'admichin.es'
);
?>

Ahora creo el contenedor de docker:

docker run -d --name docker-cuboredondo \
-v /root/cuboredondo/:/var/roundcube/config/ \
-e ROUNDCUBEMAIL_DEFAULT_HOST=ssl://mail.admichin.es \
-e ROUNDCUBEMAIL_SMTP_SERVER=ssl://mail.admichin.es \
-e ROUNDCUBEMAIL_SMTP_PORT=465 \
-e ROUNDCUBEMAIL_DEFAULT_PORT=993 \
-p 8001:80 \ 
roundcube/roundcubemail

o en una sola linea:

docker run -d --name docker-cuboredondo -v /root/cuboredondo/:/var/roundcube/config/ -e ROUNDCUBEMAIL_DEFAULT_HOST=ssl://mail.admichin.es -e ROUNDCUBEMAIL_SMTP_SERVER=ssl://mail.admichin.es -e ROUNDCUBEMAIL_SMTP_PORT=465 -e ROUNDCUBEMAIL_DEFAULT_PORT=993 -p 8001:80 roundcube/roundcubemail

Ahora creo el virtualhost para el dominio en /etc/nginx/sites-available/webmail.admichin.es:

server {
        listen 80;
        listen [::]:80;

        server_name webmail.admichin.es;

        return 301 https://$host$request_uri;
}

server {
        listen 443 ssl http2;
        listen [::]:443 ssl http2;

        ssl    on;
        ssl_certificate /etc/letsencrypt/live/admichin.es-0001/fullchain.pem;
        ssl_certificate_key     /etc/letsencrypt/live/admichin.es-0001/privkey.pem;

        index index.html index.php index.htm index.nginx-debian.html;

        server_name webmail.admichin.es;

        location / {
                proxy_pass http://localhost:8001;
                include proxy_params;
        }
}

Ahora activo el sitio y reinicio nginx:

ln -s /etc/nginx/sites-available/webmail.admichin.es /etc/nginx/sites-enabled/
systemctl restart nginx

Ahora podemos acceder a la instancia de roundcube desde el navegador:

Roundcube

Como se puede ver acabo de recibir el correo del ejercicio de la tarea del cron. Ahora un correo enviado desde fuera:

Correo enviado desde fuera

Tarea 11

Configura de manera adecuada postfix para que podamos mandar un correo desde un cliente remoto. La conexión entre cliente y servidor debe estar autentificada con SASL usando dovecor y además debe estar cifrada. Para cifrar esta comunicación puedes usar dos opciones:

  • ESMTP + STARTTLS: Usando el puerto 567/tcp enviamos de forma segura el correo al servidor.
  • SMTPS: Utiliza un puerto no estándar (465) para SMTPS (Simple Mail Transfer Protocol Secure). No es una extensión de smtp. Es muy parecido a HTTPS.

Elige una de las opciones anterior para realizar el cifrado. Y muestra la configuración de un cliente de correo (evolution, thunderbird, …) y muestra como puedes enviar los correos.

Usaré los mismos certificados que he generado antes para cifrar los emails que envío y recibo. Para ello, modifico la configuración de postfix en /etc/postfix/main.cf:

smtpd_tls_cert_file = /etc/letsencrypt/live/admichin.es-0001/fullchain.pem
smtpd_tls_key_file = /etc/letsencrypt/live/admichin.es-0001/privkey.pem

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = dovecot
smtpd_sasl_path = private/auth
smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes

Ahora edito /etc/postfix/master.cf:

submission inet n       -       y       -       -       smtpd
  -o content_filter=spamassassin
  -o syslog_name=postfix/submission
  -o smtpd_tls_security_level=encrypt
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_tls_auth_only=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=$mua_client_restrictions
  -o smtpd_helo_restrictions=$mua_helo_restrictions
  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

smtps     inet  n       -       y       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_reject_unlisted_recipient=no
  -o smtpd_client_restrictions=$mua_client_restrictions
  -o smtpd_helo_restrictions=$mua_helo_restrictions
  -o smtpd_sender_restrictions=$mua_sender_restrictions
  -o smtpd_recipient_restrictions=
  -o smtpd_relay_restrictions=permit_sasl_authenticated,reject
  -o milter_macro_daemon_name=ORIGINATING

Le indico a dovecot como debe realizar la auntentificación en el fichero /etc/dovecot/conf.d/10-master.conf:

service auth {
  ...
  # Postfix smtp-auth
  unix_listener /var/spool/postfix/private/auth {
    mode = 0666
  }
  ...
}

Ahora hay que abrir los puertos 465 y 993 en la vps. Tras eso, reiniciamos el servicio:

systemctl restart postfix dovecot

Ahora configuramos el cliente de correo evolution:

Configuración de evolution Configuración de evolution

Tras configurarlo probamos la recepción de un correo:

Correo recibido

Y el envío:

Correo enviado Correo enviado

Tarea 12

Configura el cliente webmail para el envío de correo. Realiza una prueba de envío con el webmail.

Esta tarea consiste en poder enviar correos desde el cliente roundcube, y se han realizado las configuraciones necesarias en la tarea 10. Ahora solo queda probarlo:

Correo enviado desde roundcube Correo enviado desde roundcube

Comprobación final

Tarea 13

Prueba de envío de correo. En esta página tenemos una herramienta completa y fácil de usar a la que podemos enviar un correo para que verifique y puntúe el correo que enviamos. Captura la pantalla y muestra la puntuación que has sacado.

Enviamos un correo para comprobar la puntuación:

Correo enviado para comprobar la puntuación Correo enviado para comprobar la puntuación