💾 Archived View for elmau.net › notes › mailserver.gmi captured on 2024-03-21 at 15:05:12. Gemini links have been rewritten to link to archived content
⬅️ Previous capture (2023-11-04)
-=-=-=-=-=-=-
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.
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 Debian 12, 6 cores y 8 GB de RAM.
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 wget
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.8.tar.gz
Descomprimimos y entramos en el directorio.
tar zxf 1.6.8.tar.gz cd iRedMail-1.6.8/
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.
Escribe "y" Enter para continuar.
Debe comenzar todo el proceso de descarga, instalación y configuración de todos los paquetes necesarios. El proceso tardo 6 minutos en un VPS con 6 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.
Al terminar, debes de ver un mensaje como este:
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://server.mibuzon.email/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 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 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
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.