GNU/Linux >> LINUX-Kenntnisse >  >> Cent OS

So schützen Sie E-Mail-Server vor Hacking mit VPN (CentOS/RHEL)

In diesem Tutorial werde ich meine Tipps und Tricks mit Ihnen teilen, um CentOS/RHEL-E-Mail-Server vor Hacking zu schützen mit einem selbst gehosteten VPN-Server. Viele Spammer versuchen, sich in die E-Mail-Server anderer Leute zu hacken. Im Erfolgsfall würden sie den gehackten E-Mail-Server verwenden, um große Mengen an Spam zu versenden oder wertvolle Daten zu stehlen. Warum verwenden wir einen selbst gehosteten VPN-Server? Weil Sie Whitelisting aktivieren können, sodass nur vertrauenswürdige Benutzer, die mit dem VPN-Server verbunden sind, auf Ihren Mailserver zugreifen können.

Voraussetzungen

Es wird davon ausgegangen, dass Sie einen E-Mail-Server haben in Betrieb. Wenn nicht, folgen Sie einem der folgenden Tutorials, um Ihren eigenen Mailserver einzurichten.

  • Einfache Einrichtung eines voll ausgestatteten Mailservers unter CentOS 8 mit iRedMail

Außerdem wird davon ausgegangen, dass Sie einen VPN-Server eingerichtet haben . Wenn nicht, folgen Sie bitte einem der folgenden Tutorials. Der Mailserver und der VPN-Server können auf separaten Hosts oder auf demselben Host laufen.

  • Richten Sie Ihren eigenen WireGuard VPN-Server auf CentOS ein

Hinweis :Es wird empfohlen, VPN-Server und Mailserver auf separaten Hosts auszuführen, um die Komplexität des Betriebs zu reduzieren . Wenn der Mailserver und der VPN-Server auf demselben Host ausgeführt werden, sind zusätzliche Schritte erforderlich, nämlich das Einrichten einer Reaktionsrichtlinienzone auf dem VPN-Server, um den öffentlichen DNS-A-Eintrag Ihres Mailserver-Hostnamens außer Kraft zu setzen.

  • Response Policy Zone (RPZ) in BIND Resolver auf CentOS/RHEL einrichten

Nehmen wir an, der DNS-A-Eintrag für mail.yourdomain.com wird zu 12.34.56.78 aufgelöst , dann müssen Sie einen Eintrag in der Antwortrichtlinienzone erstellen, um ihn in die private IP-Adresse 10.10.10.1 des VPN-Servers aufzulösen .

In den folgenden Texten verwende ich 12.34.56.78 als öffentliche IP-Adresse des VPN-Servers. Wenn der VPN-Server und der Mailserver auf demselben Host laufen, müssen Sie 12.34.56.78 ersetzen mit der privaten IP-Adresse des VPN-Servers 10.10.10.1 .

Schritt 1:VPN-Server-IP-Adresse zur Firewall-Whitelist hinzufügen

Sobald Sie einen Mailserver und einen VPN-Server eingerichtet haben, sollten Sie die IP-Adresse des VPN-Servers zur Whitelist der Mailserver-Firewall hinzufügen. Wenn Sie Firewalld verwenden (CentOS/RHEL) führen Sie den folgenden Befehl auf dem Mailserver aus. Ersetzen Sie 12.34.56.78 durch die IP-Adresse des VPN-Servers.

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

Sie können auch die IP-Adressen Ihrer anderen Server auf die Whitelist setzen. Beispielsweise haben einige Leute möglicherweise einen anderen Webserver, der E-Mails über den E-Mail-Server senden muss. Dann fügen Sie es auch zur Whitelist hinzu.

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

Laden Sie firewalld neu, damit die Änderungen wirksam werden.

sudo systemctl reload firewalld

Schritt 2:Übermittlungsport, IMAP-Port und POP3-Port schließen

  • Übermittlungsport :587 und 465
  • IMAP-Port :143 und 993
  • POP3-Port :110 und 995

Port 587 und 465 werden von E-Mail-Clients wie Mozilla Thunderbird und Microsoft Outlook verwendet, um ausgehende E-Mails zu übermitteln. Böswillige Akteure können Brute-Force-Angriffe auf Port 587 und 465 ausführen.

Das Folgende ist ein Beispiel aus meinem Maillog (/var/log/maillog auf CentOS/RHEL). Der Angreifer hat versucht, sich anzumelden, aber die SASL-Authentifizierung ist jedes Mal fehlgeschlagen.

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

Ich möchte diese Art von Aktivität nicht in meinem Mail-Log sehen, also schließe ich einfach die Ports 587, 465, 143, 993, 110 und 995 in der Firewall. Und da die IP-Adresse meines VPN-Servers auf der weißen Liste steht, können nur Benutzer, die mit meinem VPN-Server verbunden sind, auf diese Ports zugreifen.

Führen Sie unter CentOS/RHEL die folgenden zwei Befehle aus, um imap zu deaktivieren , imaps , smtp-submission , smtps , pop3 und pop3s Dienste.

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}

Wenn Sie eine Warnung wie Warning: NOT_ENABLED: smtps sehen , können Sie die Warnung ignorieren. Laden Sie firewalld neu, damit die Änderungen wirksam werden.

sudo systemctl reload firewalld

Natürlich müssen Sie Port 25 offen halten, um E-Mails von anderen SMTP-Servern zu empfangen.

Schritt 3:Admin-Panel und Webmail schützen

