← Blog
Self-hosting15 min czytania

Modoboa — własny serwer pocztowy na Postfiksie i Dovecocie

Modoboa daje panel administracyjny, webmail i kalendarz nad Postfiksem i Dovecotem, a instalator stawia cały stos jednym poleceniem. Pokazujemy, co dokładnie instaluje, i mówimy wprost, które tryby są eksperymentalne.

Własny serwer pocztowy to temat, przy którym internet dzieli się na dwa obozy. Jeden mówi, że to szaleństwo — że dostarczalność jest wojną, którą wygrywają wielcy, a ty spędzisz weekendy na wyciąganiu swojej domeny z czarnych list. Drugi przypomina, że poczta to ostatni naprawdę zdecentralizowany protokół, jakiego codziennie używamy, i że oddanie całej firmowej korespondencji jednemu dostawcy ma swoją cenę.

Oba obozy mają rację i to jest właśnie punkt, w którym warto poznać Modoboę. Nie jest to serwer pocztowy — Postfix i Dovecot już istnieją i są dobre. Modoboa jest warstwą, która czyni je zarządzalnymi: daje panel administracyjny, webmail, kalendarz i książkę adresową, a przede wszystkim instalator, który stawia cały ten stos jednym poleceniem. To zmienia rachunek: nie musisz być ekspertem od Postfiksa, żeby zacząć — musisz nim zostać dopiero wtedy, gdy coś się zepsuje.

Stan projektu

Repozytorium: modoboa/modoboa. 3538 gwiazdek, 483 forki, licencja ISC. Nagłówek licencji nosi datę 2009–2025 i nazwisko Antoine'a Nguyena, więc projekt ma za sobą siedemnaście lat — samo repozytorium na GitHubie powstało w 2013.

Utrzymanie jest wzorowe i to rzadki widok w tej serii. Ostatni commit na gałęzi master pochodzi z 6 września 2026, czyli cztery dni przed powstaniem tego wpisu. Wydanie 2.10.0 ukazało się tego samego dnia, a rytm poprzednich mówi sam za siebie: 2.9.3 w sierpniu, 2.9.2 i 2.9.1 w lipcu, 2.9.0 w maju, 2.8.2 w kwietniu. Otwartych zgłoszeń jest 51.

Deklarowana dojrzałość w metadanych paczki to Development Status :: 5 - Production/Stable, a Django jest przypięte dokładnie do wersji 5.2.17. Wymagany Python to 3.10 lub nowszy, z klasyfikatorami sięgającymi 3.14. Polityka bezpieczeństwa jest jasna: wspierana jest linia 2.x, linia 1.x nie, a podatności zgłasza się pocztą na adres security@modoboa.org, nie przez publiczne zgłoszenie.

Co to właściwie jest

Modoboa integruje Postfiksa i Dovecota, a punktem komunikacji między wszystkimi elementami jest baza SQL — obsługiwane są MySQL, MariaDB, PostgreSQL i SQLite. Napisana jest w Pythonie 3 na Django, z interfejsem we Vue.

Architektura jest modułowa i autorzy podkreślają to w sposób, który wart jest zauważenia: wszystkie obecne funkcje są rozszerzeniami. Rdzeń zajmuje się zarządzaniem, a webmail, kalendarz, obsługa DMARC czy nakładka na Amavisa to osobne komponenty. Dla kogoś, kto chce dołożyć własną funkcję albo integrację z firmowym systemem, to dobra wiadomość — nie musisz walczyć z monolitem.

Zestaw funkcji obejmuje panel administracyjny, webmail, kalendarz, książkę adresową, filtry Sieve konfigurowane przez każdego użytkownika osobno, automatyczne odpowiedzi na czas nieobecności, wykresy ruchu pocztowego oraz ochronę reputacji: sprawdzanie w listach DNSBL i raporty DMARC.

Co siedzi w pakiecie

