Add mailserver

This commit is contained in:
Mauricio Baeza 2021-09-28 14:18:48 -05:00
parent 2f01e7a8ce
commit 346e3d0e13
1 changed files with 354 additions and 64 deletions

View File

@ -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