Jak stworzyć własny serwer poczty na Linux

Postawienie własnego serwera poczty to jeden z tych projektów, które uczą Cię Linuksa, DNS-u i bezpieczeństwa szybciej niż dziesięć kursów. Wysyłasz maila ze swojej domeny, z własnej maszyny, bez Gmaila i bez płacenia za hosting pocztowy. Brzmi prosto, ale poczta to jeden z najbardziej wymagających serwisów do utrzymania — i właśnie dlatego tak dużo z niej wyniesiesz.

W tym przewodniku przejdziesz przez kompletną konfigurację stacku Postfix + Dovecot na Debianie/Ubuntu: od pakietów, przez TLS i konta wirtualne w bazie, po rekordy DNS (SPF, DKIM, DMARC, PTR), które decydują o tym, czy Twój mail wyląduje w skrzynce, czy w spamie. Pokażę Ci też, gdzie ten projekt boli najbardziej i kiedy lepiej go nie wdrażać na produkcję.

Czym właściwie jest serwer poczty i z czego się składa

Poczta to nie jeden program, tylko kilka współpracujących elementów. Zrozumienie podziału ról oszczędzi Ci większości frustracji przy debugowaniu.

  • MTA (Mail Transfer Agent) — odpowiada za wysyłanie i przyjmowanie poczty przez protokół SMTP. Tu rolę gra Postfix. To on rozmawia z serwerami Gmaila czy Outlooka.
  • MDA / serwer dostępowy — udostępnia Twoje skrzynki klientom (Thunderbird, telefon) przez IMAP lub POP3. Tym zajmuje się Dovecot.
  • Baza kont — w prostym wariancie konta to użytkownicy systemowi, ale w praktyce trzymasz je w bazie (MariaDB/MySQL) jako konta wirtualne. Dzięki temu dodanie skrzynki to wpis w tabeli, a nie nowy użytkownik Linuksa.
  • DNS — rekordy MX, SPF, DKIM, DMARC i PTR mówią światu, gdzie i jak dostarczać pocztę Twojej domeny oraz czy można jej ufać.

Postfix przyjmuje maila, przekazuje go do Dovecota przez protokół LMTP, a Dovecot zapisuje go w skrzynce w formacie Maildir (jeden plik = jeden mail, dużo wygodniejszy niż stary mbox). Gdy logujesz się klientem, znowu gada z Tobą Dovecot.

Czego potrzebujesz, zanim zaczniesz

To nie jest projekt, który postawisz na laptopie za routerem domowym. Lista wymagań nie jest długa, ale każdy punkt jest twardy:

  • VPS z publicznym, statycznym IP — serwery domowe i większość tanich VPS-ów mają zablokowany port 25 albo IP na czarnych listach. Sprawdzeni dostawcy pod pocztę to np. Hetzner, OVH czy Mikr.us.
  • Własna domena z dostępem do edycji DNS (np. twojadomena.pl).
  • Świeży system Debian (13 „Trixie”, ewentualnie wciąż wspierane 12) lub Ubuntu LTS (26.04 albo 24.04) z dostępem root lub sudo. Trzymaj się wydań LTS/stable — będą dostawać aktualizacje bezpieczeństwa przez lata.
  • Odblokowany port 25 wychodzący — to najczęstszy ukryty problem. U wielu providerów trzeba o to poprosić w tickecie.
  • Możliwość ustawienia rekordu PTR (reverse DNS) na IP serwera — bez tego Gmail i Microsoft będą Cię odrzucać. PTR ustawia się w panelu providera VPS, nie u rejestratora domeny.
PRZECZYTAJ  Jak zabezpieczyć serwer przed atakami DDoS

Na start ustaw poprawnie nazwę hosta. Przyjęło się, że serwer poczty nazywa się mail.twojadomena.pl:

hostnamectl set-hostname mail.twojadomena.pl

Instalacja pakietów

Zacznij od aktualizacji systemu i instalacji kompletu narzędzi. Wersja z bazą MySQL i kontami wirtualnymi jest minimalnie trudniejsza w konfiguracji, ale dużo wygodniejsza w utrzymaniu — i tak ją tu robimy.