Zajrzenie do katalogu z kodem mówi o tym projekcie więcej niż lista funkcji, bo pokazuje dwadzieścia pięć osobnych modułów. Warto je znać, bo kilka rozwiązuje problemy, o których nie pomyślisz, dopóki ich nie napotkasz:

  • autoconfig — autokonfiguracja klientów poczty. To ten mechanizm, dzięki któremu użytkownik wpisuje w Thunderbirdzie adres i hasło, a reszta ustawia się sama. Przy zespole nietechnicznym oszczędza to więcej czasu niż cały panel administracyjny.
  • imap_migration — przenoszenie skrzynek z innego serwera IMAP. O tym niżej, bo to prawdopodobnie najważniejszy moduł w całym zestawie.
  • limits — limity i przydziały na domenę oraz konto. Niezbędne, jeśli hostujesz pocztę dla kogoś poza własną firmą.
  • relaydomains i transport — obsługa domen przekazywanych dalej i map transportu Postfiksa, czyli scenariusze, w których część poczty ma iść gdzie indziej.
  • ldapsync — synchronizacja z katalogiem LDAP, gdy tożsamości mają pochodzić z centralnego źródła.
  • dnstools — sprawdzanie rekordów DNS, w tym tych, od których zależy dostarczalność.
  • sievefilters, autoreply, webmail, calendars, contacts — warstwa, którą widzi użytkownik końcowy.
  • amavis i rspamd — dwa alternatywne filtry antyspamowe, oba jako pełnoprawne moduły.
  • dmarc, maillog, policyd, pdfcredentials — raporty DMARC, statystyki ruchu, demon polityk i wydawanie poświadczeń w PDF.

Przy okazji jedna rzecz do sprostowania, którą zauważyłem porównując README z zawartością repozytorium. README odsyła do obsługi DMARC i nakładki na Amavisa jako do osobnych repozytoriów. Tak było kiedyś — dziś oba są katalogami w głównym pakiecie, a lista czynnych repozytoriów organizacji ich już nie zawiera. Rozszerzenia zostały skonsolidowane do jednego repozytorium, tylko odnośniki w README zostały po staremu. Praktycznie znaczy to, że nie musisz doinstalowywać ich osobno — są w środku.

Uwierzytelnianie potraktowane poważnie

To sekcja, której nie planowałem, dopóki nie przeczytałem listy zależności — a ona mówi o priorytetach projektu więcej niż lista funkcji w README.

W zależnościach siedzą django-otp w wersji 1.7.0 oraz qrcode, czyli klasyczne uwierzytelnianie dwuskładnikowe kodami czasowymi z aplikacji. Obok nich jest jednak fido2 w wersji 2.2.1 — biblioteka do obsługi WebAuthn, czyli kluczy sprzętowych i kluczy dostępu. Panel administracyjny serwera pocztowego chroniony kluczem sprzętowym to dokładnie ten poziom, jakiego się oczekuje od systemu trzymającego całą korespondencję firmy.

Do tego dochodzi django-oauth-toolkit w wersji 3.4.0 lub nowszej, co znaczy, że Modoboa potrafi występować jako dostawca OAuth2 — a to droga do integracji z innymi waszymi systemami. Jest też pełne API REST z automatycznie generowanym schematem OpenAPI, dzięki bibliotece drf-spectacular. Zakładanie kont i domen skryptem, a nie klikaniem, jest więc w pełni wykonalne.

Hasła obsługuje libpass z bcrypt w linii 5.x, wykresy ruchu opierają się na rrdtool, a poświadczenia dla nowych użytkowników można wydać jako PDF — w zależnościach jest reportlab właśnie do tego.

Instalacja: to nie ten docker-compose.yml, którego szukasz

Ostrzeżenie, które chcę postawić wysoko, bo pułapka jest naprawdę łatwa. W korzeniu repozytorium leży plik docker-compose.yml na cztery kilobajty. Odruch jest oczywisty: docker compose up i mam serwer pocztowy.

Nie. Ten plik to środowisko deweloperskie i widać to w każdej linii: usługi budują się z plików Dockerfile.dev, baza to SQLite, DEBUG ustawione na 1, serwer uruchamiany jest przez runserver_plus, dane wczytywane poleceniem load_initial_data --dev, a hasło bazy to Password1000 wpisane wprost w plik. W dodatku w tym zestawie nie ma w ogóle Postfiksa — a bez agenta transferu poczty nie ma serwera pocztowego.

