GNU/Linux >> LINUX-Kenntnisse >  >> Debian

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

In diesem Tutorial teile ich meine Tipps und Tricks mit Ihnen, um 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.

  • Einfach einen vollwertigen Mailserver auf Ubuntu 20.04 mit iRedMail einrichten
  • Einfach einen Mailserver auf Debian 10 Buster mit iRedMail einrichten

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 Ubuntu ein
  • Richten Sie Ihren eigenen WireGuard VPN-Server auf Debian 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 DNS-A-Eintrag Ihres Mailserver-Hostnamens außer Kraft zu setzen.

  • Response Policy Zone (RPZ) im BIND-Resolver auf Debian/Ubuntu 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 eine UFW-Firewall verwenden (Debian/Ubuntu), führen Sie den folgenden Befehl auf dem Mailserver aus. Ersetzen Sie 12.34.56.78 durch die IP-Adresse des VPN-Servers.

sudo ufw insert 1 allow in from 12.34.56.78

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 ufw insert 1 allow in from IP-address-of-the-other-web-server

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. Hacker können Brute-Force-Angriffe auf Port 587 und 465 ausführen.

Das Folgende ist ein Beispiel aus meinem Mail-Log (/var/log/mail.log auf Debian/Ubuntu, /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.

Um diese Ports in der UFW-Firewall zu schließen, listen Sie zuerst Ihre Firewall-Regeln auf.

sudo ufw status numbered

Beispielausgabe

Wie Sie sehen können, gibt es sowohl IPv4- als auch IPv6-Regeln. Um Port 587 zu schließen, muss ich die Regel #16 löschen und #6 . (Sie sollten zuerst die Regel mit einer höheren Indexnummer löschen.)

sudo ufw delete 16
sudo ufw delete 6

Dann sollten Sie sudo ufw status numbered ausführen Befehl erneut, um eine neue Liste der Firewall-Regeln zu erhalten. Beachten Sie, dass sich die Indexnummer für einige Regeln geändert hat.

Dieses Mal möchte ich Port 465 schließen, also muss ich die Regel #15 löschen und #6 .

sudo ufw delete 15
sudo ufw delete 6

Verwenden Sie dann die gleiche Methode, um die Ports 143, 993, 110 und 995 zu schließen. 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 dem SSL-Serverblock die folgenden Zeilen hinzu. 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, z. B.

sudo nano /etc/apache2/sites-enabled/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 apache2ctl -t

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

sudo systemctl reload apache2

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

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

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

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 dann 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 einer passwortlosen SSH-Anmeldung auf Ubuntu
  • Richten Sie die SSH-Zwei-Faktor-Authentifizierung (2FA) auf dem Ubuntu-Server ein

Debian
  1. So installieren Sie den vsftpd-FTP-Server und sichern ihn mit TLS unter Debian 11

  2. So installieren Sie Puppet 6.x auf Ubuntu 18.04 / Ubuntu 16.04 und Debian 9

  3. So installieren Sie Spamassassin mit Postfix und Dovecot auf Ubuntu/Debian Server

  4. So installieren Sie den SSH-Server auf Ubuntu / Debian mit OpenSSH

  5. So richten Sie einen E-Mail-Server mit Mail-in-a-Box unter Ubuntu ein

So richten Sie mit iRedMail ganz einfach einen Mailserver unter Debian 10 Buster ein

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

So richten Sie den E-Mail-Server mit Plesk unter Ubuntu 20.04 ein

So richten Sie einen sicheren FTP-Server mit Pure-FTPd unter Ubuntu ein

So konfigurieren Sie LAMP mit Debian 11

So konfigurieren Sie Samba Server mit Debian 11