From 346e3d0e133ace77fed204806528b663eb5d6e88 Mon Sep 17 00:00:00 2001 From: Mauricio Baeza Date: Tue, 28 Sep 2021 14:18:48 -0500 Subject: [PATCH] Add mailserver --- source/notes/mailserver.gmi | 418 ++++++++++++++++++++++++++++++------ 1 file changed, 354 insertions(+), 64 deletions(-) diff --git a/source/notes/mailserver.gmi b/source/notes/mailserver.gmi index 8b86f98..8ded371 100644 --- a/source/notes/mailserver.gmi +++ b/source/notes/mailserver.gmi @@ -1,6 +1,8 @@ ## 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: @@ -8,13 +10,14 @@ Antes de empezar planifica correctamente tu servidor con los siguientes datos: 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 subdominio "mail" a la misma IP +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: ``` @@ -28,14 +31,33 @@ 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. +``` + + El instalador de iRedMail solo funciona en un servidor limpio, para este ejemplo he usado un VPS con Ubuntu Server 20.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 +``` vim /var/lib/locales/supported.d/en dpkg-reconfigure locales @@ -46,143 +68,395 @@ vim /etc/environment LANG=en_US.UTF-8 LC_ALL=en_US.UTF-8 +``` +Instalar estos paquetes +``` apt install python-is-python3 mlocate +``` +Opcional si quieres cambiar el prompt +``` vim .bashrc - `PS1="┌─[\e[0;32m\H\e[m][\e[1;31m\u\e[m]->{\[\e[34;1m\]\w\[\e[0;1m\]}\n└──> \[\e[0m\]"` + PS1="┌─[\e[0;32m\H\e[m][\e[1;31m\u\e[m]->{\[\e[34;1m\]\w\[\e[0;1m\]}\n└──> \[\e[0m\]" source .bashrc +``` +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/hostname +cat /etc/hostname - mail.cuates.net + 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/1.4.2.tar.gz +``` +Descomprimimos y entramos en el directorio. +``` tar zxf 1.4.2.tar.gz cd iRedMail-1.4.2/ +``` +Iniciamos el instalador. +``` bash iRedMail.sh +``` -Pantalla de bienvenida Yes -Directorio de almacenamiento de los buzones de correo: /var/vmail -Instalar servidor web: Nginx -Seleccionar base de datos: PostgreSQL -Contraseña para admin PostgreSQL: -Capturar primer dominio: correolibre.org -Contraseña para el administrador: +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. +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.4.2/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 SOGo 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 siguinte, 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: 2274. [Y|n]Y +< Question > File: /etc/nftables.conf, with SSHD ports: 2222. [Y|n]Y [ INFO ] Copy firewall sample rules. -< Question > Restart firewall now (with ssh ports: 2274)? [y|N]y +< Question > Restart firewall now (with ssh ports: 2222)? [y|N]y [ INFO ] Restarting firewall ... +``` - -/root/iRedMail-1.4.2/config - -/root/iRedMail-1.4.2/iRedMail.tips - -- Roundcube webmail: https://mail.correolibre.org/mail/ -- SOGo groupware: https://mail.correolibre.org/SOGo/ -- netdata (monitor): https://mail.correolibre.org/netdata/ -- Web admin panel (iRedAdmin): https://mail.correolibre.org/iredadmin/ - +Al terminar, debes de ver un mensaje como este: +``` +******************************************************************** +* URLs of installed web applications: +* +* - Roundcube webmail: https://mail.correolibre.org/mail/ +* - SOGo groupware: https://mail.correolibre.org/SOGo/ +* - 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.4.2/iRedMail.tips +* +* And it's sent to your mail account postmaster@correolibre.org. +* +********************* WARNING ************************************** +* * Please reboot your system to enable all mail services. +* +******************************************************************** +``` -/etc/nftables.conf - - +Tal como dice, 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.4.2/config +``` + +Este archivo contiene información importante del servidor, tenlo a la mano para consulta. +``` +/root/iRedMail-1.4.2/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 +``` + +Reiniciamos 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/ +``` + +Para el cliente web de correo SoGo mi preferido: +``` +https://mail.correolibre.org/SOGo/ +``` + +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. + +Asegurate de esperar el tiempo suficiente para validarla. +``` +amavisd-new testkeys + +TESTING#1 correolibre.org: dkim._domainkey.correolibre.org => pass +``` + +Algunos procedimientos especials, 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/12/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 +``` -exit +Vamos a editar la configuración predeterminada del servidor SSH. -ssh-copy-id -i ~/.ssh/mau20.pub mail.correolibre.org +CUIDADO: Si no esta correcto puedes quedarte sin acceso remoto. -ssh mail.correolibre.org +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 -vim .bashrc - - `PS1="┌─[\e[0;32m\H\e[m][\e[1;31m\u\e[m]->{\[\e[34;1m\]\w\[\e[0;1m\]}\n└──> \[\e[0m\]"` - -source .bashrc - -sudo chmod -x /etc/update-motd.d/10-help-text - -sudo vim /etc/ssh/sshd_config - - Port 2274 + Port 2222 AllowUsers USER - PermitRootLogin no + PermitRootLogin yes LoginGraceTime 1m ClientAliveInterval 600 ClientAliveCountMax 0 MaxAuthTries 3 IgnoreRhosts yes PermitEmptyPasswords no - PasswordAuthentication 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. -sudo vim /etc/postgresql/12/main/pg_hba.conf +Reinicia el servidor SSH. +``` +systemctl restart ssh +``` - local all postgres trust +Sal del servidor +``` +exit +``` -sudo systemctl restart postgresql +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 al 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 -sudo apt install certbot +/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: -sudo certbot register --agree-tos -m EMAIL +Number of key(s) added: 1 -sudo certbot certonly --standalone --preferred-challenges http-01 -d mail.correolibre.org -d correolibre.org +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. +``` -sudo rm -f /etc/ssl/private/iRedMail.key +Ahora debe de poder conectarte directamente. +``` +ssh USER@IP_SERVER +``` -sudo rm -f /etc/ssl/certs/iRedMail.crt +TIP: Si el usuario agregado es igual al usuario de donde te conectas, puede usar solo la IP. -sudo ln -s /etc/letsencrypt/live/mail.correolibre.org/privkey.pem /etc/ssl/private/iRedMail.key +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. -sudo ln -s /etc/letsencrypt/live/mail.correolibre.org/fullchain.pem /etc/ssl/certs/iRedMail.crt +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 -sudo nginx -t + PermitRootLogin no + PasswordAuthentication no +``` -sudo systemctl restart nginx +Renicia el servidor SSH +``` +sudo systemctl restart ssh +``` -sudo amavisd-new showkeys +Opcional, cambia el prompt. Agrega al final del archivo. +``` +vim .bashrc -sudo amavisd-new testkeys + PS1="┌─[\e[0;32m\H\e[m][\e[1;31m\u\e[m]->{\[\e[34;1m\]\w\[\e[0;1m\]}\n└──> \[\e[0m\]" -TESTING#1 correolibre.org: dkim._domainkey.correolibre.org => pass +source .bashrc +``` +## 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 -sudo amavisd-new genrsa /var/lib/dkim/amigos.email.pem 2048 +``` +Cambiamos el dueño del archivo. +``` sudo chown amavis:amavis /var/lib/dkim/cuates.net.pem -sudo chown amavis:amavis /var/lib/dkim/amigos.email.pem +``` +Cambiamos los permisos. +``` sudo chmod 400 /var/lib/dkim/cuates.net.pem -sudo chmod 400 /var/lib/dkim/amigos.email.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. @@ -197,7 +471,6 @@ sudo vim /etc/amavis/conf.d/50-user # 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 }, - "amigos.email" => { d => "amigos.email", a => 'rsa-sha256', ttl => 10*24*3600 }, # catch-all (one dkim key for all domains) #'.' => {d => 'correolibre.net', @@ -205,12 +478,29 @@ sudo vim /etc/amavis/conf.d/50-user # 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