Do czego ten plik jest dobry? Do zobaczenia od środka, z czego składa się system, bo lista usług jest pouczająca: Redis, opcjonalnie LDAP, MariaDB dla Amavisa, proces roboczy kolejek i harmonogram (dla zadań takich jak DKIM i synchronizacja z Dovecotem), API, frontend Vue, Amavis, Dovecot, Radicale jako serwer CalDAV i CardDAV — czyli to on stoi za kalendarzem i książką adresową — oraz demon polityk nasłuchujący na porcie 9999, którego Postfix odpytuje przy decyzjach o przyjęciu wiadomości.

Właściwa droga: oficjalny instalator

Produkcyjnie instaluje się to osobnym narzędziem z repozytorium modoboa/modoboa-installer, wydanym na licencji MIT. Wygląda to tak:

git clone https://github.com/modoboa/modoboa-installer
cd modoboa-installer
sudo python3 run.py twoja-domena.pl

Instalator stawia komplet: serwer bazy danych (PostgreSQL albo MySQL), Nginx z uWSGI, Postfiksa, Dovecota, filtr antyspamowy — Amavis wraz ze SpamAssassinem i ClamAV, albo alternatywnie Rspamd — OpenDKIM oraz Radicale. Plik konfiguracyjny generuje się sam przy pierwszym uruchomieniu i autorzy proszą, by nie kopiować szablonu ręcznie.

Przydatne przełączniki: --stop-after-configfile-check zatrzymuje proces po wygenerowaniu konfiguracji, żebyś mógł ją zmienić przed instalacją, --interactive włącza tryb pytań, --version=X.X.X pozwala wybrać konkretną wersję Modoboi, a --debug dosypuje szczegółów.

Wymagania i ostrzeżenia są konkretne, a każde z nich to oszczędzona godzina:

  • Instalator jest w wersji beta — mówi to własne ostrzeżenie w jego README. Testowany był na Debianie 12 i nowszych oraz Ubuntu 20.04 i nowszych.
  • Partycja /tmp nie może być zamontowana z opcją noexec. Na utwardzonych systemach to bardzo częste ustawienie — i instalacja się na nim wywróci.
  • Minimum 2 GB RAM, bo w trakcie instalacji kompilowane są zależności.
  • Hasła nie powinny zawierać znaków specjalnych, bo mogą wywalić instalację. To rzecz, którą trzeba wiedzieć zawczasu, żeby nie diagnozować potem błędu w niewłaściwym miejscu — i którą warto nadrobić po instalacji, zmieniając hasła na porządne.
  • FQDN trzeba ustawić przed instalacją, inaczej proces się zepsuje.

Jak przenieść tam istniejącą pocztę

To pytanie rozstrzyga o wykonalności całego przedsięwzięcia, bo nikt nie zaczyna od zera — masz już pocztę u dostawcy albo na starym serwerze i te skrzynki muszą przejść razem z całą historią.

Modoboa odpowiada na to modułem imap_migration wbudowanym w rdzeń: konfigurujesz źródłowy serwer IMAP i skrzynki są przenoszone do nowej instalacji. To właściwa droga wyjścia od hostowanego dostawcy, o ile udostępnia on dostęp przez IMAP — a udostępniają praktycznie wszyscy.

Jeśli migrujesz ze starszej, samodzielnie postawionej poczty, w organizacji jest osobne narzędzie modoboa-pfxadmin-migrate (na licencji MIT), przenoszące konfigurację z PostfixAdmina. Dla kogoś, kto od lat utrzymuje taki zestaw, to najkrótsza droga do panelu, który wygląda jak z tej dekady.

Jest też trzecia pozycja warta odnotowania dla zespołów pracujących w duchu infrastruktury jako kodu: pyinfra-modoboa (BSD-3-Clause), czyli wdrożenie opisane deklaratywnie. Jest to projekt bardzo mały i o niskiej popularności, więc traktowałbym go jako punkt wyjścia do własnej automatyzacji, a nie gotowe rozwiązanie — ale skoro szukasz alternatywy dla instalatora oznaczonego jako beta, to jest miejsce, od którego warto zacząć.

Cykl życia jest eksperymentalny i trzeba to wiedzieć przed startem

To najważniejsza informacja w tym wpisie dla kogokolwiek, kto rozważa Modoboę do prawdziwej firmowej poczty. Instalacja jest łatwa. Wszystko, co dzieje się potem, jest przez autorów opisane jako eksperymentalne — i to ich własne słowo, nie moja ocena.

