NetSendo
Guides & Tips

Zablokowany port 25 na VPS? Jak mimo to wysyłać maile

NetSendo Team12 min czytania
Zablokowany port 25 na VPS? Jak mimo to wysyłać maile

Jeśli Twój VPS nie wysyła maili, najpewniej dostawca chmury zablokował wychodzący port 25 — i u większości z nich blokada zostaje, dopóki nie poprosisz o jej zdjęcie, a czasem nie da się jej zdjąć wcale. Rozwiązanie, które działa praktycznie wszędzie, to rezygnacja z bezpośredniej wysyłki z serwera i przekazywanie poczty do uwierzytelnionego przekaźnika SMTP (relay) na porcie 587, 465 albo 2525. Port 25 jest Ci potrzebny tylko wtedy, gdy uruchamiasz własny serwer MTA, który doręcza pocztę prosto do serwerów odbiorców.

W skrócie: Sprawdź to poleceniem nc -vz -w 5 gmail-smtp-in.l.google.com 25: przekroczony czas oznacza, że port 25 jest filtrowany. DigitalOcean blokuje porty 25, 465 i 587 na każdym Droplecie; Hetzner Cloud blokuje 25 i 465, ale zostawia otwarty 587; AWS, Google Cloud, Azure (poza umowami enterprise) i Vultr domyślnie blokują 25. Wysyłaj przez relay, np. Amazon SES albo Mailgun, na porcie 587 (lub 2525/2587, gdy 587 też jest zamknięty), albo poproś o odblokowanie, jeśli naprawdę potrzebujesz bezpośredniego doręczania. Sam otwarty port nie wystarczy do skrzynki odbiorczej: potrzebujesz jeszcze PTR, SPF, DKIM, DMARC i rozgrzanego adresu IP.

Jak sprawdzić, czy port 25 jest zablokowany na VPS?

Otwórz z serwera połączenie TCP do prawdziwego serwera pocztowego (MX) na porcie 25: powitanie 220 oznacza, że port jest otwarty, a przekroczony czas — że ruch odrzuca dostawca albo Twój własny firewall. Ten sam test zrób dla swojego przekaźnika na portach 587 i 465, żeby przed zmianą konfiguracji wiedzieć, która droga jest dostępna.

Krok 1: znajdź serwer MX do testu

# rekordy MX dużego dostawcy poczty
dig +short MX gmail.com
# 5 gmail-smtp-in.l.google.com.
# 10 alt1.gmail-smtp-in.l.google.com.
# ...

Krok 2: sprawdź wychodzący port 25

# netcat: -v szczegóły, -z tylko połączenie, -w 5 rezygnacja po 5 sekundach
nc -vz -w 5 gmail-smtp-in.l.google.com 25

# bez netcata: odczyt powitania SMTP przez /dev/tcp w bashu
timeout 10 bash -c 'exec 3<>/dev/tcp/gmail-smtp-in.l.google.com/25 && head -1 <&3' || echo "port 25 is blocked"

Jak czytać wynik:

Co widziszCo to znaczyCo dalej
220 mx.google.com ESMTP …Port 25 jest otwarty na całej trasieBezpośrednie doręczanie jest możliwe; sprawdź PTR i reputację
Zawieszenie, potem timed outPakiety są po cichu odrzucane — typowa blokada dostawcySprawdź zasady dostawcy poniżej i własne reguły ruchu wychodzącego
Connection refusedCoś aktywnie odrzuca połączenie (często lokalny firewall albo proxy)Sprawdź ufw/nftables i ewentualne proxy
Name or service not knownProblem z DNS, nie z portemNajpierw napraw resolver

Krok 3: sprawdź relay na portach submission

Porty do wysyłki przez dostawcę (submission) używają TLS, więc testuj je narzędziem openssl s_client. Port 587 zaczyna jawnym tekstem i przechodzi na szyfrowanie przez STARTTLS; port 465 szyfruje od pierwszego bajtu.