apt update && apt upgrade -y

apt install -y postfix postfix-mysql dovecot-core dovecot-imapd dovecot-lmtpd dovecot-mysql mariadb-server certbot

Podczas instalacji Postfixa kreator zapyta o typ konfiguracji — wybierz Internet Site, a jako system mail name podaj twojadomena.pl (bez mail.). Nie martw się, jeśli klikniesz źle — wszystko poprawisz potem w plikach.

Krótko o pakietach:

  • postfix + postfix-mysql — SMTP plus wsparcie kont z bazy.
  • dovecot-core, dovecot-imapd, dovecot-lmtpd, dovecot-mysql — IMAP, dostarczanie przez LMTP i odpytywanie bazy.
  • mariadb-server — baza na konta i aliasy.
  • certbot — darmowe certyfikaty TLS z Let’s Encrypt.

Baza danych: domeny, konta i aliasy

Konta wirtualne trzymamy w trzech tabelach. To klasyczny schemat, który znajdziesz w większości poważnych poradników, bo po prostu działa.

Utwórz bazę i tabele:

  1. virtual_domains — lista obsługiwanych domen (np. twojadomena.pl).
  2. virtual_users — adresy i hasła. Hasła nigdy nie trzymaj plaintextem — używaj hasha SHA512-CRYPT.
  3. virtual_aliases — przekierowania, np. kontakt@ na Twój główny adres.

Hash hasła wygenerujesz wprost Dovecotem, bez żadnych zewnętrznych narzędzi:

doveadm pw -s SHA512-CRYPT

Polecenie poprosi o hasło dwa razy i zwróci gotowy hash zaczynający się od {SHA512-CRYPT}. Ten ciąg wrzucasz do kolumny z hasłem w virtual_users. Dodanie nowej skrzynki to od teraz jeden INSERT.

Konfiguracja Postfixa

Główny plik to /etc/postfix/main.cf. Tu ustawiasz tożsamość serwera, TLS i to, że konta pobierasz z bazy.

Kluczowe parametry, które musisz znać:

  • myhostname = mail.twojadomena.pl — pełna nazwa hosta.
  • mydestination — domeny obsługiwane lokalnie jako systemowe (przy kontach wirtualnych zostawiasz tu tylko localhost).
  • virtual_mailbox_domains, virtual_mailbox_maps, virtual_alias_maps — wskazują na pliki mysql:, które odpytują Twoje trzy tabele.
  • smtpd_tls_cert_file i smtpd_tls_key_file — ścieżki do certyfikatu Let’s Encrypt.
  • smtpd_tls_security_level = encrypt — wymusza szyfrowanie połączeń.
  • smtpd_sasl_type = dovecot oraz smtpd_sasl_auth_enable = yes — uwierzytelnianie wysyłki oddajesz Dovecotowi.

Drugi ważny plik to /etc/postfix/master.cf. Tu odblokowujesz tzw. submission — port 587 z wymuszonym TLS i logowaniem, którego używają klienci poczty do wysyłania. Port 25 zostaw wyłącznie do komunikacji serwer–serwer; nie pozwól na nim logować się użytkownikom, bo to prosta droga do bycia open relayem i trafienia na blacklisty.

Poprawność map z bazy sprawdzisz narzędziem postmap:

postmap -q twojadomena.pl mysql:/etc/postfix/mysql-virtual-domains.cf

Jeśli komenda zwróci 1 dla domeny i pełny adres dla konta — zapytania do bazy działają.

Konfiguracja Dovecota

Dovecot odpowiada za IMAP, dostarczanie przez LMTP i sprawdzanie haseł. Konfiguracja siedzi w katalogu /etc/dovecot/conf.d/, podzielona na pliki tematyczne:

  • 10-mail.conf — ustaw mail_location = maildir:/var/mail/vhosts/%d/%n, czyli osobny katalog na domenę (%d) i użytkownika (%n).
  • 10-auth.conf — zostaw disable_plaintext_auth = yes (to ustawienie zakazuje logowania hasłem bez TLS, czyli dokładnie to, czego chcesz) i włącz mechanizmy plain oraz login z bazą SQL jako źródłem haseł.
  • 10-master.conf — wystaw gniazdo LMTP dla Postfixa i gniazdo auth dla SASL, żeby Postfix mógł pytać Dovecota o hasła.
  • 10-ssl.confssl = required plus ścieżki do tego samego certyfikatu Let’s Encrypt.
  • dovecot-sql.conf.extzapytanie SQL, które pobiera hash hasła z virtual_users.