Tryb aktualizacji (--upgrade) jest experimental. Tryb kopii zapasowej (--backup, z wariantem nieinteraktywnym --silent-backup) jest experimental. Tryb przywracania (--restore) jest experimental. Wszystkie trzy mają przy tym wspólny warunek, powtórzony w dokumentacji przy każdym z nich: musisz zachować oryginalny plik konfiguracyjny użyty przy instalacji. Bez niego tryb aktualizacji nie zadziała, a przy kopii zapasowej trzeba będzie odtworzyć konfigurację ręcznie, z właściwymi danymi.

Praktyczny wniosek jest jednoznaczny. Ten plik konfiguracyjny to jest artefakt, który wkładasz do repozytorium sekretów razem z hasłami i traktujesz jak część systemu, a nie jak plik tymczasowy w katalogu domowym. A kopie zapasowe robisz własnym, sprawdzonym mechanizmem — zrzut bazy danych plus katalog z pocztą plus konfiguracja — i przynajmniej raz przeprowadzasz próbne przywrócenie na innej maszynie. Przy poczcie firmowej nie ma miejsca na dowiedzenie się, że mechanizm oznaczony jako eksperymentalny faktycznie nim był.

Dobra wiadomość jest taka, że tryb kopii ma sensowne opcje: można podać własną ścieżkę przez --backup-path i wyłączyć kopiowanie samej poczty przez --no-mail, co przy dużej instancji ma znaczenie, bo skrzynki są zwykle największą częścią danych.

Reputacja, czyli część, której żadne narzędzie nie zrobi za ciebie

Modoboa daje realne narzędzia do pilnowania dostarczalności: OpenDKIM podpisuje wychodzącą pocztę, wbudowane sprawdzanie DNSBL mówi, czy twój adres trafił na czarną listę, a rozszerzenie do DMARC potrafi przetwarzać przychodzące raporty i pokazywać je w panelu. To ostatnie jest bardziej wartościowe, niż brzmi — raporty DMARC przychodzą jako XML w archiwach i bez narzędzia nikt ich nie czyta.

Trzeba jednak uczciwie powiedzieć, gdzie kończy się zakres oprogramowania. Rekordy SPF, DKIM i DMARC w DNS ustawiasz sam. Rekord PTR dla adresu IP ustawia twój dostawca hostingu i na wielu tanich usługach po prostu tego nie zrobi. Reputacja adresu IP zależy od jego historii, więc świeży adres z puli dostawcy VPS może startować z długiem, o którym nie wiesz. A wysyłka do największych dostawców poczty wymaga rozgrzewania i cierpliwości, niezależnie od tego, jak dobrze skonfigurowany jest serwer.

To nie zarzut wobec Modoboi — żadne oprogramowanie tego nie załatwi. To argument za tym, żeby przed decyzją sprawdzić dwie rzeczy u dostawcy: czy ustawi wam PTR i czy nie blokuje portu 25 na wyjściu.

Argument, który w polskiej firmie liczy się najbardziej

Poczta firmowa zawiera dane osobowe w każdej możliwej postaci: korespondencję z klientami, dokumenty kadrowe, dane kontaktowe, załączniki z umowami. Korzystanie z hostowanej poczty zewnętrznego dostawcy jest oczywiście dopuszczalne i powszechne, ale wiąże się z powierzeniem przetwarzania — z umową, z ustaleniem lokalizacji przetwarzania i z zaufaniem, że warunki się nie zmienią.

Własny serwer przenosi ten problem w inne miejsce, a nie usuwa: przestajesz powierzać dane komukolwiek, ale stajesz się w pełni odpowiedzialny za ich bezpieczeństwo, dostępność i kopie zapasowe. To wymiana, którą warto zrobić świadomie. Modoboa jest dobrym narzędziem po tej stronie wymiany właśnie dlatego, że nie udaje, iż druga strona nie istnieje — ma dwuskładnikowe uwierzytelnianie z kluczami sprzętowymi, jasną politykę zgłaszania podatności i wspieraną tylko jedną, aktualną linię wersji.

Jeżeli obsługujecie pocztę dla klientów jako usługę, dochodzi jeszcze jedna rzecz. Projekt ma edycję komercyjną, Modoboa Pro, opisaną w README jako wydanie profesjonalne z zaawansowanymi funkcjami i dedykowanym wsparciem, a zespół oferuje płatne usługi profesjonalne. Autorzy piszą przy tym wprost, że wykupienie planu wsparcia pomaga utrzymać projekt. Wersja otwarta jest kompletna i sama w sobie wystarczająca — ale przy usłudze świadczonej klientom umowa wsparcia z autorami oprogramowania jest zwykle tańsza niż jedna nieprzespana noc.

Pułapki w jednym miejscu

  • docker-compose.yml z repozytorium to środowisko deweloperskie — SQLite, DEBUG=1, hasła w pliku i brak Postfiksa. Nie jest to droga wdrożenia.
  • Tryby aktualizacji, kopii zapasowej i przywracania są eksperymentalne. Zaplanuj własny mechanizm kopii i przetestuj przywrócenie.
  • Wszystkie te tryby wymagają oryginalnego pliku konfiguracyjnego instalatora. Trzymaj go jak sekret produkcyjny.
  • Sam instalator jest oznaczony jako beta. Testowany na Debianie 12+ i Ubuntu 20.04+.
  • /tmp z opcją noexec psuje instalację — a na utwardzonych systemach to typowe ustawienie.
  • Znaki specjalne w hasłach mogą wywalić instalator. Zmień hasła na mocne po instalacji.
  • FQDN musi być ustawiony przed uruchomieniem, minimum pamięci to 2 GB.
  • PTR i port 25 to sprawa dostawcy. Sprawdź jedno i drugie przed wyborem serwera.
  • Linia 1.x nie jest wspierana. Jeśli gdzieś taką macie, to nie jest system otrzymujący poprawki bezpieczeństwa.
  • README odsyła do rozszerzeń DMARC i Amavis jako osobnych repozytoriów — dziś są w głównym pakiecie, odnośniki są nieaktualne.
  • Dwa repozytoria, dwie licencje — rdzeń na ISC, instalator na MIT. Obie permisywne, ale przy audycie warto to odnotować.

Podsumowanie

Modoboa jest jednym z najlepiej utrzymywanych projektów, jakie opisywaliśmy w tej serii — siedemnaście lat historii, wydanie z tego tygodnia i regularny rytm, którego nie psuje ani jedna dłuższa przerwa. Robi przy tym rzecz konkretną: sprowadza zarządzanie serwerem pocztowym z poziomu edycji plików konfiguracyjnych na poziom panelu, nie zabierając ci przy tym dostępu do warstwy niżej.

  • Sprawdzone komponenty pod spodem — Postfix, Dovecot, OpenDKIM, Amavis albo Rspamd, Radicale. Modoboa nimi zarządza, a nie próbuje ich zastąpić.
  • Instalacja jednym poleceniem, wraz z bazą danych, serwerem WWW, filtrem antyspamowym i podpisywaniem DKIM.
  • Uwierzytelnianie na poziomie firmowym — kody czasowe, klucze sprzętowe przez WebAuthn i możliwość działania jako dostawca OAuth2.
  • Pełne API REST ze schematem OpenAPI, więc zakładanie domen i kont da się zautomatyzować.
  • Narzędzia do pilnowania reputacji — sprawdzanie DNSBL i czytelne raporty DMARC zamiast archiwów z XML-ami.
  • Architektura modułowa, w której wszystkie funkcje są rozszerzeniami — własne dołożysz bez walki z rdzeniem.

Rdzeń jest wydany na licencji ISC z prawami Antoine'a Nguyena, a oficjalny instalator na MIT. Obie są permisywne i praktycznie równoważne w skutkach: możesz używać komercyjnie, modyfikować i wdrażać u klientów bez obowiązku otwierania własnych zmian. Istnieje płatna edycja Modoboa Pro oraz komercyjne wsparcie, ale wersja otwarta nie jest okrojona — to kompletna platforma, na której da się prowadzić prawdziwą pocztę. Pod jednym warunkiem, który autorzy uczciwie sygnalizują sami: kopie zapasowe i procedurę przywracania musisz mieć własne i przetestowane, bo wbudowane tryby są dopiero eksperymentalne.