Zum Hauptinhalt springen

ULTIMATIVER LEITFADEN: Richten Sie Ihren Server für eine zuverlässige E-Mail-Zustellung ein. TEIL I: Firewall

· 9 Minuten Lesezeit
Customer Care Engineer

email-server-linux-firewall-configuration-smtp-imap-setup-guide

info

Firewall ist eine Software (oder eine Hardware-Software-Appliance), die steuert, welche Verbindungen zum Server zulässig und welche blockiert werden. Bei den allermeisten modernen Linux-Server-Distributionen ist eine Firewall standardmäßig vorhanden.

Die zuverlässige Zustellung von E-Mails an den Empfänger hängt nicht nur vom Mailserver selbst ab, sondern auch von korrekten DNS-Einträgen und der Firewall-Konfiguration. Wenn hier etwas schiefgeht, landen Ihre Nachrichten sehr wahrscheinlich im Spam-Ordner – oder werden gar nicht erst zugestellt.

Dieser Artikel beschreibt die wichtigsten Schritte, um eine nahezu 100%ige Zustellrate für von Ihrem Server gesendete Nachrichten zu erreichen. In Teil 1 gehen wir die möglichen Firewall-Probleme im Detail durch; in Teil 2 finden Sie Anleitungen zur Konfiguration von DNS-Einträgen.

Die Informationen in diesem Artikel gelten nur für Mailserver, die auf Linux-Distributionen laufen. Als Beispiele dienen Debian 12 und Rocky Linux 8.10 mit dem Control Panel FASTPANEL.

Voraussetzungen

Schritt 1. Diagnosetools installieren

Um Einträge und Ports zu überprüfen, benötigen Sie Folgendes:

  • dig – zur Analyse von DNS-Einträgen

  • lsof – zur Überprüfung des Mailserver-Status

  • netcat – zur Überprüfung der Portverfügbarkeit

  • whois – zur Überprüfung des aktuellen DNS-Anbieters

Installation auf Debian/Ubuntu:

sudo apt update && sudo apt install -y bind9-dnsutils netcat-openbsd lsof whois

CentOS/AlmaLinux/Rocky Linux:

sudo yum install -y bind-utils nmap-ncat lsof whois

Verfügbarkeit von Mail-Ports

info

Ein Port ist eine numerische Kennung, die verwendet wird, um auf verschiedene Dienste auf einem Server zuzugreifen. Jeder Dienst oder jede Anwendung lauscht auf seinem eigenen Port, um Daten über das Netzwerk auszutauschen (z. B. verwendet HTTP Port 80 und SMTP Port 25).

Um alle folgenden Schritte auszuführen, verbinden Sie sich über SSH mit dem Root-Benutzer mit Ihrem Server oder verwenden Sie sudo, wenn Sie Befehle ausführen, wie in den Beispielen gezeigt. Wie Sie sich über SSH mit einem Server verbinden, erfahren Sie in unserem SSH-Artikel.

Schritt 2. Mailserver-Status prüfen

Bevor Sie prüfen, ob die Ports über das Netzwerk erreichbar sind, stellen Sie zuerst sicher, dass die Mailserver laufen und korrekt funktionieren. Der ausgehende E-Mail-Verkehr wird normalerweise von Exim oder Postfix gehandhabt, der eingehende E-Mail-Verkehr von Dovecot.

Um zu überprüfen, ob sie laufen, verwenden Sie die folgenden Befehle:

sudo lsof -i:25
sudo lsof -i:143

Wenn die Dienste laufen, erhalten Sie eine Ausgabe, die der folgenden ähnelt:

Port 25:

COMMAND PID USER  FD   TYPE   DEVICE SIZE/OFF NODE NAME
exim 839 exim 4u IPv6 778199358 0t0 TCP *:smtp (LISTEN)
exim 839 exim 5u IPv4 778199359 0t0 TCP *:smtp (LISTEN)

Wenn Ihr Server einen anderen SMTP-Server verwendet, z. B. Postfix, wird dessen genauer Name anstelle von exim in der ersten Spalte angezeigt. Verwenden Sie bei Bedarf diesen Namen in den nachfolgenden Befehlen.

Port 143:

COMMAND PID USER  FD   TYPE   DEVICE SIZE/OFF NODE NAME
dovecot 859 root 39u IPv4 778204692 0t0 TCP *:imap (LISTEN)
dovecot 859 root 40u IPv6 778204693 0t0 TCP *:imap (LISTEN)

Das bedeutet, dass alles in Ordnung ist und Sie mit dem nächsten Schritt fortfahren können.

Wenn die Mail-Dienste nicht laufen, erhalten Sie eine leere Ausgabe:

~ sudo lsof -i:25
~
~ sudo lsof -i:143
~

In diesem Fall stimmt etwas nicht und die Mail-Dienste sind nicht verfügbar. Sie können versuchen, sie manuell zu starten und dann ihren Status zu überprüfen:

Debian/Ubuntu:

systemctl restart exim4 dovecot
systemctl status exim4
systemctl status dovecot

CentOS/AlmaLinux/Rocky Linux:

systemctl restart exim dovecot
systemctl status exim
systemctl status dovecot

Im laufenden Zustand sieht der Dienststatus wie folgt aus:

Exim:

● exim.service – Exim Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/exim.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-11-02 16:38:57 UTC; 57min ago
Main PID: 839 (exim)
Tasks: 1
Memory: 11.0M
CGroup: /system.slice/exim.service
└─839 /usr/sbin/exim -bd -q1h

Warning: Journal has been rotated since unit was started. Log output is incomplete or unavailable.

Dovecot:

● dovecot.service – Dovecot IMAP/POP3 E-Mail-Server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
Active: active (running) since Sun 2025-11-02 16:38:58 UTC; 58min ago
Docs: man:dovecot(1)
https://doc.dovecot.org/
Main PID: 859 (dovecot)
Tasks: 5
Memory: 9.5M
CGroup: /system.slice/dovecot.service
├─ 859 /usr/sbin/dovecot -F
├─ 880 dovecot/anvil
├─ 881 dovecot/log
├─ 882 dovecot/config
└─1729 dovecot/stats

In diesem Fall ist alles in Ordnung und Sie können mit dem nächsten Schritt fortfahren.

Wenn etwas mit den Diensten nicht stimmt, sehen Sie eine Ausgabe, die der folgenden ähnelt:

Exim:

● exim.service – Exim Mail Transport Agent
Loaded: loaded (/usr/lib/systemd/system/exim.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Sun 2025-11-02 17:38:44 UTC; 3s ago
Process: 839 ExecStart=/usr/sbin/exim -bd -q${QUEUE} (code=exited, status=0/SUCCESS)
Main PID: 839 (code=exited, status=0/SUCCESS)

Dovecot:

● dovecot.service – Dovecot IMAP/POP3 E-Mail-Server
Loaded: loaded (/usr/lib/systemd/system/dovecot.service; enabled; vendor preset: disabled)
Active: inactive (dead) since Sun 2025-11-02 17:39:32 UTC; 3s ago
Docs: man:dovecot(1)
https://doc.dovecot.org/
Process: 2278 ExecStop=/usr/bin/doveadm stop (code=exited, status=0/SUCCESS)
Process: 859 ExecStart=/usr/sbin/dovecot -F (code=exited, status=0/SUCCESS)
Main PID: 859 (code=exited, status=0/SUCCESS)

Es gibt viele Gründe, warum Dienste nicht verfügbar sein könnten (Fehler in Konfigurationsdateien, versehentlich gelöschte Log-Dateien, fehlender freier Speicherplatz auf dem Server und vieles mehr). Diese Aspekte liegen außerhalb des Rahmens dieses Artikels.

Wenn Sie auf dieses Problem stoßen und es selbst untersuchen möchten, empfehlen wir unseren Artikel über die Arbeit mit dem System journal. Oder wenden Sie sich für Unterstützung an das Support-Team Ihres Hosting-Anbieters. Bei kodu.cloud arbeiten wir rund um die Uhr und beantworten Anfragen innerhalb weniger Minuten.

Schritt 3. Überprüfung der Verfügbarkeit von Mail-Ports aus dem globalen Netzwerk

Damit E-Mails korrekt funktionieren, müssen die folgenden TCP-Ports über das Netzwerk zugänglich sein:

  • 25, 465, 587 – zum Senden von E-Mails (SMTP)

  • 143, 993 – zum Empfangen von E-Mails (IMAP)

Sie können deren Verfügbarkeit mit netcat überprüfen:

nc -vz 1.2.3.4 25

Ersetzen Sie 1.2.3.4 durch die tatsächliche IP-Adresse Ihres Servers.

Wenn der Port offen ist, erhalten Sie die folgende Antwort:

Debian/Ubuntu:

Connection to 1.2.3.4 25 port [tcp/smtp] succeeded!

CentOS/AlmaLinux/Rocky Linux:

Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connected to 1.2.3.4:25.
Ncat: 0 Bytes gesendet, 0 Bytes empfangen in 0.01 Sekunden.

Wenn der Port geschlossen ist, wird die Antwort wie folgt aussehen:

Debian/Ubuntu:

nc: connect to 1.2.3.4 port 25 (tcp) failed: Connection refused

CentOS/AlmaLinux/Rocky Linux:

Ncat: Version 7.92 ( https://nmap.org/ncat )
Ncat: Connection refused.

Führen Sie diesen Befehl für alle Ports aus, die zu Beginn dieses Abschnitts aufgeführt sind. Wenn alle verfügbar sind, fahren Sie mit dem zweiten Teil dieses Artikels fort. Wenn nicht, fahren Sie mit Schritt 4 fort, um das Problem zu beheben.

Schritt 4. Zugriff öffnen (optional)

Am häufigsten verwenden Server iptables oder UFW als Firewall, um sie vor unerwünschten Verbindungen zu schützen. Führen Sie den folgenden Befehl aus:

sudo ufw status

Wenn Sie die folgende Antwort erhalten:

-bash: ufw: command not found

bedeutet dies, dass iptables verwendet wird. Wenn die Ausgabe jedoch mit Folgendem beginnt:

Status: active

bedeutet dies, dass UFW verwendet wird.

Gehen Sie zum entsprechenden Unterabschnitt dieses Schritts, je nach verwendeter Firewall.

warnung

Es gibt andere Softwareverwaltungssysteme für die System-Firewall unter Linux (nftables, firewalld und andere). Diese werden in diesem Artikel nicht behandelt, um seine Größe nicht zu erhöhen.

Iptables

warnung

In diesem Abschnitt gelten alle Beispiele nur für IPv4. Wenn Ihr Server eine IPv6-Adresse hat und die Mail-Ports auch über IPv6 erreichbar sein sollen, wiederholen Sie zusätzlich alle Befehle mit ip6tables anstelle von iptables.

Um alle aktuellen Regeln anzuzeigen, führen Sie aus:

sudo iptables -L -v -n --line-numbers

Die Ausgabe kann je nach den auf dem Server hinzugefügten Regeln variieren. Standardmäßig gibt es keine Regeln, aber je nach Hosting-Konfiguration oder Betriebssystem kann bereits eine Konfiguration vorgenommen worden sein. Betrachten wir zwei Hauptfälle, die bei der Konfiguration eines Mailservers häufig vorkommen.

  1. „Alles, was nicht verboten ist, ist erlaubt“-Richtlinie (policy ACCEPT)

In diesem Fall lässt die Firewall standardmäßig allen Datenverkehr zu, bis eine Regel erstellt wird, die ihn explizit blockiert. Diese Richtlinie wird normalerweise standardmäßig verwendet.

Nachfolgend finden Sie ein Beispiel für eine Regelsatz, bei dem SSH- und Mail-Ports blockiert sind:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 51 5637 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 22
2 0 0 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 25,143,993,587,465

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 0 0 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 25,143,993,587,465

In diesem Beispiel:

  • Policy ACCEPT definiert das Standardverhalten: Alle Verbindungen sind erlaubt, sofern nicht anders angegeben.

  • Chain INPUT (eingehende Verbindungen): Neue Verbindungen zu Port 22 (SSH) und zu allen Standard-Mailports (SMTP: 25, 465, 587; IMAP: 143; IMAPS: 993) werden blockiert.

  • Chain OUTPUT (ausgehende Verbindungen): Ausgehende Pakete an dieselben Ports werden blockiert.

Die Regelnummer wird am Anfang der Zeile angezeigt (num). Wenn Sie beispielsweise die Regel löschen möchten, die die Mail-Ports in der INPUT-Kette blockiert (Regelnummer 2), lautet der Befehl:

sudo iptables -D INPUT 2

Hier:

  • -D – ist der Befehl zum Löschen einer Regel.

  • INPUT ist die Kette, aus der die Regel gelöscht wird (in diesem Fall eingehender Datenverkehr).

  • 2 ist die Zeilennummer, in der sich die zu löschende Regel befindet.

Ähnlich müssen Sie zum Entfernen der Blockierung ausgehender Ports aus diesem Beispiel Folgendes ausführen:

sudo iptables -D OUTPUT 1
warnung

Die Zeilennummern in der Ausgabe von iptables -L -v -n --line-numbers können sich ändern, wenn Sie andere Regeln hinzufügen oder löschen. Wenn Sie neue Regeln hinzufügen, können sich die Zeilennummern daher verschieben. Um Fehler zu vermeiden, überprüfen Sie immer die aktuellen Zeilennummern, bevor Sie eine Regel löschen.

Stellen Sie danach sicher, dass alles korrekt ist, indem Sie den Befehl erneut ausführen:

iptables -L -v -n --line-numbers

Die Ausgabe sollte keine Regeln enthalten, die die Funktionsweise der Mail-Ports blockieren:

Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination
1 51 5637 DROP 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp multiport dports 22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Wenn die Regeln immer noch vorhanden sind, überprüfen Sie die Korrektheit der eingegebenen Befehle und der Zeilennummern.

Nachdem Sie die Firewall-Regeln geändert haben, stellen Sie sicher, dass Sie die Änderungen speichern. Andernfalls gehen sie nach einem Neustart verloren. Um die aktuellen iptables-Regeln zu speichern, führen Sie aus:

Debian/Ubuntu:

iptables-save > /etc/iptables/rules.v4

CentOS/AlmaLinux/Rocky Linux:

iptables-save > /etc/sysconfig/iptables

Testen Sie danach die Verfügbarkeit der Mail-Ports erneut, wie in Schritt 3 beschrieben. Wenn sie immer noch nicht verfügbar sind, fahren Sie mit Schritt 5 fort. Wenn alles in Ordnung ist, fahren Sie mit dem zweiten Teil dieses Artikels fort.

2. „Blockieren Sie alles, was nicht explizit erlaubt ist“-Richtlinie (policy DROP)**

Diese Art der Konfiguration ist wesentlich strenger. Alle Ports und Protokolle sind standardmäßig blockiert, und nur explizite Erlaubnisregeln für bestimmte Ports lassen den Datenverkehr zu. Dies ist ein sichererer und empfohlener Ansatz für Server, insbesondere wenn Sie Risiken minimieren möchten.

Ein Beispiel für Regeln für eine solche Konfiguration:

Chain INPUT (policy DROP 306 packets, 17962 bytes)
num pkts bytes target prot opt in out source destination
1 92 12474 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED
2 466 32947 ACCEPT 6 -- * * 0.0.0.0/0 0.0.0.0/0 tcp dpt:22

Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
num pkts bytes target prot opt in out source destination

Chain OUTPUT (policy DROP 197 packets, 29192 bytes)
num pkts bytes target prot opt in out source destination
1 44 10332 ACCEPT 0 -- * * 0.0.0.0/0 0.0.0.0/0 state RELATED,ESTABLISHED

In diesem Beispiel:

  • Chain INPUT (eingehende Verbindungen): Die Richtlinie ist DROP, d. h., alle Pakete werden standardmäßig blockiert, außer denen, für die es Ausnahmeregeln gibt.

Regel 1: ACCEPT state RELATED,ESTABLISHED – lässt eingehende Pakete zu, die sich auf bestehende Verbindungen beziehen oder damit verbunden sind. Dies ist wichtig, damit der Server korrekt auf ausgehende Verbindungen antworten kann (z. B. SSH, E-Mail, DNS-Abfragen). Regel 2: ACCEPT tcp dpt:22 – lässt neue eingehende Verbindungen auf Port 22 (SSH) zu.

  • Chain OUTPUT (ausgehende Verbindungen): Die Richtlinie ist DROP, d. h., alle ausgehenden Pakete werden standardmäßig blockiert.

Regel 1: ACCEPT state RELATED,ESTABLISHED – lässt ausgehende Pakete zu, die sich auf bestehende Verbindungen beziehen. Dies ermöglicht es dem Server, auf Client-Anfragen zu antworten (z. B. SSH, E-Mail-Verbindungen) und eine stabile Verbindung aufrechtzuerhalten.

Wir sehen also, dass es keine Erlaubnisregeln für die Mail-Ports gibt. Um sie hinzuzufügen, führen Sie die folgenden Befehle aus:

sudo iptables -A INPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT
sudo iptables -A OUTPUT -p tcp -m multiport --dports 25,465,587,143,993 -m state --state NEW,ESTABLISHED -j ACCEPT

Speichern Sie danach die Regeln:

Debian/Ubuntu:

iptables-save > /etc/iptables/rules.v4

CentOS/AlmaLinux/Rocky Linux:

iptables-save > /etc/sysconfig/iptables

Testen Sie danach die Verfügbarkeit der Mail-Ports erneut, wie in Schritt 3 beschrieben. Wenn sie immer noch nicht verfügbar sind, fahren Sie mit Schritt 5 fort. Wenn alles in Ordnung ist, fahren Sie mit dem zweiten Teil dieses Artikels fort.

UFW (Uncomplicated Firewall)

Auf einigen Servern wird anstelle von iptables UFW verwendet – eine vereinfachte Schnittstelle zur Konfiguration der Firewall. Es eignet sich für die grundlegende Mailserver-Konfiguration und ist oft auf Ubuntu und Debian zu finden.

Um zu sehen, ob UFW aktiviert ist und welche Regeln aktiv sind, führen Sie aus:

sudo ufw status verbose

Beispielausgabe:

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip

Hier:

  • Default: deny (incoming) – Standardmäßig werden alle eingehenden Verbindungen blockiert.

  • Default: allow (outgoing) – Standardmäßig sind alle ausgehenden Verbindungen erlaubt.

Damit der Mailserver ordnungsgemäß funktioniert, müssen Sie die Standardports öffnen. Führen Sie nacheinander die folgenden Befehle aus:

sudo ufw allow 25/tcp
sudo ufw allow 465/tcp
sudo ufw allow 587/tcp
sudo ufw allow 143/tcp
sudo ufw allow 993/tcp

Wenn Sie auch ausgehende Einschränkungen haben, müssen Sie SMTP-Ports für ausgehende E-Mails zulassen:

sudo ufw allow out 25/tcp
sudo ufw allow out 465/tcp
sudo ufw allow out 587/tcp

Nachdem Sie die Regeln hinzugefügt haben, können Sie sie erneut überprüfen:

sudo ufw status numbered

Sie sehen eine Liste der Regeln mit Nummern. Wenn Sie eine Regel löschen müssen, verwenden Sie die Nummer aus der Ausgabe:

sudo ufw delete 3

Bei UFW werden Regeln automatisch gespeichert und bleiben auch nach einem Neustart in Kraft.

Testen Sie danach die Verfügbarkeit der Mail-Ports erneut, wie in Schritt 3 beschrieben. Wenn sie immer noch nicht verfügbar sind, fahren Sie mit Schritt 5 fort. Wenn alles in Ordnung ist, fahren Sie mit dem zweiten Teil dieses Artikels fort.

Schritt 5. Die Firewall ist korrekt konfiguriert, aber die Mail-Ports sind immer noch nicht verfügbar (optional)

Dieses Verhalten deutet darauf hin, dass die Mail-Ports nicht auf dem Niveau Ihres Servers, sondern auf der Ausrüstung Ihres Hosting-Anbieters blockiert sind. Erstellen Sie in diesem Fall ein Support-Ticket und bitten Sie darum, diese Ports für Ihren Server freizuschalten. Wenn dies nicht möglich ist, bleibt nur der Wechsel des Hosting-Anbieters.

Bei kodu.cloud schränken wir die Funktionalität von Mail-Ports in keiner Weise ein. Unsere Regeln verbieten Massenversendungen, aber für ehrliche Kunden steht E-Mail in vollem Umfang zur Verfügung. Sie müssen nicht einmal einen Mailserver konfigurieren, da alle unsere Kunden kostenlosen Zugang zum Control Panel FASTPANEL mit einer erweiterten Lizenz erhalten. Bestellen Sie einen Server mit dem Control Panel und nutzen Sie in wenigen Minuten E-Mails auf Ihrer eigenen Domain.

Die nächsten Schritte zur korrekten Konfiguration von DNS-Einträgen werden im zweiten Teil dieses Artikels behandelt.