capsula-gemini/source/notes/mailserver.gmi

489 lines
16 KiB
Plaintext

## Mail Server
iRedMail es una solución todo en uno para un servidor de correo, esto significa que con solo pasarle unos pocos parámetros de configuración nos instala todos los componentes necesarios para tener tu propio servidor de correo totalmente funcional con buenas practicas de seguridad.
=> https://www.iredmail.org/ iRedMail
Antes de empezar planifica correctamente tu servidor con los siguientes datos:
1] Primer dominio a usar. Para este ejemplo usaremos el dominio: correolibre.org
2] Debes de tener ya configurados con tu proveedor de dominios los siguientes registros:
2.1] Un registro tipo A a la IP de tu VPS
2.2] Un registro tipo A al subdominio "mail" a la misma IP
2.3] Los mismos registros de los puntos 2.1 y 2.2 pero tipo AAAA, solo si tu VPS tiene soporte para IPv6
2.4] Un registro tipo MX con prioridad 10 al subdominio "mail"
2.5] Un registro TXT con el valor "v=spf1 ip4:IP_VPS a -all" la IP_VPS debe ser la de tu VPS
2.6] Un registro TXT a "_dmarc" con el valor "v=DMARC1; p=reject; adkim=s; aspf=s; sp=none; rua=mailto:dmarc@correolibre.org; ruf=mailto:dmarc@correolibre.org"
2.7] Un registro TXT a "dkim._domainkey" con el valor "v=DKIM1; p=" este valor será editado más adelante.
A modo de ejemplo:
```
@ 10800 IN A 188.68.36.124
@ 10800 IN AAAA 2a03:4000:13:a72:d8b7:60ff:fec0:ff2
@ 10800 IN MX 10 mail
@ 10800 IN TXT "v=spf1 ip4:188.68.36.124 a -all"
_dmarc 10800 IN TXT "v=DMARC1; p=reject; adkim=s; aspf=s; sp=none; rua=mailto:dmarc@correolibre.org; ruf=mailto:dmarc@correolibre.org"
dkim._domainkey 10800 IN TXT "v=DKIM1; p="
mail 10800 IN A 188.68.36.124
mail 10800 IN AAAA 2a03:4000:13:a72:d8b7:60ff:fec0:ff2
```
Otro punto importante es tener configurado correctamente tu DNS inverso, esto, generalmente es con el proveedor del VPS, verifica que todo este correctamente configurado antes de continuar.
```
host mail.correolibre.org
mail.correolibre.org has address 188.68.36.124
host 188.68.36.124
124.36.68.188.in-addr.arpa domain name pointer mail.correolibre.org.
```
Dependiendo de la velocidad de propagación de los servidores de tu proveedor, los cambios en los registros pueden ser más o menos rápidos, sobre todo la configuración del DNS inverso, no continue mientras no tengas estos registros correctamente establecidos.
El instalador de iRedMail solo funciona en un servidor limpio, para este ejemplo he usado un VPS con Ubuntu Server 22.04. La mayor parte de los procesos como root.
Pon al día el servidor en cuanto a actualizaciones.
```
apt update
apt upgrade
```
Establece la zona horario de tu preferencia, algunos servidor de correo se establecen en el horario UTC.
```
timedatectl set-timezone America/Mexico_City
```
Desactiva los locales no usados
```
dpkg-reconfigure locales
localectl set-locale LANG=en_US.UTF-8 LANGUAGE="en_US:en"
vim /etc/environment
LANG=en_US.UTF-8
LC_ALL=en_US.UTF-8
```
Instalar estos paquetes
```
apt install python-is-python3 mlocate
```
Establecer correctamente tu hostname es muy importante para que todo funciona, no uses solo el nombre de tu dominio.
```
hostnamectl set-hostname mail.correolibre.org
vim /etc/hosts
127.0.0.1 mail.cuates.net mail localhost
```
Reinicia para que tengan efectos estos cambios.
```
reboot
```
Asegurate de estar en el home del root.
```
cd /root
```
Descargamos al última versión del instalador.
```
wget https://github.com/iredmail/iRedMail/archive/refs/tags/1.6.3.tar.gz
```
Descomprimimos y entramos en el directorio.
```
tar zxf 1.6.3.tar.gz
cd iRedMail-1.6.3/
```
Iniciamos el instalador.
```
bash iRedMail.sh
```
Presionar Enter en las dos opciones.
```
Adding component(s) 'multiverse' to all repositories.
Press [ENTER] to continue or Ctrl-c to cancel.
Adding component(s) 'universe' to all repositories.
Press [ENTER] to continue or Ctrl-c to cancel.
```
Debe de inciar el asistente de instalación, puedes usar el ratón para seleccionar la opción indicada y dar siguiente cuando corresponda:
1] Pantalla de bienvenida: Yes
2] Directorio de almacenamiento de los buzones de correo: /var/vmail
3] Instalar servidor web: Nginx
4] Seleccionar base de datos: PostgreSQL
5] Contraseña para admin PostgreSQL:
6] Capturar primer dominio: correolibre.org
7] Contraseña para el administrador:
8] Componentes opcionales: seleccionar todos, excepto SoGo
Después del último paso, debes de ver una confirmación con las opciones seleccionadas.
```
*************************************************************************
***************************** WARNING ***********************************
*************************************************************************
* *
* Below file contains sensitive infomation (username/password), please *
* do remember to *MOVE* it to a safe place after installation. *
* *
* * /root/iRedMail-1.6.0/config
* *
*************************************************************************
********************** Review your settings *****************************
*************************************************************************
* Storage base directory: /var/vmail
* Mailboxes:
* Daily backup of SQL/LDAP databases:
* Store mail accounts in: PostgreSQL
* Web server: Nginx
* First mail domain name: correolibre.org
* Mail domain admin: postmaster@correolibre.org
* Additional components: Roundcubemail netdata iRedAdmin Fail2ban
< Question > Continue? [y|N]
```
Escribe "y" Enter para continuar. Debe comenzar todo el proceso de descarga, instalación y configuración de todos los paquetes necesarios. En esta prueba el proceso tardo 5 minutos en un VPS con 2 cores y 8 de RAM.
Antes de terminar, puede que veas un mensaje como el siguiente, tal vez solo si cambiaste el puerto predeterminado SSH, si no lo ves, esta bien.
```
< Question > Would you like to use firewall rules provided by iRedMail?
< Question > File: /etc/nftables.conf, with SSHD ports: 22. [Y|n]Y
[ INFO ] Copy firewall sample rules.
< Question > Restart firewall now (with ssh ports: 22)? [y|N]y
[ INFO ] Restarting firewall ...
```
Al terminar, debes de ver un mensaje como este:
```
********************************************************************
* URLs of installed web applications:
*
* - Roundcube webmail: https://mail.correolibre.org/mail/
* - netdata (monitor): https://mail.correolibre.org/netdata/
*
* - Web admin panel (iRedAdmin): https://mail.correolibre.org/iredadmin/
*
* You can login to above links with below credential:
*
* - Username: postmaster@correolibre.org
* - Password: LETMEIN
*
*
********************************************************************
* Congratulations, mail server setup completed successfully. Please
* read below file for more information:
*
* - /root/iRedMail-1.6.0/iRedMail.tips
*
* And it's sent to your mail account postmaster@correolibre.org.
*
********************* WARNING **************************************
*
* Please reboot your system to enable all mail services.
*
********************************************************************
```
Tal como dice el mensaje, reinicia el servidor para activar todos los servicios. Toma nota de las credenciales del usuario: "postmaster@correolibre.org" son las predeterminadas para todos los servicios y el usuario administrador de todo.
```
reboot
```
Este archivo contiene información sensible, muevelo a un lugar seguro.
```
/root/iRedMail-1.6.0/config
```
Este archivo contiene información importante del servidor, tenlo a la mano para consulta.
```
/root/iRedMail-1.6.0/iRedMail.tips
```
En este momento, el instalador de iRedMail genero certificados autofirmados los cuales funcionan pero la mayoría de los servidores los rechazará. Vamos a reemplazarlos por los gratuitos de Let's Encrypt
Instalamos
```
apt install certbot -y
```
Aceptamos los terminos de uso y registramos un correo, en este correo recibirás notificaciones cuando esten por vencer los certificados.
```
certbot register --agree-tos -m EMAIL
```
Detenemos un momento el servidor web.
```
systemctl stop nginx
```
Solicitamos el certificado
```
certbot certonly --standalone --preferred-challenges http-01 -d correolibre.org -d mail.correolibre.org
```
Si todo esta bien el registro debe ser similar a.
```
Saving debug log to /var/log/letsencrypt/letsencrypt.log
Plugins selected: Authenticator standalone, Installer None
Obtaining a new certificate
Performing the following challenges:
http-01 challenge for correolibre.org
http-01 challenge for mail.correolibre.org
Waiting for verification...
Cleaning up challenges
IMPORTANT NOTES:
- Congratulations! Your certificate and chain have been saved at:
/etc/letsencrypt/live/correolibre.org/fullchain.pem
Your key file has been saved at:
/etc/letsencrypt/live/correolibre.org/privkey.pem
Your cert will expire on 2021-12-27. To obtain a new or tweaked
version of this certificate in the future, simply run certbot
again. To non-interactively renew *all* of your certificates, run
"certbot renew"
- If you like Certbot, please consider supporting our work by:
Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate
Donating to EFF: https://eff.org/donate-le
```
Borramos los certifidados autofirmados.
```
rm -f /etc/ssl/private/iRedMail.key
rm -f /etc/ssl/certs/iRedMail.crt
```
Creamos vínculos simbólicos a los nuevos.
```
ln -s /etc/letsencrypt/live/correolibre.org/privkey.pem /etc/ssl/private/iRedMail.key
ln -s /etc/letsencrypt/live/correolibre.org/fullchain.pem /etc/ssl/certs/iRedMail.crt
```
Probamos que todo esta bien.
```
nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
```
Iniciamos de nuevo el servidor web.
```
systemctl start nginx
```
Vamos a probar cada servicio, para todos con las credenciales del "postmaster", entra al Web Admin Panel:
```
https://mail.correolibre.org/iredadmin/
```
Para el cliente web de correo Roundcube:
```
https://mail.correolibre.org/mail/
```
El monitor del sistema NetData:
```
https://mail.correolibre.org/netdata/
```
Vamos a actualizar la clave DKIM para el dominio, para ver la clave asignada usas:
```
amavisd-new showkeys
```
Copia la clave de modo que quede en una sola línea, ve al administrador de los DNS de tu proveedor de dominio y editar el valor TXT de "dkim._domainkey" con este valor.
CUIDADO: Asegurate de no borrar algún caracter de más al unificarla en una sola línea, cualquier caracter que falte, provocará que sean rechazados los correos, revisala al menos dos veces.
Asegurate de esperar el tiempo suficiente para validarla.
```
amavisd-new testkeys
TESTING#1 correolibre.org: dkim._domainkey.correolibre.org => pass
```
Algunos procedimientos especiales, requieren editar algunas tablas en la base de datos, para esto, nos aseguramos de poner como de confianza el acceso al usuario "postgres" localmente.
```
vim /etc/postgresql/14/main/pg_hba.conf
local all postgres trust
systemctl restart postgresql
```
Agrega un nuevo usuario para acceder remotamente. Reemplaza "USER" por tu nombre de usuario.
```
adduser USER
```
Lo agregamos al grupo de usuarios "sudo" para poder realizar las tareas administravias.
```
gpasswd -a USER sudo
```
Vamos a editar la configuración predeterminada del servidor SSH.
CUIDADO: Si no esta correcto puedes quedarte sin acceso remoto.
Reemplaza USER por el usuario que acabas de agregar y establece un puerto alterno al predeterminado 22. En algunos servidores estos valores pueden estar repartidos a lo largo del archivo de configuración, revisalo todo para asegurarte de no tener líneas repetidas.
```
vim /etc/ssh/sshd_config
Port 22
AllowUsers root USER
PermitRootLogin yes
LoginGraceTime 1m
ClientAliveInterval 600
ClientAliveCountMax 0
MaxAuthTries 3
IgnoreRhosts yes
PermitEmptyPasswords no
PasswordAuthentication yes
LogLevel INFO
```
Nota que el acceso con contraseña esta activado (PasswordAuthentication yes) y el acceso de "root"", más adelante lo cambiaremos.
Reinicia el servidor SSH.
```
systemctl restart ssh
```
Sal del servidor
```
exit
```
Si ya tienes una clave para identificarte con un servidor puedes usarla, si no, genera una, usa "ssh-keygen" y sigue las instrucciones. CUIDADO, no vayas a reemplazar alguna existente.
```
ssh-keygen -t ed25519
```
Copiamos la clave publica al servidor. Reemplaza CLAVE por el nombre correcto de tu clave, asegurate que se la pública, la terminada en "pub" y reemplaza el USER por el usuario e IP_SERVER por la IP de tu servidor y captura la contraseña cuando se te solicite.
```
ssh-copy-id -i ~/.ssh/CLAVE.pub USER@IP_SERVER
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/home/mau/.ssh/office21.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
mau@303.72.304.13's password:
Number of key(s) added: 1
Now try logging into the machine, with: "ssh '303.72.304.13'"
and check to make sure that only the key(s) you wanted were added.
```
Ahora debe de poder conectarte directamente.
```
ssh USER@IP_SERVER
```
TIP: Si el usuario agregado es igual al usuario de donde te conectas, puede usar solo la IP.
TIP: Puedes configurar el archivo de tu home ".ssh/config" para establecer un nombre más amigable para conectarte a tu servidor en vez de la IP.
Si puedes conectar de nuevo a tu servidor con este usuario, todo esta bien, ya puedes desactivar el acceso por contraseña y el acceso a root. Nota que ahora usamos "sudo".
```
sudo vim /etc/ssh/sshd_config
PermitRootLogin no
PasswordAuthentication no
```
Renicia el servidor SSH
```
sudo systemctl restart ssh
```
## Para agregar un nuevo dominio al servidor.
Generamos una clave para el nuevo dominio.
```
sudo amavisd-new genrsa /var/lib/dkim/cuates.net.pem 2048
```
Cambiamos el dueño del archivo.
```
sudo chown amavis:amavis /var/lib/dkim/cuates.net.pem
```
Cambiamos los permisos.
```
sudo chmod 400 /var/lib/dkim/cuates.net.pem
```
Agregamos la línea:
```
"cuates.net" => { d => "cuates.net", a => 'rsa-sha256', ttl => 10*24*3600 },
```
Al archivo:
```
sudo vim /etc/amavis/conf.d/50-user
# Add dkim_key here.
dkim_key('correolibre.net', 'dkim', '/var/lib/dkim/correolibre.net.pem');
dkim_key('cuates.net', 'dkim', '/var/lib/dkim/cuates.net.pem');
@dkim_signature_options_bysender_maps = ({
# 'd' defaults to a domain of an author/sender address,
# 's' defaults to whatever selector is offered by a matching key
# Per-domain dkim key
"correolibre.net" => { d => "correolibre.net", a => 'rsa-sha256', ttl => 10*24*3600 },
"cuates.net" => { d => "cuates.net", a => 'rsa-sha256', ttl => 10*24*3600 },
# catch-all (one dkim key for all domains)
#'.' => {d => 'correolibre.net',
# a => 'rsa-sha256',
# c => 'relaxed/simple',
# ttl => 30*24*3600 },
});
```
Muestra la clave generada y agregala al correspondiente registro TXT como se vio al inicio.
```
sudo amavisd-new showkeys
```
Reinicia el servicio
```
sudo amavisd-new restart
```
Valida la clave, recuerda, hay que espera a que se propague.
```
sudo amavisd-new testkeys
```
Ahora, desde el Admin Web Panel, puedes agregar el nuevo dominio y agregar los usuarios de correo que quieras.
Eso es todo.
Disfruta.
=> gemini://elmau.net/chuletas.gmi Regresar el índice
=> gemini://elmau.net Regresar el inicio