# 587 ze STARTTLS (Amazon SES, przykładowo endpoint eu-west-1)
openssl s_client -starttls smtp -connect email-smtp.eu-west-1.amazonaws.com:587 -crlf -quiet
# oczekuj łańcucha certyfikatów i linii "250 ..."; wyjdź poleceniem QUIT

# 465 z TLS od początku połączenia
openssl s_client -connect email-smtp.eu-west-1.amazonaws.com:465 -crlf -quiet

# porty zastępcze, gdy 587 i 465 też są zablokowane (np. DigitalOcean)
nc -vz -w 5 email-smtp.eu-west-1.amazonaws.com 2587
nc -vz -w 5 smtp.mailgun.org 2525
💡 Wskazówka: Każdy test wykonaj dwa razy: z nc -4 i z nc -6. Dostawcy potrafią inaczej filtrować IPv4 i IPv6, a Twój MTA chętnie spróbuje najpierw rekordu AAAA.

Którzy dostawcy chmury blokują port 25?

Większość dużych chmur domyślnie blokuje wychodzący port 25 na nowych serwerach, a różnią się głównie tym, czy da się blokadę zdjąć. Najostrzejszy jest DigitalOcean, bo blokuje też porty 465 i 587; Hetzner Cloud i Vultr rozpatrują prośby indywidualnie; AWS ma formularz; Google Cloud sam zdejmuje blokadę w projekcie, który uzna za mało ryzykowny.

DostawcaWychodzący 25 domyślnie465 / 587Czy da się odblokować?
DigitalOcean (Droplety)✗ Zablokowany✗ Oba zablokowane, także przez Reserved IPDokumentacja nie opisuje odblokowania i zaleca zewnętrzną usługę pocztową (DigitalOcean)
Hetzner Cloud✗ Zablokowany465 zablokowany, ✓ 587 otwarty~ Po miesiącu i opłaceniu pierwszej faktury, przez „limit request” w Hetzner Console, decyzja indywidualna (Hetzner)
AWS EC2 i Lambda✗ Zablokowany, chyba że konto jest na liście dozwolonych✓ Otwarte~ Formularz, osobna prośba dla każdego regionu (AWS)
Google Cloud Compute Engine✗ Zablokowany do adresów zewnętrznych✓ Wyłączone z blokady~ Zdejmowana automatycznie, gdy Google uzna projekt za mało ryzykowny; stan pokazuje baner na stronie VPC networks (Google Cloud)
Azure (maszyny wirtualne)✓ Otwarty przy Enterprise Agreement i MCA-E; ✗ zablokowany przy pozostałych typach subskrypcji✓ 587 do uwierzytelnionych przekaźników bez ograniczeńEnterprise Dev/Test: samodzielne zwolnienie w Diagnose and Solve; pozostałe: relay (Microsoft)
Vultr✗ Zablokowany na nowych instancjach✓ Otwarte~ Zgłoszenie do supportu z opisem zastosowania, SPF/DKIM, limitów i wolumenu; bez gwarancji (Vultr)

Stan na listopad 2026, sprawdzony w dokumentacji każdego dostawcy 12 listopada 2026. Zasady się zmieniają — zanim zaufasz tej tabeli, zrób test z poprzedniej sekcji.

Mniejsi i polscy dostawcy (np. OVH, home.pl, nazwa.pl) mają własne reguły i nie zawsze je publikują. Jeśli bezpośrednie doręczanie jest dla Ciebie warunkiem koniecznym, zapytaj przed zakupem i zrób test nc pierwszego dnia.

Port 25, 587, 465 czy 2525: do czego służy każdy z nich?

Port 25 służy do doręczania między serwerami: Twój MTA łączy się z serwerem MX odbiorcy i przekazuje wiadomość bez logowania. Porty 587 i 465 służą do nadawania (submission): aplikacja albo klient poczty loguje się u swojego dostawcy, a ten doręcza wiadomość na porcie 25 ze swoich adresów o ustalonej reputacji. Port 2525 (oraz 2587/2465 w Amazon SES) to nieoficjalna alternatywa, którą przekaźniki udostępniają sieciom blokującym porty standardowe.

