Menu
Szybki wybór
Hosting Domeny VPS SSL Kalkulator Porównania FAQ
Aktywne kody
Wszystkie kody rabatowe

Postfix — konfiguracja serwera SMTP na VPS

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS / Email

Postfix to najpopularniejszy MTA (Mail Transfer Agent) dla systemów Linux — szybki, bezpieczny i dobrze udokumentowany. Konfiguracja własnego serwera SMTP na VPS daje pełną kontrolę nad dostarczalnością i nagłówkami emaili, choć wymaga kilku kroków: TLS, DKIM i właściwej konfiguracji DNS. Oto kompletny przewodnik od zera.

Własny Postfix vs relay service — kiedy co wybrać?

Cecha Własny Postfix Relay service (SendGrid/SES)
Koszt Darmowy (tylko VPS) $0.10/1000 (SES) lub $15+/mies (SendGrid)
Dostarczalność Zależy od reputacji IP Wysoka (dedykowane IP z dobrą reputacją)
Konfiguracja Wymagana (TLS, DKIM, SPF) Minimalna (DNS + API key)
Bounce/unsubscribe Własna implementacja Wbudowany (webhook)
Kiedy używać Transakcyjne emaile, duże wolumeny, legacy Marketing, wysoka dostarczalność bez konfiguracji

Instalacja Postfix (Ubuntu/Debian)

# Instalacja Postfix i narzędzi
sudo apt update
sudo apt install postfix mailutils swaks -y
# Podczas instalacji wybierz: "Internet Site"
# System mail name: twojadomena.pl

# Sprawdź status
sudo systemctl status postfix

# Wyślij testowy email (lokalnie)
echo "Test Postfix" | mail -s "Test" root@localhost

Konfiguracja main.cf

Główny plik konfiguracji Postfixa to /etc/postfix/main.cf. Poniżej kluczowe dyrektywy dla typowego serwera VPS:

# /etc/postfix/main.cf

# --- IDENTYFIKACJA SERWERA ---
myhostname = mail.twojadomena.pl    # FQDN serwera (musi być w DNS jako A record)
mydomain = twojadomena.pl
myorigin = $mydomain

# --- SIEĆ ---
inet_interfaces = all               # Nasłuchuj na wszystkich interfejsach
inet_protocols = ipv4               # lub "all" dla IPv4+IPv6
mydestination = $myhostname, localhost.$mydomain, localhost, $mydomain

# --- RELAY ---
# mynetworks — kto może wysyłać bez auth (localhost i sieci prywatne)
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

# relayhost — jeśli chcesz użyć smarthost (SES jako relay)
# relayhost = [email-smtp.eu-west-1.amazonaws.com]:587

# --- ROZMIAR ---
message_size_limit = 52428800       # Maks. rozmiar wiadomości: 50 MB
mailbox_size_limit = 0              # Bez limitu skrzynki (jeśli lokalna)

# --- TLS ---
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.twojadomena.pl/fullchain.pem
smtpd_tls_key_file  = /etc/letsencrypt/live/mail.twojadomena.pl/privkey.pem
smtpd_use_tls = yes
smtpd_tls_security_level = may      # Akceptuj TLS jeśli klient obsługuje
smtp_tls_security_level = may       # Używaj TLS przy wysyłaniu jeśli możliwe
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtp_tls_session_cache_database  = btree:${data_directory}/smtp_scache

# --- POLITYKA ANTYSPAMOWA ---
smtpd_recipient_restrictions =
    permit_mynetworks,
    reject_unauth_destination

# --- ALIAS ---
alias_maps = hash:/etc/aliases
alias_database = hash:/etc/aliases
# Zastosuj konfigurację
sudo postfix check          # Sprawdź błędy składni
sudo systemctl reload postfix

