GNU/Linux >> Tutoriales Linux >  >> Debian

Cómo proteger el servidor de correo electrónico contra la piratería con VPN (Debian/Ubuntu)

En este tutorial, voy a compartir contigo mis consejos y trucos para proteger los servidores de correo electrónico contra la piratería. con un servidor VPN autohospedado. Muchos spammers intentan piratear los servidores de correo electrónico de otras personas. Si tiene éxito, usarían el servidor de correo electrónico pirateado para enviar grandes volúmenes de spam o robar datos valiosos. ¿Por qué usamos un servidor VPN autohospedado? Porque le permite habilitar la inclusión en la lista blanca, por lo que solo los usuarios de confianza conectados al servidor VPN pueden acceder a su servidor de correo.

Requisitos

Se supone que tienes un servidor de correo electrónico está funcionando. Si no, sigue uno de los tutoriales a continuación para configurar tu propio servidor de correo.

  • Cómo configurar fácilmente un servidor de correo completo en Ubuntu 20.04 con iRedMail
  • Cómo configurar fácilmente un servidor de correo en Debian 10 Buster con iRedMail

También se supone que ha configurado un servidor VPN . De lo contrario, siga uno de los tutoriales a continuación. El servidor de correo y el servidor VPN pueden ejecutarse en hosts separados o en el mismo host.

  • Configure su propio servidor VPN WireGuard en Ubuntu
  • Configure su propio servidor VPN WireGuard en Debian

Sugerencia :Se recomienda ejecutar el servidor VPN y el servidor de correo en hosts separados para reducir las complejidades operativas . Si el servidor de correo y el servidor VPN se ejecutan en el mismo host, se requieren pasos adicionales, a saber, configurar una zona de política de respuesta en el servidor VPN para anular el registro DNS A del nombre de host de su servidor de correo.

  • Configurar la Zona de política de respuesta (RPZ) en BIND Resolver en Debian/Ubuntu

Digamos el registro DNS A para mail.yourdomain.com se resuelve en 12.34.56.78 , debe crear un registro en la zona de política de respuesta para resolverlo en la dirección IP privada del servidor VPN 10.10.10.1 .

En los siguientes textos, uso 12.34.56.78 como la dirección IP pública del servidor VPN. Si el servidor VPN y el servidor de correo se ejecutan en el mismo host, debe reemplazar 12.34.56.78 con la dirección IP privada del servidor VPN 10.10.10.1 .

Paso 1:agregue la dirección IP del servidor VPN a la lista blanca del cortafuegos

Una vez que tenga un servidor de correo y un servidor VPN en funcionamiento, debe agregar la dirección IP del servidor VPN a la lista blanca del servidor de seguridad del servidor de correo. Si utiliza cortafuegos UFW (Debian/Ubuntu), ejecute el siguiente comando en el servidor de correo. Reemplace 12.34.56.78 con la dirección IP del servidor VPN.

sudo ufw insert 1 allow in from 12.34.56.78

También puede incluir en la lista blanca las direcciones IP de sus otros servidores. Por ejemplo, algunas personas pueden tener otro servidor web que necesita enviar correos electrónicos a través del servidor de correo electrónico. Luego también agréguelo a la lista blanca.

sudo ufw insert 1 allow in from IP-address-of-the-other-web-server

Paso 2:cierre el puerto de envío, el puerto IMAP y el puerto POP3

  • Puerto de envío :587 y 465
  • Puerto IMAP :143 y 993
  • Puerto POP3 :110 y 995

Los clientes de correo como Mozilla Thunderbird y Microsoft Outlook utilizan los puertos 587 y 465 para enviar correos electrónicos salientes. Los piratas informáticos pueden realizar ataques de fuerza bruta en los puertos 587 y 465.

El siguiente es un ejemplo que se encuentra en mi registro de correo (/var/log/mail.log en Debian/Ubuntu, /var/log/maillog en CentOS/RHEL). El mal actor estaba tratando de iniciar sesión, pero falló la autenticación SASL cada vez.

postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56]
postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3
postfix/smtps/smtpd[18071]: connect from unknown[92.118.38.56]
postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56]
postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3
postfix/smtps/smtpd[18071]: connect from unknown[92.118.38.56]
postfix/smtps/smtpd[18071]: Anonymous TLS connection established from unknown[92.118.38.56]: TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)
postfix/smtps/smtpd[18071]: warning: unknown[92.118.38.56]: SASL LOGIN authentication failed: UGFzc3dvcmQ6
postfix/smtps/smtpd[18071]: lost connection after AUTH from unknown[92.118.38.56]
postfix/smtps/smtpd[18071]: disconnect from unknown[92.118.38.56] ehlo=1 auth=0/1 rset=1 commands=2/3

No quiero ver este tipo de actividad en mi registro de correo, así que simplemente cierro los puertos 587, 465, 143, 993, 110 y 995 en el firewall. Y debido a que la dirección IP de mi servidor VPN está incluida en la lista blanca, solo los usuarios que están conectados a mi servidor VPN pueden acceder a esos puertos.

Para cerrar estos puertos en el cortafuegos UFW, primero enumere las reglas de su cortafuegos.

sudo ufw status numbered

Salida de muestra

Como puede ver, existen reglas tanto de IPv4 como de IPv6. Para cerrar el puerto 587, necesito eliminar la regla #16 y #6 . (Primero debe eliminar la regla con un número de índice más alto).

sudo ufw delete 16
sudo ufw delete 6

Entonces deberías ejecutar sudo ufw status numbered comando de nuevo para obtener una nueva lista de reglas de firewall. Observe que el número de índice cambió para algunas reglas.

Esta vez quiero cerrar el puerto 465, así que necesito eliminar la regla #15 y #6 .

sudo ufw delete 15
sudo ufw delete 6

Luego use el mismo método para cerrar los puertos 143, 993, 110 y 995. Por supuesto, debe mantener abierto el puerto 25 para recibir correos electrónicos de otros servidores SMTP.

Paso 3:Proteger el panel de administración y el correo web

Podemos cerrar los puertos 80 y 443 para proteger el panel de administración y el correo web de la piratería. Sin embargo, eso prohibirá el acceso público a todos los servidores virtuales. Algunas personas pueden tener hosts virtuales en Apache/Nginx que necesitan abrirse a Internet. En lugar de cerrar los puertos 80 y 443 en el firewall, podemos usar la función de control de acceso integrada en Apache/Nginx.

Nginx

Edite el archivo de host virtual para correo web, como

sudo nano /etc/nginx/conf.d/mail.your-domain.com.conf

Agregue las siguientes líneas al bloque del servidor SSL. Esto permitirá solo la dirección IP 12.34.56.78 para acceder al correo web y denegar todas las demás direcciones IP.

allow 12.34.56.78;
deny all;

Si tiene varios servidores VPN, puede agregar varias direcciones IP de la siguiente manera:

allow 12.34.56.78;
allow 12.34.56.79;
deny all;

Guarde y cierre el archivo. Luego pruebe las configuraciones de Nginx.

sudo nginx -t

Si la prueba es exitosa, vuelva a cargar Nginx para que los cambios surtan efecto.

sudo systemctl reload nginx

Los usuarios que no estén en la lista blanca verán un error prohibido 403.

Apache

Edite el archivo de host virtual para correo web, como

sudo nano /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf

Agregue las siguientes líneas entre <VirtualHost>...</VirtualHost> etiquetas Esto permitirá solo la dirección IP 12.34.56.78 para acceder al correo web y denegar todas las demás direcciones IP.

    <LocationMatch "^/">
       Require ip 12.34.56.78
    </LocationMatch>