Nadawanie, przekazywanie, doręczanie

Nadawanie (submission) to uwierzytelnione przekazanie poczty z aplikacji do usługi pocztowej (587/465). Przekazywanie (relay) to wysyłka tej poczty przez usługę w Twoim imieniu. Doręczanie to ostatni krok SMTP do serwera MX odbiorcy na porcie 25. Gdy port 25 jest zablokowany, zostawiasz u siebie nadawanie, a doręczanie zlecasz.

PortZastosowanieSzyfrowanieLogowanie
25Doręczanie MTA → MX (przekaźniki też go przyjmują)Opcjonalny STARTTLSBrak wobec MX
587Nadawanie do dostawcySTARTTLSWymagane
465Nadawanie z TLS od początkuTLS od pierwszego bajtuWymagane
2525 / 2587 / 2465Zastępcze porty nadawania u części przekaźnikówSTARTTLS (2525, 2587) albo TLS (2465)Wymagane

Amazon SES przyjmuje STARTTLS na portach 25, 587 i 2587 oraz TLS Wrapper na 465 i 2465 (dokumentacja AWS SES); Mailgun przyjmuje 25, 465, 587 i 2525 (dokumentacja Mailgun). Dlatego Droplet, który nie dosięga portu 587, zwykle nadal połączy się z przekaźnikiem na 2525 albo 2587.

Co zrobić, gdy port 25 jest zablokowany?

Masz trzy realne wyjścia: przekaźnik pocztowy na porcie submission, prośbę do dostawcy o zdjęcie blokady albo przeniesienie bezpośredniej wysyłki na serwer, który ją dopuszcza. Dla aplikacji wysyłającej newslettery, maile transakcyjne czy powiadomienia w większości przypadków właściwy jest przekaźnik.

Opcja 1: relay przez dostawcę wysyłki (ESP) na 587, 465 lub 2525

Utwórz dane logowania SMTP u przekaźnika (Amazon SES, Mailgun, SendGrid, Postmark, SMTP2GO lub podobnego), zweryfikuj tam swoją domenę i wskaż aplikacji serwer przekaźnika. Minimalna konfiguracja Postfiksa przekazująca całą pocztę do Amazon SES wygląda tak:

# /etc/postfix/main.cf (istotne linie)
relayhost = [email-smtp.eu-west-1.amazonaws.com]:587
smtp_sasl_auth_enable = yes
smtp_sasl_password_maps = hash:/etc/postfix/sasl_passwd
smtp_sasl_security_options = noanonymous
smtp_tls_security_level = encrypt

# /etc/postfix/sasl_passwd
[email-smtp.eu-west-1.amazonaws.com]:587 SMTP_USERNAME:SMTP_PASSWORD

# potem
sudo postmap /etc/postfix/sasl_passwd
sudo chmod 600 /etc/postfix/sasl_passwd /etc/postfix/sasl_passwd.db
sudo systemctl reload postfix

Na DigitalOcean zamień :587 na :2587 dla SES albo użyj smtp.mailgun.org:2525, bo Droplet nie dosięga portu 587. Pełną instrukcję dla SES, z wyjściem z sandboxa i rekordami DNS, znajdziesz w naszym poradniku konfiguracji Amazon SES SMTP.

✅ Zalety

  • Działa u każdego dostawcy z tabeli, zwykle w kilka minut
  • Adresy IP przekaźnika mają już historię wysyłki
  • Odbicia, skargi i lista wykluczeń są obsługiwane za Ciebie

❌ Na co uważać

  • Koszt za wiadomość i limity samego przekaźnika
  • Adresy odbiorców przetwarza kolejna firma — wpisz ją do rejestru czynności przetwarzania (RODO)
  • Współdzielone IP niosą reputację innych nadawców