Wir können Port 80 und 443 schließen, um das Admin-Panel und Webmail vor Hackern zu schützen. Dies verbietet jedoch den öffentlichen Zugriff auf alle virtuellen Hosts. Einige Leute haben möglicherweise virtuelle Hosts in Apache/Nginx, die sich für das Internet öffnen müssen. Anstatt Port 80 und 443 in der Firewall zu schließen, können wir die eingebaute Zugriffskontrollfunktion in Apache/Nginx verwenden.

Nginx

Bearbeiten Sie die virtuelle Hostdatei für Webmail, z. B.

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

Fügen Sie die folgenden Zeilen im server {...} hinzu Kontext. Dadurch wird nur die IP-Adresse 12.34.56.78 zugelassen auf das Webmail zugreifen und alle anderen IP-Adressen verweigern.

allow 12.34.56.78;
deny all;

Wenn Sie mehrere VPN-Server haben, können Sie wie folgt mehrere IP-Adressen hinzufügen:

allow 12.34.56.78;
allow 12.34.56.79;
deny all;

Speichern und schließen Sie die Datei. Testen Sie dann die Nginx-Konfigurationen.

sudo nginx -t

Wenn der Test erfolgreich ist, laden Sie Nginx neu, damit die Änderungen wirksam werden.

sudo systemctl reload nginx

Benutzern, die nicht auf der Whitelist stehen, wird ein 403-Fehler angezeigt.

Apache

Bearbeiten Sie die virtuelle Hostdatei für Webmail in /etc/httpd/conf.d/ Verzeichnis, wie zum Beispiel

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

Fügen Sie die folgenden Zeilen zwischen <VirtualHost>...</VirtualHost> hinzu Stichworte. Dadurch wird nur die IP-Adresse 12.34.56.78 zugelassen auf das Webmail zugreifen und alle anderen IP-Adressen verweigern.

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

Wenn Sie mehrere VPN-Server haben, können Sie wie folgt mehrere IP-Adressen hinzufügen:

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

Speichern und schließen Sie die Datei. Testen Sie dann die Apache-Konfigurationen.

sudo apachectl -t

Wenn die Syntax in Ordnung ist, laden Sie Apache neu, damit die Änderungen wirksam werden.

sudo systemctl reload httpd

Benutzern, die nicht auf der Whitelist stehen, wird ein 403-Fehler angezeigt.

Certbot TLS-Zertifikatserneuerung

Wenn Sie Whitelisting im virtuellen Apache/Nginx-Host aktivieren, blockieren Sie auch Let’s Encrypt-Server für den Zugriff auf Ihren Webserver, was für die Erneuerung des Let’s Encrypt-TLS-Zertifikats mit HTTP-01-Challenge erforderlich ist. Um dieses Problem zu lösen, können wir die Whitelist vor der Zertifikatserneuerung deaktivieren und nach der Erneuerung wieder aktivieren.

Erstellen Sie ein Shell-Skript im Verzeichnis /root/ Verzeichnis.

sudo nano /root/certbot-renewal.sh

Wenn Sie Nginx verwenden, fügen Sie dieser Datei die folgenden Zeilen hinzu.

#! /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

Wenn Sie Apache verwenden, fügen Sie dieser Datei die folgenden Zeilen hinzu.

#! /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

Speichern und schließen Sie die Datei. Fügen Sie dieser Datei dann die Ausführungsberechtigung hinzu.

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

Bearbeiten Sie die crontab-Datei des Root-Benutzers.

sudo crontab -e

Fügen Sie die folgende Zeile am Ende der Datei hinzu, damit das Shell-Skript einmal am Tag ausgeführt wird.

@daily bash /root/certbot-renewal.sh

Speichern und schließen Sie die Datei.

SSH-Port schließen?

Da die IP-Adresse Ihres VPN-Servers auf der Whitelist steht, können Sie den SSH-Port auch in der Firewall schließen. Dies birgt jedoch ein Risiko. Wenn Ihr VPN-Server nicht mehr funktioniert, würden Sie sich selbst aussperren. Um den SSH-Dienst vor Hackern zu schützen, empfehle ich die Einrichtung einer Authentifizierung mit öffentlichem Schlüssel oder einer Zwei-Faktor-Authentifizierung.

  • Zwei einfache Schritte zum Einrichten der öffentlichen SSH-Schlüsselauthentifizierung auf CentOS/RHEL
  • Richten Sie die SSH-Zwei-Faktor-Authentifizierung (2FA) auf dem CentOS/RHEL-Server ein

Cent OS
  1. So installieren Sie Puppet unter CentOS 8 / RHEL 8

  2. So richten Sie einen SysLog-Server unter CentOS 7 / RHEL 7 ein

  3. So richten Sie den NFS-Server unter CentOS 7 / RHEL 7 ein

  4. So installieren Sie Puppet 6.x auf CentOS 7 / RHEL 7

  5. Wie sende ich E-Mails mit meinem CentOS-Server?

So registrieren Sie Clients bei SpaceWalk Server – CentOS / RHEL

So installieren Sie Zabbix Server 5.0 / 4.0 unter CentOS 7 / RHEL 7

So schützen Sie E-Mail-Server mit VPN vor Hackerangriffen (Debian/Ubuntu)

So schützen Sie E-Mail-Server vor Hacking mit VPN (CentOS/RHEL)

So richten Sie mit iRedMail ganz einfach einen voll ausgestatteten Mailserver unter CentOS 7 ein

So richten Sie ein IPsec-basiertes VPN mit Strongswan unter CentOS/RHEL 8 ein