GNU/Linux >> Linux Esercitazione >  >> Cent OS

Come proteggere il server di posta elettronica dall'hacking con VPN (CentOS/RHEL)

In questo tutorial, condividerò con te i miei suggerimenti e trucchi per proteggere i server di posta CentOS/RHEL contro l'hacking con un server VPN self-hosted. Molti spammer stanno cercando di hackerare i server di posta di altre persone. In caso di successo, utilizzerebbe il server di posta hackerato per inviare grandi volumi di spam o rubare dati preziosi. Perché utilizziamo un server VPN self-hosted? Perché ti consente di abilitare la whitelist, quindi solo gli utenti fidati connessi al server VPN possono accedere al tuo server di posta.

Prerequisiti

Si presume che tu abbia un server di posta elettronica installato e funzionante. In caso contrario, segui uno dei tutorial seguenti per configurare il tuo server di posta.

  • Come configurare facilmente un server di posta completo su CentOS 8 con iRedMail

Si presume inoltre che tu abbia configurato un server VPN . In caso contrario, segui uno dei tutorial qui sotto. Il server di posta e il server VPN possono essere eseguiti su host separati o sullo stesso host.

  • Configura il tuo server VPN WireGuard su CentOS

Suggerimento :Si consiglia di eseguire il server VPN e il server di posta su host separati per ridurre le complessità operative . Se il server di posta e il server VPN vengono eseguiti sullo stesso host, sono necessari ulteriori passaggi, in particolare l'impostazione di una zona dei criteri di risposta sul server VPN per sovrascrivere il record DNS A pubblico del nome host del server di posta.

  • Imposta la Response Policy Zone (RPZ) in BIND Resolver su CentOS/RHEL

Diciamo il record DNS A per mail.yourdomain.com si risolve in 12.34.56.78 , quindi devi creare un record nella zona dei criteri di risposta per risolverlo nell'indirizzo IP privato del server VPN 10.10.10.1 .

Nei testi seguenti utilizzo 12.34.56.78 come indirizzo IP pubblico del server VPN. Se il server VPN e il server di posta funzionano sullo stesso host, è necessario sostituire 12.34.56.78 con l'indirizzo IP privato del server VPN 10.10.10.1 .

Passaggio 1:aggiungi l'indirizzo IP del server VPN alla whitelist del firewall

Una volta che hai un server di posta e un server VPN attivi e in esecuzione, dovresti aggiungere l'indirizzo IP del server VPN alla whitelist del firewall del server di posta. Se utilizzi Firewalld (CentOS/RHEL), eseguire il comando seguente sul server di posta. Sostituisci 12.34.56.78 con l'indirizzo IP del server VPN.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="12.34.56.78" accept'

Puoi anche inserire nella whitelist gli indirizzi IP degli altri tuoi server. Ad esempio, alcune persone potrebbero avere un altro server Web che deve inviare e-mail tramite il server di posta elettronica. Quindi aggiungilo anche alla whitelist.

sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="IP-address-of-the-other-web-server" accept'

Ricarica firewalld per rendere effettive le modifiche.

sudo systemctl reload firewalld

Fase 2:chiudi la porta di invio, la porta IMAP e la porta POP3

  • Porta di invio :587 e 465
  • Porta IMAP :143 e 993
  • Porta POP3 :110 e 995

Le porte 587 e 465 sono utilizzate da client di posta come Mozilla Thunderbird e Microsoft Outlook per inviare e-mail in uscita. Gli attori dannosi possono portare a termine un attacco di forza bruta alle porte 587 e 465.

Quello che segue è un esempio trovato nel mio registro di posta (/var/log/maillog su CentOS/RHEL). Il malintenzionato stava tentando di accedere, ma ogni volta non è riuscito l'autenticazione SASL.

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

Non voglio vedere questo tipo di attività nel mio registro di posta, quindi chiudo semplicemente le porte 587, 465, 143, 993, 110 e 995 nel firewall. E poiché l'indirizzo IP del mio server VPN è nella whitelist, solo gli utenti che sono connessi al mio server VPN possono accedere a quelle porte.

Su CentOS/RHEL, esegui i due comandi seguenti per disabilitare imap , imaps , smtp-submission , smtps , pop3s e pop3s servizi.

sudo firewall-cmd --permanent --remove-service={smtp-submission,smtps,imap,imaps,pop3,pop3s}

sudo firewall-cmd --permanent --remove-port={587/tcp,465/tcp,143/tcp,993/tcp,110/tcp,995/tcp}

Se vedi un avviso come Warning: NOT_ENABLED: smtps , puoi ignorare l'avviso. Ricarica firewalld per rendere effettive le modifiche.

sudo systemctl reload firewalld

Ovviamente è necessario mantenere aperta la porta 25 per ricevere e-mail da altri server SMTP.

Fase 3:protezione del pannello di amministrazione e della webmail