Opcja 2: prośba o odblokowanie

Wybierz ją, gdy świadomie uruchamiasz własny MTA, np. żeby wysyłać z dedykowanych adresów IP. W następnej sekcji znajdziesz gotową treść. Licz się z ręczną weryfikacją, wymogiem stażu konta i możliwą odmową.

Opcja 3: doręczanie z innego serwera

Zostaw aplikację tam, gdzie jest, a sam MTA postaw u dostawcy lub na serwerze dedykowanym, który dopuszcza port 25, i nadawaj do niego na 587 przez sieć. Bierzesz wtedy na siebie wszystko, co zwykle robi przekaźnik: PTR, rozgrzewanie IP, monitorowanie czarnych list i obsługę odbić.

Jak poprosić dostawcę o odblokowanie portu 25?

Napisz krótką, konkretną prośbę, która pokazuje, że wysyłasz oczekiwaną pocztę, masz uwierzytelnianie i potrafisz zatrzymać nadużycia. Dostawcy czytają takie prośby ręcznie i odrzucają ogólnikowe, więc najpierw przygotuj DNS: rekord A dla nazwy hosta wysyłającego i — tam, gdzie da się go ustawić — rekord PTR wskazujący z powrotem na tę nazwę.

  1. Przygotuj DNS

    Utwórz mail.example.com → IP serwera, ustaw reverse DNS na mail.example.com w panelu dostawcy (AWS: na Elastic IP; formularz ma opcjonalne pole rDNS) i opublikuj SPF, DKIM i DMARC dla domeny nadawczej.

  2. Sprawdź warunki formalne

    Hetzner Cloud wymaga konta starszego niż miesiąc i opłaconej pierwszej faktury; AWS — osobnej prośby dla każdego regionu; Vultr pyta o SPF/DKIM, limity i wolumen.

  3. Wyślij prośbę

    Formularzem albo zgłoszeniem w systemie dostawcy, nie wpisem na forum.

  4. Przetestuj ponownie

    Niektórzy dostawcy wymagają restartu albo zatrzymania i uruchomienia maszyny, żeby nowa polityka zadziałała (Azure pisze o tym wprost przy zwolnionych subskrypcjach).

Prośba, która odpowiada na typowe pytania (dostawcy obsługują je zwykle po angielsku):

Subject: Request to allow outbound SMTP (TCP 25) for server 203.0.113.10

We run a self-hosted email platform for our own company (example.com) on this
server. It sends opt-in newsletters and transactional emails (order and account
notifications) to people who subscribed through a double opt-in form.

- Sending host: mail.example.com (A record and PTR set to 203.0.113.10)
- SPF, DKIM and DMARC (p=quarantine) are published for example.com
- Expected volume: about 2,000 messages per day, rate-limited to 300 per hour
- Every message has a one-click unsubscribe link; bounces and complaints are
  suppressed automatically
- Abuse contact: postmaster@example.com

Please remove the outbound port 25 restriction for this server.

Podawaj prawdziwe liczby. Ogólnikową prośbę łatwo odrzucić, a dostawca może przywrócić blokadę, jeśli później napłyną skargi.

Dlaczego otwarty port 25 nie wystarczy?

Bo serwer odbiorcy ocenia adres IP, a nie samo połączenie: bez pasującego rekordu PTR, uwierzytelnionej domeny i historii wysyłki świeży adres z chmury zostanie odrzucony albo trafi do spamu. Gmail, Yahoo i Microsoft wymagają uwierzytelniania od nadawców masowych, a zgodny w obie strony reverse DNS jest częścią tego obrazu.

PTR (reverse DNS)

dig +short -x 203.0.113.10        # powinno zwrócić mail.example.com.
dig +short A mail.example.com     # powinno zwrócić 203.0.113.10
# nazwa HELO/EHLO Twojego MTA powinna być tą samą nazwą hosta

