14 KiB
title | date | draft | image | categories | tags | |||||
---|---|---|---|---|---|---|---|---|---|---|
Práctica: Servidor de correos | 2023-02-07T01:57:14+01:00 | false | featured.png |
|
|
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:
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:
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
Y el correo recibido:
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:
Y compruebo que el correo ha llegado a mi servidor:
Y el log de postfix:
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:
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:
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:
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
:
Reinicio los servicios:
systemctl restart opendkim postfix
Ahora, cuando envío un correo, se añade la firma DKIM:
Finalmente, compruebo la verificación de la firma en la página mxtoolbox:
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
:
Ahora, cuando envío un correo, se guarda en el buzón Maildir del usuario del sistema correspondiente, y lo podemos leer con mutt:
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:
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:
Como se puede ver acabo de recibir el correo del ejercicio de la tarea del cron. Ahora un 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:
Tras configurarlo probamos la recepción de un correo:
Y el envío:
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:
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: