ULTYMATE PRZEWODNIK: Konfiguracja serwera dla niezawodnego dostarczania poczty elektronicznej. CZĘŚĆ I: Zapora sieciowa

Zapora sieciowa to oprogramowanie (lub urządzenie sprzętowo-programowe), które kontroluje, które połączenia z serwerem są dozwolone, a które zablokowane. W zdecydowanej większości nowoczesnych dystrybucji serwerów Linux jakaś forma zapory sieciowej jest dostępna od razu po instalacji.
Niezawodne dostarczanie poczty do odbiorcy zależy nie tylko od samego serwera poczty, ale także od poprawnych rekordów DNS i konfiguracji zapory sieciowej. Jeśli coś jest z nimi nie tak, Twoje wiadomości najprawdopodobniej trafią do folderu Spam – lub nie zostaną dostarczone wcale.
Ten artykuł przedstawia kluczowe kroki, które pozwolą Ci osiągnąć prawie 100% niezawodność dostarczania wiadomości wysyłanych z Twojego serwera. W części 1 przejdziemy szczegółowo przez możliwe problemy związane z zaporą sieciową; w części 2 znajdziesz instrukcje dotyczące konfiguracji rekordów DNS.
Informacje zawarte w tym artykule dotyczą wyłącznie serwerów pocztowych działających na dystrybucjach Linux. Jako przykłady użyto Debian 12 i Rocky Linux 8.10 z panelem sterowania FASTPANEL.
Wymagania wstępne
Krok 1. Zainstaluj narzędzia diagnostyczne
Aby sprawdzić rekordy i porty, będziesz potrzebować:
-
dig – do analizy rekordów DNS
-
lsof – do sprawdzania stanu serwera poczty
-
netcat – do sprawdzania dostępności portów
-
whois – do sprawdzania bieżącego dostawcy DNS
Instalacja na 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
Dostępność portów pocztowych
Port to identyfikator numeryczny używany do adresowania różnych usług na serwerze. Każda usługa lub aplikacja nasłuchuje na własnym porcie w celu wymiany danych przez sieć (na przykład HTTP używa portu 80, a SMTP używa portu 25).
Aby wykonać wszystkie poniższe kroki, połącz się z serwerem przez SSH, używając danych uwierzytelniających użytkownika root lub używaj sudo podczas uruchamiania poleceń, tak jak pokazano w przykładach. Jak połączyć się z serwerem przez SSH, dowiesz się w naszym artykule o SSH.
Krok 2. Sprawdź stan serwera poczty
Zanim sprawdzisz, czy porty są dostępne w sieci, najpierw upewnij się, że serwery pocztowe działają poprawnie. Poczta wychodząca jest zazwyczaj obsługiwana przez Exim lub Postfix, a poczta przychodząca przez Dovecot.
Aby sprawdzić, czy działają, użyj poleceń:
sudo lsof -i:25
sudo lsof -i:143
Jeśli usługi są uruchomione, otrzymasz dane wyjściowe podobne do następujących:
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)
Jeśli Twój serwer używa innego serwera SMTP, na przykład Postfix, zamiast exim w pierwszej kolumnie zobaczysz jego dokładną nazwę. Jeśli to konieczne, użyj tej nazwy w kolejnych poleceniach.
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)
Oznacza to, że wszystko jest w porządku i możesz przejść do następnego kroku.
Jeśli usługi pocztowe nie działają, otrzymasz puste dane wyjściowe:
~ sudo lsof -i:25
~
~ sudo lsof -i:143
~
W tym przypadku coś jest nie tak i usługi pocztowe są niedostępne. Możesz spróbować uruchomić je ręcznie, a następnie sprawdzić ich stan:
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
W stanie uruchomionym stan usługi będzie wyglądał podobnie do:
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 email 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
W tym przypadku wszystko jest w porządku i możesz przejść do następnego kroku.
Jeśli coś jest nie tak z usługami, zobaczysz dane wyjściowe podobne do tych:
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 email 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)
Istnieje wiele możliwych przyczyn niedostępności usług (błędy w plikach konfiguracyjnych, przypadkowo usunięte pliki dziennika, brak wolnego miejsca na dysku serwera i wiele innych). Te aspekty wykraczają poza zakres tego artykułu.
Jeśli napotkasz ten problem i chcesz go zbadać samodzielnie, polecamy nasz artykuł o pracy z systemowym dziennikiem. Lub skontaktuj się z zespołem pomocy technicznej swojego dostawcy hostingu po pomoc. W kodu.cloud pracujemy 24/7 i odpowiadamy na zapytania w ciągu kilku minut.
Krok 3. Sprawdzanie dostępności portów pocztowych z sieci globalnej
Aby poczta działała poprawnie, następujące porty TCP muszą być dostępne przez sieć:
-
25, 465, 587 – do wysyłania poczty (SMTP)
-
143, 993 – do odbierania poczty (IMAP)
Ich dostępność można sprawdzić za pomocą netcat:
nc -vz 1.2.3.4 25
Zastąp 1.2.3.4 rzeczywistym adresem IP swojego serwera.
Jeśli port jest otwarty, otrzymasz następującą odpowiedź:
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 sent, 0 bytes received in 0.01 seconds.
Jeśli port jest zamknięty, odpowiedź będzie wyglądać tak:
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.
Uruchom to polecenie dla wszystkich portów wymienionych na początku tej sekcji. Jeśli wszystkie są dostępne, przejdź do drugiej części tego artykułu. Jeśli nie, przejdź do kroku 4, aby rozwiązać problem.
Krok 4. Otwieranie dostępu (opcjonalnie)
Najczęściej serwery używają iptables lub UFW jako zapory sieciowej do ochrony przed niepożądanymi połączeniami. Uruchom polecenie:
sudo ufw status
Jeśli otrzymasz następującą odpowiedź:
-bash: ufw: command not found
oznacza to, że używany jest iptables. Jeśli natomiast dane wyjściowe zaczynają się od:
Status: active
Oznacza to, że używany jest UFW.
Przejdź do odpowiedniej podsekcji tego kroku, zgodnie z używaną zaporą sieciową.
Istnieją inne oprogramowania do zarządzania zaporą sieciową systemu w Linuksie (nftables, firewalld i inne). Nie będą one omawiane w tym artykule, aby nie zwiększać jego rozmiaru.
Iptables
W tej sekcji wszystkie przykłady dotyczą tylko IPv4. Jeśli Twój serwer posiada adres IPv6 i chcesz, aby porty pocztowe były dostępne również przez IPv6, dodatkowo powtórz wszystkie polecenia, używając ip6tables zamiast iptables.
Aby wyświetlić wszystkie bieżące reguły, uruchom:
sudo iptables -L -v -n --line-numbers
Dane wyjściowe mogą się różnić w zależności od zestawu reguł dodanych na serwerze. Domyślnie nie ma żadnych reguł, ale w zależności od konfiguracji hostingu lub systemu operacyjnego, jakaś konfiguracja mog ła zostać już wykonana. Rozważmy dwa główne przypadki, które często napotykamy podczas konfigurowania serwera poczty.
- Polityka „Na wszystko, co nie jest zabronione, zezwalaj” (polityka ACCEPT)
W tym przypadku zapora sieciowa domyślnie zezwala na cały ruch, dopóki nie zostanie utworzona reguła wyraźnie blokująca go. Ta polityka jest zwykle używana domyślnie.
Poniżej znajduje się przykład zestawu reguł, w których zablokowano porty SSH i pocztowe:
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
W tym przykładzie:
-
Polityka ACCEPT definiuje domyślne zachowanie: wszystkie połączenia są dozwolone, chyba że określono inaczej.
-
Chain INPUT (połączenia przychodzące): nowe połączenia na port 22 (SSH) i na wszystkie standardowe porty pocztowe (SMTP: 25, 465, 587; IMAP: 143; IMAPS: 993) są zablokowane.
-
Chain OUTPUT (połączenia wychodzące): pakiety wychodzące na te same porty są zablokowane.
Numer reguły jest pokazany na początku linii (num). Jeśli chcesz usunąć, na przykład, regułę blokującą porty pocztowe w łańcuchu INPUT (reguła numer 2), polecenie będzie wyglądać tak:
sudo iptables -D INPUT 2
Tutaj:
-
-D – to polecenie usunięcia reguły.
-
INPUT – to łańcuch, z którego usuwana jest reguła (w tym przypadku ruch przychodzący).
-
2 – to numer linii, w której znajduje się reguła, którą chcesz usunąć.
Podobnie, aby usunąć blokadę portów wychodzących z tego przykładu, musisz uruchomić:
sudo iptables -D OUTPUT 1
Numery linii w wynikach iptables -L -v -n --line-numbers mogą się zmienić, jeśli dodasz lub usuniesz inne reguły. Dlatego, jeśli dodasz nowe reguły, numery linii mogą się przesunąć. Aby uniknąć błędów, zawsze sprawdzaj bieżące numery linii przed usunięciem reguły.
Po tym, aby upewnić się, że wszystko jest poprawne, ponownie uruchom polecenie:
iptables -L -v -n --line-numbers
Wynik nie powinien zawierać reguł blokujących działanie portów pocztowych:
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
Jeśli reguły nadal istnieją, sprawdź poprawność wprowadzonych poleceń i numery linii.
Po zmianie reguł zapory sieciowej pamiętaj o ich zapisaniu; w przeciwnym razie zostaną utracone po ponownym uruchomieniu systemu. Aby zapisać bieżące reguły iptables, uruchom:
Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4
CentOS/AlmaLinux/Rocky Linux:
iptables-save > /etc/sysconfig/iptables
Następnie ponownie przetestuj dostępność portów pocztowych, jak opisano w Kroku 3. Jeśli nadal są niedostępne, przejdź do Kroku 5. Jeśli wszystko jest w porządku, przejdź do drugiej części tego artykułu.
- Polityka „Blokuj wszystko, co nie jest wyraźnie dozwolone” (polityka DROP)**
Ten typ konfiguracji jest znacznie bardziej rygorystyczny. Domyślnie blokowane są wszystkie porty i protokoły, a ruch jest przepuszczany tylko przez wyraźne reguły zezwalające. Jest to bezpieczniejsze i zalecane podejście dla serwerów, zwłaszcza jeśli chcesz zminimalizować ryzyko.
Przykład reguł dla takiej konfiguracji:
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
W tym przykładzie:
- Chain INPUT (połączenia przychodzące): polityka to DROP, czyli wszystkie pakiety są blokowane domyślnie, z wyjątkiem tych dla których istnieją reguły zezwalające.
Reguła 1: ACCEPT state RELATED,ESTABLISHED – zezwala na przychodzące pakiety, które są związane z istniejącymi połączeniami lub są z nimi skojarzone. Jest to ważne, aby serwer poprawnie odbierał odpowiedzi na połączenia wychodzące (np. SSH, poczta, zapytania DNS).
Reguła 2: ACCEPT tcp dpt:22 – zezwala na nowe przychodzące połączenia na porcie 22 (SSH).
- Chain OUTPUT (połączenia wychodzące): polityka to DROP, czyli wszystkie pakiety wychodzące są blokowane domyślnie.
Reguła 1: ACCEPT state RELATED,ESTABLISHED – zezwala na pakiety wychodzące, które są związane z istniejącymi połączeniami. Umożliwia to serwerowi odpowiadanie na żądania klientów (np. połączenia SSH, poczty) i utrzymanie stabilnego połączenia.
Widzimy zatem, że nie ma reguł zezwalających na porty pocztowe. Aby je dodać, uruchom następujące polecenia:
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
Następnie zapisz reguły:
Debian/Ubuntu:
iptables-save > /etc/iptables/rules.v4
CentOS/AlmaLinux/Rocky Linux:
iptables-save > /etc/sysconfig/iptables
Następnie ponownie przetestuj dostępność portów pocztowych, jak opisano w Kroku 3. Jeśli nadal są niedostępne, przejdź do Kroku 5. Jeśli wszystko jest w porządku, przejdź do drugiej części tego artykułu.
UFW (Uncomplicated Firewall)
Na niektórych serwerach zamiast iptables używane jest UFW – uproszczony interfejs do konfiguracji zapory sieciowej. Nadaje się do podstawowej konfiguracji serwera pocztowego i często występuje na Ubuntu i Debianie.
Aby sprawdzić, czy UFW jest włączone i które reguły są aktywne, uruchom:
sudo ufw status verbose
Przykładowe dane wyjściowe:
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing)
New profiles: skip
Tutaj:
-
Default: deny (incoming) – domyślnie wszystkie połączenia przychodzące są blokowane.
-
Default: allow (outgoing) – domyślnie wszystkie połączenia wychodzące są dozwolone.
Aby serwer pocztowy działał poprawnie, należy otworzyć standardowe porty. Uruchom następujące polecenia w sekwencji:
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
Jeśli masz również ograniczenia wychodzące, musisz zezwolić na porty SMTP dla poczty wychodzącej:
sudo ufw allow out 25/tcp
sudo ufw allow out 465/tcp
sudo ufw allow out 587/tcp
Po dodaniu reguł możesz je ponownie sprawdzić:
sudo ufw status numbered
Zobaczysz listę reguł z numerami. Jeśli musisz usunąć regułę, użyj numeru z danych wyjściowych:
sudo ufw delete 3
W UFW reguły są zapisywane automatycznie i pozostaną w mocy po ponownym uruchomieniu systemu.
Następnie ponownie przetestuj dostępność portów pocztowych, jak opisano w Kroku 3. Jeśli nadal są niedostępne, przejdź do Kroku 5. Jeśli wszystko jest w porządku, przejdź do drugiej części tego artykułu.
Krok 5. Zapora sieciowa jest poprawnie skonfigurowana, ale porty pocztowe są nadal niedostępne (opcjonalnie)
Takie zachowanie wskazuje, że porty pocztowe są blokowane nie na poziomie Twojego serwera, ale na sprzęcie Twojego dostawcy hostingu. W takim przypadku utwórz zgłoszenie do pomocy technicznej i poproś o odblokowanie tych portów dla Twojego serwera. Jeśli nie jest to możliwe, jedynym rozwiązaniem będzie zmiana dostawcy hostingu.
W kodu.cloud w żaden sposób nie ograniczamy działania portów pocztowych. Nasze zasady zabraniają masowej wysyłki, ale dla uczciwych klientów poczta jest dostępna w pełnym zakresie. Nie musisz nawet konfigurować serwera poczty, ponieważ wszyscy nasi klienci otrzymują darmowy dostęp do panelu sterowania FASTPANEL z rozszerzoną licencją. Zamów serwer z panelem sterowania i zacznij używać poczty na własnej domenie w ciągu zaledwie kilku minut.
Kolejne kroki dotyczące prawidłowej konfiguracji rekordów DNS zostaną omówione w drugiej części tego artykułu.