Ogólna nazwa PTR nadana przez dostawcę albo brak PTR to częsty powód odrzuceń. Jeśli widzisz błąd Gmaila 550-5.7.26 albo podobne błędy uwierzytelniania, przejdź przez nasz poradnik o błędzie Gmail 550-5.7.26.

Reputacja IP i rozgrzewanie

Nowy adres IP nie ma historii, a zakresy chmurowe bywają traktowane podejrzliwie. Zacznij od małych dziennych wolumenów do najbardziej zaangażowanych odbiorców i zwiększaj je stopniowo przez kolejne tygodnie, pilnując odbić i skarg. Plan rozgrzewania i wymagania Gmaila, Yahoo i Outlooka zestawione obok siebie znajdziesz w poradniku o dostarczalności dla nadawców self-hosted.

Obciążenie operacyjne

Bezpośrednie doręczanie oznacza też samodzielną obsługę odroczeń (4xx), ponowień, pętli zwrotnych (feedback loops) i kontroli czarnych list. Jeśli to więcej pracy niż powód, dla którego chciałeś portu 25, wybierz przekaźnik.

Docker, firewall i IPv6: test na hoście przechodzi, a maile nie wychodzą

Udany test na hoście nie dowodzi, że kontener dosięgnie tego samego portu — i odwrotnie. Kontenery w sieci bridge Dockera wychodzą przez NAT w łańcuchu FORWARD, a procesy hosta przez OUTPUT, więc reguły ruchu wychodzącego mogą działać na jedno, a na drugie nie.

  • Testuj z kontenera, który faktycznie wysyła. Wiele obrazów aplikacji ma PHP lub Pythona, ale nie ma nc; to polecenie działa w każdym kontenerze z PHP:
    docker compose exec app php -r '$s=@fsockopen("email-smtp.eu-west-1.amazonaws.com",587,$e,$m,5); echo $s ? fgets($s) : "failed: $m\n";'
  • ufw z default deny outgoing blokuje hosta, a reguły dodane przez ufw allow out 587/tcp dotyczą ruchu hosta. Ruch wychodzący kontenerów przechodzi przez łańcuchy Dockera; jeśli chcesz go ograniczać, rób to w DOCKER-USER.
  • Firewalle chmurowe (security groups, Hetzner Firewalls, reguły egress w VPC) działają niezależnie od ogólnej blokady dostawcy. W Google Cloud, jeśli dodałeś regułę blokującą cały ruch wychodzący, potrzebujesz reguły zezwalającej na port relaya.
  • IPv6: domyślna sieć bridge Dockera działa tylko na IPv4, więc kontenery zwykle łączą się przez IPv4, nawet gdy host ma IPv6. MTA w sieci hosta może jednak preferować rekordy AAAA — wtedy adres IPv6 potrzebuje własnego PTR i tych samych testów.
  • DNS w kontenerach: gdy kontener nie rozwiązuje nazwy przekaźnika, błąd wygląda jak awaria sieci. Sprawdź to przez docker compose exec app getent hosts email-smtp.eu-west-1.amazonaws.com.

Wysyłka z NetSendo przy zablokowanym porcie 25

NetSendo wysyła kampanie przez skrzynki dodane w panelu, a skrzynka SMTP (host, port, użytkownik, hasło, szyfrowanie) podłączona do przekaźnika takiego jak Amazon SES czy Mailgun działa na porcie 587, 465 albo porcie zastępczym — zablokowany port 25 jej nie dotyczy. Zmienne opisuje dokumentacja konfiguracji; NetSendo nie narzuca własnych limitów wysyłki, więc o wolumenie decyduje przekaźnik.

Opcjonalny NetSendo MTA (NMI, kontener Haraka uruchamiany przez docker compose --profile nmi up -d, funkcja planu GOLD) działa inaczej: doręcza pocztę prosto do serwerów odbiorców, więc potrzebuje wychodzącego portu 25 i rekordu PTR dla każdego adresu IP, z którego wysyła. Gdy port jest zablokowany, MTA przyjmuje pocztę, ale nie może jej doręczyć, a docker logs netsendo-mta pokazuje przekroczenia czasu połączenia. Od wersji 2.9.0 ekran Ustawienia → Mail Infrastructure → Configure Providers opisuje zasady portu 25 u każdego dostawcy adresów IP, a zmienna NMI_HELO_HOST ustawia nazwę HELO, która powinna zgadzać się z rekordem PTR.

📌 Najważniejsze

  • Przekroczony czas przy nc -vz host 25 to port filtrowany; powitanie 220 — otwarty.
  • Używaj przekaźnika na 587/465 (2525/2587 na DigitalOcean), chyba że świadomie prowadzisz własny MTA.
  • Prośba o odblokowanie wymaga gotowego DNS i uczciwych liczb; zgoda nigdy nie jest pewna.
  • Otwarty port to dopiero początek: o skrzynce odbiorczej decydują PTR, SPF, DKIM, DMARC i rozgrzewanie.

🎯 Rady eksperta

1
Testuj przed migracją

Uruchom najtańszą instancję w docelowym regionie i zrób testy nc oraz openssl, zanim cokolwiek przeniesiesz.

2
Rozdziel przekaźnik i MTA

Maile transakcyjne wysyłaj przez przekaźnik, nawet jeśli newslettery idą przez własny MTA — problem z reputacją jednej drogi nie zatrzyma wtedy resetów hasła.

3
Loguj rozmowę SMTP

Przy pierwszych wysyłkach włącz logowanie debug SMTP. Dokładny kod odpowiedzi powie Ci, czy to blokada sieci, błąd logowania czy filtr reputacji.

4
Testuj po każdej zmianie infrastruktury

Nowy firewall, nowy adres IP albo przeprowadzka do innego regionu mogą przywrócić blokadę, którą już raz zdjęto.

Najczęściej zadawane pytania

Jak sprawdzić, czy port 25 jest zablokowany na VPS?

Uruchom na serwerze nc -vz -w 5 gmail-smtp-in.l.google.com 25. Powitanie 220 albo komunikat 'succeeded' oznacza otwarty port; przekroczony czas oznacza, że port 25 filtruje dostawca albo firewall.

Dlaczego dostawcy chmury blokują port 25?

Port 25 służy do doręczania poczty między serwerami, a przejęte lub nadużywane serwery w chmurze są częstym źródłem spamu. Domyślna blokada chroni zakresy IP dostawcy przed czarnymi listami.

Czy zamiast portu 25 mogę użyć portu 587?

Tak, jeśli wysyłasz przez przekaźnik lub usługę pocztową przyjmującą uwierzytelnioną wysyłkę na 587. Port 587 nie zastąpi 25 przy doręczaniu prosto do serwerów MX odbiorców, które nasłuchują tylko na 25.

Czy DigitalOcean odblokowuje port 25?

Dokumentacja DigitalOcean podaje, że porty 25, 465 i 587 są domyślnie zablokowane na wszystkich Dropletach, i nie opisuje odblokowania; zaleca zewnętrzną usługę pocztową. Typowym obejściem są przekaźniki przyjmujące porty 2525 lub 2587.

Czy otwarty port 25 wystarczy do niezawodnej wysyłki?

Nie. Serwery odbiorców sprawdzają też zgodny rekord PTR, SPF, DKIM, DMARC i historię wysyłki z danego IP. Nowy adres w chmurze wymaga stopniowego rozgrzewania, zanim większe wolumeny trafią do skrzynek.

Źródła

Wysyłaj z własnego serwera, przez wybrany przez siebie przekaźnik

NetSendo działa na Twoim serwerze w Dockerze i wysyła przez przekaźniki SMTP, Gmail API, SendGrid albo własny MTA, bez własnych limitów wysyłki.

#smtp#port 25#vps#deliverability#self-hosting
Udostępnij