 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Postfix — konfiguracja SMTP na VPS

# 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 test@gmail.com \\
    --from no-reply@twojadomena.pl \\
    --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:<test@twojadomena.pl>
# RCPT TO:<odbiorca@example.com>
# 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.

Contabo

VPS z dedykowanym IP — kluczowe dla reputacji serwera SMTP

Dedicated IP

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikrus

Tani VPS do konfiguracji i testowania Postfixa

Dev/Test

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

LH.pl

Hosting z SMTP relay i skrzynkami pocztowymi — bez własnej konfiguracji

Managed SMTP

[Aktywuj rabat →](/out/lh-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/lh-pl)

## Powiązane strony

-   [SPF, DKIM, DMARC — konfiguracja](/baza-wiedzy/spf-dkim-dmarc-konfiguracja)
-   [SMTP relay — konfiguracja w aplikacji](/baza-wiedzy/smtp-relay-hosting-konfiguracja)
-   [Email hosting — MX, IMAP, SMTP](/baza-wiedzy/email-hosting-konfiguracja)
-   [SSH tunneling i port forwarding](/baza-wiedzy/ssh-tunneling-port-forwarding)
-   [Wszystkie artykuły](/baza-wiedzy/)