Certyfikat TLS (Let's Encrypt)

# Instalacja certbota i certyfikatu dla subdomeny mail.*
sudo apt install certbot -y
sudo certbot certonly --standalone -d mail.twojadomena.pl

# Certyfikat w /etc/letsencrypt/live/mail.twojadomena.pl/
# fullchain.pem — certyfikat + łańcuch CA
# privkey.pem   — klucz prywatny

# Upewnij się że postfix może czytać klucz prywatny
sudo adduser postfix ssl-cert
# lub:
sudo chmod 640 /etc/letsencrypt/live/mail.twojadomena.pl/privkey.pem
sudo chown root:postfix /etc/letsencrypt/live/mail.twojadomena.pl/privkey.pem

OpenDKIM — podpisywanie emaili

DKIM (DomainKeys Identified Mail) dodaje kryptograficzny podpis do każdego emaila — serwery odbiorców mogą zweryfikować że wiadomość naprawdę pochodzi z Twojej domeny:

# Instalacja OpenDKIM
sudo apt install opendkim opendkim-tools -y

# Konfiguracja /etc/opendkim.conf
sudo tee /etc/opendkim.conf <<'DKIM_EOF'
AutoRestart             Yes
AutoRestartRate         10/1h
Syslog                  yes
SyslogSuccess           Yes
LogWhy                  Yes
Canonicalization        relaxed/simple
ExternalIgnoreList      refile:/etc/opendkim/TrustedHosts
InternalHosts           refile:/etc/opendkim/TrustedHosts
KeyTable                refile:/etc/opendkim/KeyTable
SigningTable            refile:/etc/opendkim/SigningTable
Mode                    sv
PidFile                 /run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256
UserID                  opendkim:opendkim
Socket                  inet:12301@localhost
DKIM_EOF

# Utwórz klucze DKIM
sudo mkdir -p /etc/opendkim/keys/twojadomena.pl
sudo opendkim-genkey \
    -s mail \
    -d twojadomena.pl \
    -D /etc/opendkim/keys/twojadomena.pl/
sudo chown opendkim:opendkim /etc/opendkim/keys/twojadomena.pl/mail.private

# KeyTable i SigningTable
echo "mail._domainkey.twojadomena.pl twojadomena.pl:mail:/etc/opendkim/keys/twojadomena.pl/mail.private" | sudo tee /etc/opendkim/KeyTable
echo "@twojadomena.pl mail._domainkey.twojadomena.pl" | sudo tee /etc/opendkim/SigningTable
printf "127.0.0.1\nlocalhost\n.twojadomena.pl\n" | sudo tee /etc/opendkim/TrustedHosts
# Pobierz wartość rekordu DNS TXT dla DKIM
cat /etc/opendkim/keys/twojadomena.pl/mail.txt
# Dodaj ten rekord DNS: mail._domainkey.twojadomena.pl TXT "v=DKIM1; k=rsa; p=..."

# Podłącz OpenDKIM do Postfixa (main.cf)
sudo postconf -e "milter_protocol = 2"
sudo postconf -e "milter_default_action = accept"
sudo postconf -e "smtpd_milters = inet:localhost:12301"
sudo postconf -e "non_smtpd_milters = inet:localhost:12301"

# Uruchom i załaduj
sudo systemctl enable --now opendkim
sudo systemctl reload postfix

Testowanie — swaks i telnet

# Wyślij testowy email przez swaks (najwygodniejsze narzędzie)
swaks \
    --to [email protected] \
    --from [email protected] \
    --server localhost \
    --port 25 \
    --body "Test Postfix z DKIM" \
    --h-Subject "Test SMTP"

# Podstawowy test przez telnet (SMTP dialog ręcznie)
telnet localhost 25
# EHLO twojadomena.pl
# MAIL FROM:<[email protected]>
# RCPT TO:<[email protected]>
# DATA
# Subject: Test
# .
# QUIT

# Sprawdź logi wysyłki
sudo tail -f /var/log/mail.log

Zarządzanie kolejką Postfix

# Wyświetl kolejkę
postqueue -p
# lub: mailq

# Wymuś ponowne wysłanie wszystkich wiadomości w kolejce
postqueue -f

# Wyświetl szczegóły konkretnej wiadomości (QUEUE_ID np. ABC123)
postcat -q ABC123

# Usuń konkretną wiadomość z kolejki
postsuper -d ABC123

# Usuń WSZYSTKIE wiadomości z kolejki (ostrożnie!)
postsuper -d ALL

# Usuń tylko deferred (tymczasowo odroczone)
postsuper -d ALL deferred

# Statystyki kolejki
postqueue -p | tail -1

Najczęstsze pytania

Kiedy warto używać własnego Postfixa zamiast SendGrid czy SES? +
Własny Postfix ma sens gdy: wysyłasz dużo transakcyjnych emaili (faktury, powiadomienia) i chcesz unikać kosztów per-email (SendGrid ~$15/mies za 50k, SES $0.10/1000), masz pełną kontrolę nad nagłówkami i DKIM, lub integrujesz legacy system. Relay service (SendGrid/SES/Mailgun) jest lepszy gdy: zależy Ci na wysokiej dostarczalności bez konfiguracji reputacji IP, wysyłasz marketing emaile, lub nie chcesz zarządzać blacklistami i bounce handling. Kompromis: własny Postfix jako MTA + relay przez SES jako smarthost — pełna kontrola i dobra dostarczalność.
Co zrobić gdy Postfix odrzuca email z błędem "relay access denied"? +
Błąd "relay access denied" oznacza że Postfix nie chce przekazać maila dalej — to zabezpieczenie przed open relay. Sprawdź: (1) mynetworks w main.cf — lista sieci uprawnionych do wysyłania przez ten serwer (domyślnie 127.0.0.0/8). (2) inet_interfaces — czy Postfix nasłuchuje na właściwym interfejsie. (3) smtpd_recipient_restrictions — polityka przyjmowania emaili. Jeśli wysyłasz z aplikacji lokalnej: dodaj 127.0.0.1 do mynetworks lub użyj sendmail zamiast SMTP (Postfix przetworzy lokalnie). Jeśli wysyłasz z zewnątrz: skonfiguruj SMTP AUTH (sasl) i TLS.
Jak sprawdzić czy DKIM jest prawidłowo skonfigurowany? +
Użyj narzędzi online: mail-tester.com (wyślij email na podany adres i sprawdź wynik), mxtoolbox.com/dkim (sprawdź rekord DNS TXT), lub dkimvalidator.com. Z linii komend: dig TXT mail._domainkey.twojadomena.pl +short — powinien zwrócić klucz publiczny. Po wysłaniu emaila możesz sprawdzić nagłówki w Gmail (Pokaż oryginał) — szukaj Authentication-Results: dkim=pass. Najczęstsze błędy: zła nazwa selektora, klucz publiczny nie zgadza się z prywatnym, OpenDKIM nie jest podłączony do Postfixa (brak milter w main.cf).
Jak zarządzać kolejką Postfix (defer, bounce)? +
Podstawowe komendy: postqueue -p (wyświetl kolejkę), postqueue -f (wymuś ponowne wysłanie wszystkich), postsuper -d ALL (usuń wszystkie wiadomości z kolejki — ostrożnie!), postsuper -d QUEUE_ID (usuń konkretną wiadomość). Wiadomości "deferred" to te które serwer docelowy tymczasowo odrzucił (greylist, chwilowa niedostępność) — Postfix ponawia próby automatycznie. Wiadomości "bounced" (stały błąd 5xx) wracają do nadawcy i są usuwane z kolejki. Sprawdzaj /var/log/mail.log dla szczegółów każdego błędu.

Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.