Si tiene varios servidores VPN, puede agregar varias direcciones IP de la siguiente manera:

    <LocationMatch "^/">
       Require ip 12.34.56.78 12.34.56.79
    </LocationMatch>

Guarde y cierre el archivo. Luego pruebe las configuraciones de Apache.

sudo apache2ctl -t

Si la sintaxis es correcta, vuelva a cargar Apache para que los cambios surtan efecto.

sudo systemctl reload apache2

Los usuarios que no estén en la lista blanca verán un error prohibido 403.

Renovación del certificado TLS de Certbot

Si habilita la inclusión en la lista blanca en el host virtual Apache/Nginx, también bloqueará los servidores de Let's Encrypt para acceder a su servidor web, que es necesario para renovar el certificado TLS de Let's Encrypt con desafío HTTP-01. Para resolver este problema, podemos deshabilitar la inclusión en la lista blanca antes de la renovación del certificado y habilitarla nuevamente después de la renovación.

Cree un script de shell en /root/ directorio.

sudo nano /root/certbot-renewal.sh

Si usa Nginx, agregue las siguientes líneas a este archivo.

#! /bin/bash

# disable whitelisting
sed -i 's/deny all;/#deny all;/g' /etc/nginx/conf.d/mail.your-domain.com.conf
systemctl reload nginx

# renew TLS certificate
certbot renew --quiet

# enable whitelisting
sed -i 's/#deny all;/deny all;/g' /etc/nginx/conf.d/mail.your-domain.com.conf
systemctl reload nginx postfix dovecot

Si usa Apache, agregue las siguientes líneas a este archivo.

#! /bin/bash

# disable whitelisting
sed -i 's/Require ip/#Require ip/g' /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf
systemctl reload apache2

# renew TLS certificate
certbot renew --quiet

# enable whitelisting
sed -i 's/#Require ip/Require ip/g' /etc/apache2/sites-enabled/mail.your-domain.com-le-ssl.conf
systemctl reload apache2 postfix dovecot

Guarde y cierre el archivo. Luego agregue permiso de ejecución a este archivo.

sudo chmod +x /root/certbot-renewal.sh

Luego edite el archivo crontab del usuario root.

sudo crontab -e

Agregue la siguiente línea al final del archivo, para que el script de shell se ejecute una vez al día.

@daily bash /root/certbot-renewal.sh

Guarde y cierre el archivo.

¿Cerrar puerto SSH?

Dado que la dirección IP de su servidor VPN está en la lista blanca, también puede cerrar el puerto SSH en el firewall. Sin embargo, hacerlo conlleva un riesgo. Si su servidor VPN deja de funcionar, entonces se bloqueará. Para proteger el servicio SSH de la piratería, recomiendo configurar la autenticación de clave pública o la autenticación de dos factores.

  • Dos sencillos pasos para configurar el inicio de sesión SSH sin contraseña en Ubuntu
  • Configurar la autenticación de dos factores SSH (2FA) en el servidor Ubuntu

Debian
  1. Cómo instalar el servidor FTP vsftpd y asegurarlo con TLS en Debian 11

  2. Cómo instalar Puppet 6.x en Ubuntu 18.04 / Ubuntu 16.04 y Debian 9

  3. Cómo instalar Spamassassin con Postfix y Dovecot en Ubuntu/Debian Server

  4. Cómo instalar el servidor SSH en Ubuntu/Debian con OpenSSH

  5. Cómo configurar un servidor de correo electrónico con Mail-in-a-Box en Ubuntu

Cómo configurar fácilmente un servidor de correo en Debian 10 Buster con iRedMail

Cómo proteger el servidor de correo electrónico contra la piratería con VPN (CentOS/RHEL)

Cómo configurar el servidor de correo electrónico con Plesk en Ubuntu 20.04

Cómo configurar un servidor FTP seguro con Pure-FTPd en Ubuntu

Cómo configurar LAMP con Debian 11

Cómo configurar el servidor Samba con Debian 11