Utwórz osobnego użytkownika systemowego na skrzynki (np. vmail z UID 5000), żeby cała poczta wirtualna miała jednego właściciela i przewidywalne uprawnienia. To standard, który trzyma porządek i bezpieczeństwo.

PRZECZYTAJ  Jak stworzyć własny serwer TeamSpeak

Po zmianach restartujesz oba serwisy i sprawdzasz, czy wstały bez błędów:

systemctl restart postfix dovecot

systemctl status postfix dovecot

Certyfikat TLS z Let’s Encrypt

Bez szyfrowania Twój serwer to relikt z lat 90. — hasła latałyby plaintextem, a nowoczesne serwery odrzucą połączenie. Certyfikat dla mail.twojadomena.pl wygenerujesz darmowo:

certbot certonly --standalone -d mail.twojadomena.pl

Certbot zapisze certyfikat w /etc/letsencrypt/live/mail.twojadomena.pl/. Tę samą parę plików (fullchain.pem i privkey.pem) wskazujesz w Postfiksie i Dovecocie. Certyfikat jest ważny 90 dni, ale Certbot dorzuca timer, który odnawia go automatycznie — sprawdzisz to przez certbot renew --dry-run.

Rekordy DNS: tu rozstrzyga się Twoja dostarczalność

To najważniejsza część, którą amatorskie poradniki traktują po macoszemu. Sam serwer może działać idealnie, a maile i tak będą lądować w spamie, jeśli DNS nie jest komplet. Ustaw u rejestratora domeny:

  • Rekord Amail.twojadomena.pl wskazujący na IP serwera.
  • Rekord MXtwojadomena.pl z priorytetem (np. 10) na mail.twojadomena.pl. Mówi światu, gdzie dostarczać pocztę.
  • SPF — rekord TXT typu v=spf1 mx -all. Oznacza: pocztę z mojej domeny wolno wysyłać tylko serwerom z rekordu MX, reszta to podszywanie.
  • DKIM — podpis kryptograficzny każdej wysyłanej wiadomości. Klucz wygenerujesz narzędziem OpenDKIM, a jego część publiczną publikujesz jako rekord TXT. To DKIM najmocniej buduje Twoją wiarygodność u Gmaila.
  • DMARC — rekord TXT typu v=DMARC1; p=none; rua=mailto:[email protected]. Na start ustaw politykę p=none, żeby tylko zbierać raporty; dopiero gdy SPF i DKIM działają stabilnie, zaostrzasz do quarantine lub reject.
  • PTR (reverse DNS) — IP serwera ma rozwiązywać się z powrotem na mail.twojadomena.pl. Brak PTR to niemal gwarantowane odrzucenie przez duże skrzynki. Ten rekord ustawiasz w panelu providera VPS.

Po skonfigurowaniu wyślij testowego maila na narzędzie typu mail-tester.com — pokaże Ci punktację (cel: 10/10) i wskaże, który element kuleje.

Bezpieczeństwo i antyspam

Otwarty serwer poczty zostanie zaatakowany w ciągu godzin — boty skanują port 25 i 587 non stop. Minimum, które musisz wdrożyć:

  • Nigdy nie bądź open relayem — Postfix domyślnie nim nie jest, ale jeśli pomieszasz w smtpd_recipient_restrictions, możesz to zepsuć. Przetestuj się publicznym testerem open relay.
  • fail2ban — blokuje IP po serii nieudanych logowań SASL. Instalacja: apt install fail2ban i włączenie jaila postfix-sasl.
  • SpamAssassin lub Rspamd — filtruje pocztę przychodzącą i ocenia jej „spamowość”. Rspamd jest dziś popularniejszy i wydajniejszy.
  • Firewall — przez ufw otwórz tylko porty, których faktycznie używasz: 25, 587, 993 (IMAPS) i 22 (SSH).
PRZECZYTAJ  Tworzenie własnego serwera DNS

Testowanie i webmail

Zanim podłączysz Thunderbirda, sprawdź każdą warstwę osobno — łatwiej zlokalizować błąd.

Wysyłka z linii poleceń:

echo "Test treści" | mail -s "Temat testowy" [email protected]

Podgląd kolejki (jeśli mail utknął, zobaczysz go tu wraz z przyczyną):

mailq

Surowy test SMTP/IMAP zrobisz przez telnet albo openssl s_client na porty 25 i 143/993. Logi to Twój najlepszy przyjaciel — trzymaj otwarty tail -f /var/log/mail.log podczas każdego testu.

Do logowania klientem ustaw w Thunderbirdzie: serwer poczty wychodzącej mail.twojadomena.pl port 587 (STARTTLS), przychodzącej IMAP port 993 (SSL/TLS), logowanie pełnym adresem e-mail. Jeśli wolisz dostęp przez przeglądarkę, dorzuć webmaila Roundcube na serwerze WWW.

Czy warto stawiać własny serwer poczty?

Jako projekt edukacyjny — zdecydowanie tak. Nauczysz się SMTP, IMAP, DNS-u, TLS-u i myślenia o bezpieczeństwie w jednym przebiegu. Żaden inny serwis nie spina tylu tematów naraz.

Jako produkcyjna poczta dla firmy — przemyśl to. Utrzymanie dostarczalności (blacklisty, reputacja IP, aktualizacje, backupy skrzynek) to realna, ciągła robota. Jeśli stawkę stanowi biznesowa korespondencja, gotowe usługi bywają tańsze w przeliczeniu na Twój czas. Świetny kompromis to gotowy stack typu Mailcow albo iRedMail — pakują Postfixa, Dovecota, antyspam i webmaila w jeden zestaw, ale i tak warto najpierw zrozumieć, co dzieje się pod spodem. A to zrozumienie właśnie sobie zbudowałeś.

FAQ

Czy mogę postawić serwer poczty na domowym komputerze?

Technicznie tak, w praktyce odradzam. Dostawcy internetu domowego prawie zawsze blokują port 25, IP jest dynamiczne i nie da się ustawić rekordu PTR, a adresy z pul domowych trafiają na czarne listy. Do nauki użyj taniego VPS-a z odblokowanym portem 25.

Dlaczego moje maile trafiają do spamu mimo działającego serwera?

Niemal zawsze to wina DNS-u. Sprawdź po kolei: czy masz poprawny PTR, czy SPF zawiera mx, czy DKIM podpisuje wiadomości i czy DMARC jest opublikowany. Wyślij testa na mail-tester.com — pokaże dokładnie, czego brakuje. Reputacja świeżego IP też potrzebuje czasu, by się zbudować.

Postfix czy Dovecot — który do czego służy?

Postfix to MTA: wysyła i przyjmuje pocztę przez SMTP, rozmawia z innymi serwerami. Dovecot udostępnia Twoje skrzynki klientom przez IMAP/POP3 i sprawdza hasła. W typowej instalacji potrzebujesz obu i pracują razem.

Konta systemowe czy wirtualne w bazie?

Dla pojedynczej skrzynki konta systemowe wystarczą, ale przy wielu adresach i domenach konta wirtualne w MariaDB/MySQL są wygodniejsze. Dodanie skrzynki to wtedy jeden wpis w tabeli, bez tworzenia użytkownika Linuksa, a zarządzanie aliasami robisz w SQL-u.

Ile czasu zajmuje postawienie takiego serwera?

Pierwsze działające wysyłanie i odbieranie ogarniesz w 2–4 godziny. Dopracowanie dostarczalności (SPF, DKIM, DMARC, reputacja IP) i bezpieczeństwa to kolejny dzień lub dwa eksperymentów. Realnie zaplanuj sobie weekend i traktuj to jak projekt, a nie szybki tutorial.

Dodaj komentarz

Twój adres email nie zostanie opublikowany. Wymagane pola są oznaczone *

You May Also Like