Possiamo chiudere le porte 80 e 443 per proteggere il pannello di amministrazione e la webmail dall'hacking. Tuttavia, ciò vieterà l'accesso pubblico a tutti gli host virtuali. Alcune persone potrebbero avere host virtuali in Apache/Nginx che devono aprirsi a Internet. Invece di chiudere le porte 80 e 443 nel firewall, possiamo utilizzare la funzione di controllo degli accessi integrata in Apache/Nginx.

Nginx

Modifica il file dell'host virtuale per la webmail, ad esempio

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

Aggiungi le seguenti righe nel server {...} contesto. Ciò consentirà solo l'indirizzo IP 12.34.56.78 per accedere alla webmail e negare tutti gli altri indirizzi IP.

allow 12.34.56.78;
deny all;

Se hai più server VPN, puoi aggiungere più indirizzi IP in questo modo:

allow 12.34.56.78;
allow 12.34.56.79;
deny all;

Salva e chiudi il file. Quindi testa le configurazioni di Nginx.

sudo nginx -t

Se il test ha esito positivo, ricarica Nginx per rendere effettive le modifiche.

sudo systemctl reload nginx

Gli utenti non nella whitelist vedranno un errore 403 vietato.

Apache

Modifica il file dell'host virtuale per la webmail in /etc/httpd/conf.d/ directory, come

sudo nano /etc/httpd/conf.d/mail.your-domain.com-le-ssl.conf

Aggiungi le seguenti righe tra <VirtualHost>...</VirtualHost> tag. Ciò consentirà solo l'indirizzo IP 12.34.56.78 per accedere alla webmail e negare tutti gli altri indirizzi IP.

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

Se hai più server VPN, puoi aggiungere più indirizzi IP in questo modo:

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

Salva e chiudi il file. Quindi testa le configurazioni di Apache.

sudo apachectl -t

Se la sintassi è ok, ricarica Apache per rendere effettive le modifiche.

sudo systemctl reload httpd

Gli utenti non nella whitelist vedranno un errore 403 vietato.

Rinnovo del certificato TLS di Certbot

Se abiliti la whitelist nell'host virtuale Apache/Nginx, bloccherai anche i server Let's Encrypt per accedere al tuo server web, che è necessario per rinnovare il certificato Let's Encrypt TLS con la sfida HTTP-01. Per risolvere questo problema, possiamo disabilitare la whitelist prima del rinnovo del certificato e riattivarla dopo il rinnovo.

Crea uno script di shell in /root/ directory.

sudo nano /root/certbot-renewal.sh

Se usi Nginx, aggiungi le seguenti righe a questo file.

#! /bin/bash

# disable whitelisting in the Nginx virtual host
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

Se usi Apache, aggiungi le seguenti righe a questo file.

#! /bin/bash

# disable whitelisting in the Apache virtual host
sed -i 's/Require ip/#Require ip/g' /etc/httpd/conf.d/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/httpd/conf.d/mail.your-domain.com-le-ssl.conf
systemctl reload apache2

Salva e chiudi il file. Quindi aggiungi l'autorizzazione di esecuzione a questo file.

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

Modifica il file crontab dell'utente root.

sudo crontab -e

Aggiungi la riga seguente alla fine del file, in modo che lo script della shell venga eseguito una volta al giorno.

@daily bash /root/certbot-renewal.sh

Salva e chiudi il file.

Chiudere la porta SSH?

Poiché l'indirizzo IP del tuo server VPN è nella whitelist, puoi anche chiudere la porta SSH nel firewall. Tuttavia, ciò comporta un rischio. Se il tuo server VPN smette di funzionare, ti blocchi fuori. Per proteggere il servizio SSH dall'hacking, consiglio di configurare l'autenticazione a chiave pubblica o l'autenticazione a due fattori.

  • 2 semplici passaggi per configurare l'autenticazione con chiave pubblica SSH su CentOS/RHEL
  • Configurazione dell'autenticazione a due fattori (2FA) SSH sul server CentOS/RHEL

Cent OS
  1. Come installare Puppet su CentOS 8 / RHEL 8

  2. Come configurare il server SysLog su CentOS 7 / RHEL 7

  3. Come configurare il server NFS su CentOS 7 / RHEL 7

  4. Come installare Puppet 6.x su CentOS 7 / RHEL 7

  5. Come inviare e-mail con il mio server CentOS?

Come registrare i client con SpaceWalk Server – CentOS / RHEL

Come installare Zabbix Server 5.0/4.0 su CentOS 7/RHEL 7

Come proteggere il server di posta elettronica dall'hacking con VPN (Debian/Ubuntu)

Come proteggere il server di posta elettronica dall'hacking con VPN (CentOS/RHEL)

Come configurare facilmente un server di posta completo su CentOS 7 con iRedMail

Come configurare una VPN basata su IPsec con Strongswan su CentOS/RHEL 8