Niedawno opublikowałem artykuł, w którym starałem się przedstawić możliwości, jakie ma osoba zainteresowana założeniem poczty e-mail w ramach własnej domeny (poczta w domenie). Rozpiętość rozwiązań jest duża – od poczty w ramach hostingu, przez pocztę u wyspecjalizowanych firm świadczących tego typu usługi, kończąc na własnym serwerze pocztowym. I w tym artykule zajmiemy się właśnie tym – postaram się pokazać, jak relatywnie prosto można uruchomić własny serwer pocztowy (wraz z konfiguracją domeny).

Serwer pocztowy MailCow: dockerized

Do poradnika dotyczącego jak uruchomić własny serwer pocztowy zabierałem się dość długo, choć temat pojawiał się co jakiś czas, czy to w pytaniach znajomych, czy – niektórych – czytelników. To, co mnie wstrzymywało, to fakt, że jeśli już ktoś decyduje się na postawienie własnego serwera pocztowego, to jednak jakaś już wiedzę z zakresu m.in. konfiguracji i obsługi serwerów powinien mieć, co z automatu wyklucza zapewne spore grono czytelników.

Nie bez znaczenia jest też to, że prawidłowo działający (i relatywnie bezpieczny) serwer pocztowy składa się tak dużo elementów, które muszą ze sobą współpracować, że istnieje bardzo duża szansa, że to, co zadziałało u mnie, niekoniecznie zadziała u innych. Potencjalnych punktów, gdzie coś się może wysypać, jest po prostu bardzo, ale to bardzo dużo – czy to na etapie samej konfiguracji, czy korzystania z serwera/poczty.

Tak na poważnie, że jednak może da się napisać w miarę uniwersalny i prosty poradnik, zacząłem myśleć wraz z rozpowszechnieniem się rozwiązań typu „mail in a box”, czyli w dosłownym tłumaczeniu – serwer pocztowy z pudełka (e-mail z pudełka). Kilka rozwiązań tego typu wymieniłem również w artykule z przeglądem rozwiązań/możliwości w tym zakresie. Jednak rozwiązania te, choć faktycznie upraszczały proces instalacji i konfiguracji serwera pocztowego, to zdecydowanie nie były na tyle bezproblemowe (pewne), by na ich bazie tworzyć tego typu poradnik, który z założenia ma trafić również do mniej zaawansowanych osób (ale bez przesady ;-)).

Pod koniec 2017 roku postanowiłem kolejny raz zrobić całościowy przegląd tego typu rozwiązań, licząc na to, że w końcu trafię na rozwiązanie, które nie dość, że w kilku kolejnych podejściach zadziała „z automatu” (VPSy u różnych dostawców, m.in. HitMe.pl, DigitalOcean i ArubaCloud), to jeszcze na podstawie przekazanych notatek „mniej zaawansowany” kolega będzie wstanie samodzielnie zainstalować i skonfigurować własny serwer pocztowy, wraz z przypisaniem do niego domeny, oraz konfiguracją kilku kont pocztowych.

Niestety sporo rozwiązań, które miały cały proces automatyzować na takim czy innym elemencie się wysypywało. Inne, które zainstalowały się poprawnie, a sam serwer działał prawidłowo były na tyle toporne w bieżącym zarządzaniu, że również musiałem je skreślić.

Z krótkiej listy rozwiązań, które przeszły przez selekcje w sposób jak najbardziej subiektywny wybrałem jedno, z którego zresztą sam korzystam…

MailCow: dockerized, czyli krówka pocztowa w kontenerach Dockera

Najlepsze wrażenie zrobiła na mnie pocztowa krówka, czyli MailCow, w wersji dockerized, czyli działającej w kontenerach Dockera. I choć cały czas nie mogę się przekonać do Dockera na tyle, by na „zwykłych serwerach” na nim stawiać np. webserwer, to w przypadku serwera pocztowego nie mam wątpliwości, że jest to rozwiązanie bardzo dobre, bo w pewnym sensie uniezależnia usługę pocztową (serwer pocztowy) od samego systemy, dzięki czemu zapewne znacznie maleje ryzyko błędów…

Zanim przejdę do procesu instalacji (i konfiguracji) kilka uwag porządkowych, które powinny Wam pomóc, jeśli zdecydujecie się skorzystać z tego rozwiązania:

  • Serwer pocztowy będzie instalowany na nowym serwerze VPS, działającym pod kontrolą systemu Debian 9 (Linux)
  • Poczta będzie konfigurowana dla domeny Webinsider.pl (choć na grafikach może być poczta.webinsider.pl)
  • Serwer pocztowy zostanie zainstalowany na serwerze VPS, na którym będzie działać tylko poczta (adres serwera: poczta.webinsider.pl)
  • W tym poradniku będę korzystał z serwera, którego adres IP to 123.123.123.123

Robię  tak dlatego, że dla mnie serwer pocztowy to oddzielny serwer, i na nim nie uruchamiam nic innego (choć można). Instalację i konfigurację MailCow najlepiej wykonać na „czystym” serwerze, z jak najmniejszą liczbą dodatkowe oprogramowania (dotyczy głównie programów mocniej ingerujących w system). Nie jest to wymóg, ale na pewno znacznie zwiększa to szansę na to, że cały proces przebiegnie bez problemów.

Instalacja (i podstawowa konfiguracja) MailCow: dockerized

Sam proces instalacji MailCow jest dość dobrze opisany w oficjalnej dokumentacji, i w większości przypadków nie trzeba w nim nic zmieniać.

Z racji tego, ze jest to nowy serwer VPS, to zaczynamy od aktualizacji (instalację przeprowadzam wyjątkowo jako użytkownik „root”, bo tak jest prościej):

sudo apt-get update -y && sudo apt-get upgrade -y && sudo apt-get dist-upgrade -y

Następnie należy zainstalować oprogramowanie, które będzie wykorzystywane w dalszym procesie instalacji:

sudo apt-get install curl git

W tym momencie możemy zaczynać instalację (pobieranie) MailCow, aczynając od Dockera, bez którego w tym przypadku się nie obejdzie:

curl -sSL https://get.docker.com/ | CHANNEL=stable sh
sudo systemctl enable docker.service
sudo systemctl start docker.service
sudo curl -L https://github.com/docker/compose/releases/download/$(curl -Ls https://www.servercow.de/docker-compose/latest.php)/docker-compose-$(uname -s)-$(uname -m) > /usr/local/bin/docker-compose
sudo chmod +x /usr/local/bin/docker-compose

Następnie:

cd /opt
sudo git clone https://github.com/mailcow/mailcow-dockerized
cd mailcow-dockerized
./generate_config.sh

Na tym etapie podajemy adres serwera (w moim przypadku: poczta.webinsider.pl) oraz strefę czasową (np. Europe/Warsaw).

Proces ten utworzy plik konfiguracyjny, w którym znajdziemy kilka podstawowych ustawień:

sudo nano /opt/mailcow-dockerized/mailcow.conf

Ustawienia zostawiam już Wam, ale warto zwrócić uwagę m.in. na proces, który automatycznie może zresetować usługę w przypadku wystąpienia usterki:

USE_WATCHDOG=n
WATCHDOG_NOTIFY_EMAIL=

Czy skaner antywirusowy, który w przypadku słabszych maszyn (głównie pamięć RAM) może trochę obciążać serwer/system:

SKIP_CLAMD=n

Jeśli zamierzamy korzystać z dodatkowych adresów URL do łączenia się z serwerem (innych niż podany przy konfiguracji, czy – później – podczas konfiguracji domen, dla których ma działać usługa) to być może warto też uzupełnić parametr:

ADDITIONAL_SAN=

Niezależnie od Waszych decyzji, w późniejszym etapie tez można dokonać modyfikacji tych ustawień (wystarczy później zrestartować usługę).

W tym momencie możemy właściwie już uruchomić serwer pocztowy:

sudo docker-compose pull
sudo docker-compose up -d

I jeśli chodzi o instalacje i podstawową konfigurację to tyle. Mówiłem (pisałem), że będzie szybko, prosto i wygodnie… :-)

Podstawowa konfiguracja rekordów DNS

Prawidłowej konfiguracji rekordów DNS dla poczty w ramach własnej domeny poświęciłem niedawno cały artykuł, i zdecydowanie zachęcam, by się z nim zapoznać, bo jest to element równie ważny, co sama instalacja serwera pocztowego.

W moim przypadku dodaje rekord A „poczta” wskazujący na adres IP serwera, na którym działa MailCow:

A poczta.webisnider.pl: 123.123.123.123

Oprócz rekordu A potrzebny jest rekord MX:

MX webinsider.pl: poczta.webinsider.pl

Oraz rekord SPF (TXT):

TXT webinsider.pl: v=spf1 mx ~all

Pozostałe rekordy (DKIM i DMARC) można pominąć, choć my je dodany – ale w późniejszym etapie…

Jeśli korzystamy z rozwiązań typu Cloudflare, to dla domeny/subdomeny wskazującej na serwer pocztowy należy wyłączyć ochronę, czyli ustawić „szarą chmurkę” (DNS only). W innym przypadku serwer IMAP, POP3 i SMTP będą nieosiągalne, gdyż Cloudflare (przynajmniej w planach bezpłatnych i najtańszych) obsłuchuje tylko ruch HTTP/HTTPS.

Konfiguracja MailCow (administracja)

W tym momencie (dodany rekord A) możemy się połączyć już bezpośrednio z panelem zarządzania serwerem pocztowym, który w moim przypadku znajduje się pod adresem:

http://poczta.webinsider.pl

I jeśli proces instalacji przebiegł bez zakłóceń, to przywita nas domyślny ekran logowania MailCow:

Domyślny użytkownik to „admin”, a hasło to „moohoo”. Oczywiście zmieniamy to (przynajmniej hasło) zaraz po zalogowaniu. A najlepiej, to od razu aktywować dwuskładnikowe uwierzytelnienie (2FA):

W zakładce „konfiguracja” możemy od razu ustawić własne logo oraz teksty dla poszczególnych sekcji na ekranie logowania:

W następnym kroku musimy dodać pierwszą domenę, w ramach której poczta e-mail będzie obsługiwana na serwerze. W moim przypadku będzie to „webinsider.pl” (na grafikach poniżej „poczta.webinsider.pl):

Gdy domena jest już ustawiona, możemy dodać pierwszy adres e-mail:

W pozostałych ustawieniach można m.in. ustawić aliasy dla poszczególnych kont e-mail, jak i dla całych (sub)domen:

Jak chyba widać na powyższych grafikach panel zarządzania jest dość przejrzysty, i raczej nikt (kto decyduje się na własny serwer pocztowy ;-)) nie powinien mieć problemów z konfiguracją.

Secure Socket Layer (SSL)

To, co na pewno warto zrobić, to aktywować szyfrowane połączenie z panelem – czy to dla siebie, czy użytkowników. Dodatkowe domeny (poza tymi dodanymi bezpośrednio w panelu) dodajemy we wspomnianym już parametrze:

ADDITIONAL_SAN

w pliku konfiguracyjnym (mailcow.conf).

Za zmianę/generowanie nowych certyfikatów odpowiada polecenie:

cd /opt/mailcow-dockerized
sudo docker-compose restart acme-mailcow

Choć można zrestartować całą usługę:

cd /opt/mailcow-dockerized
sudo docker-compose up -d

Nie trwa to długo, a z doświadczenia wiem, że czasem jest potrzebne…

Zaawansowane (dodatkowe) ustawienia DNS

W tym momencie możemy wygenerować już klucz DKIM dla dodanej do serwera domeny:

Wpisujemy domenę (wcześniej dodaną do serwera) i wybieramy wielkość klucza (np. 2048). Selektor można zostawić domyślny (dkim). I klikamy „dodaj”:

Kopiujemy klucz, który wyglądać będzie mniej więcej tak:

v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqhkiG9w0BAQEFAAONg8Dgs53Dkzhd7DDGCLCg1s2gDS3A4smfg1+yux0M5m2ss7fTU1f5eJdH8k0ETgOrUkhtd/83A8gurwRUBOLG9QUCNn7wErjDxtf/2LZJ+u1Tqy/lr2KOlDgHSs7Sd8DYu/Y8lfWIGZn1NpL4YxCp6d2h01uMZQsR7fJp/Dj28CjtEInuidElE03/kOE9MvtPGQ3Yhyjq02dGd5As4fHRUol5NyHf/Iem5Yveu4NM6v0C7qH+3GiM1JEUTBAfw83ckjD1nbXeZiAylmCyXsBzRVeKLVw9mmT0J0vbdbZAvHowppDeZ1nmx9AprL25Qd548giJis9tGUS6st8cwIDAQAB

I dodajemy rekord DNS:

TXT webinsider.pl: v=DKIM1;k=rsa;t=s;s=email;p=MIIBIjANBgkqhkiG9w0BAQEFAAONg8Dgs53Dkzhd7DDGCLCg1s2gDS3A4smfg1+yux0M5m2ss7fTU1f5eJdH8k0ETgOrUkhtd/83A8gurwRUBOLG9QUCNn7wErjDxtf/2LZJ+u1Tqy/lr2KOlDgHSs7Sd8DYu/Y8lfWIGZn1NpL4YxCp6d2h01uMZQsR7fJp/Dj28CjtEInuidElE03/kOE9MvtPGQ3Yhyjq02dGd5As4fHRUol5NyHf/Iem5Yveu4NM6v0C7qH+3GiM1JEUTBAfw83ckjD1nbXeZiAylmCyXsBzRVeKLVw9mmT0J0vbdbZAvHowppDeZ1nmx9AprL25Qd548giJis9tGUS6st8cwIDAQAB

Od razu (opcjonalnie) możemy dodać też rekord DMARC:

TXT webinsider.pl: v=DMARC1;p=none;sp=quarantine;pct=100;rua=mailto:admin@nasza-domena

W miejsce „nasza-domena” w moim przypadku znalazłoby się „webinsider.pl, czyli nazwa domeny, dla której pocztę konfiguruję (na potrzeby tego poradnika).

Dodatkowe ustawienia MailCow

W tym momencie poczta e-mail w naszej domenie powinna już działać, ale warto rzucić okiem jeszcze na kilka ustawień w panelu administracyjnym MailCow. M.in. ustawienia usługi Fail2Ban:

Nie jest to obowiązkowe, na standardowych ustawieniach też będzie OK, ale może ktoś z Was będzie chciał np. dodać swój adres IP (jeśli stały i publiczny) do białej listy, by w przypadku „pomroczności jasnej” się nie zablokować… ;-)

Podstawowe komendy administracyjne

Jeśli już zdecydujecie się na uruchomienie własnego serwera pocztowego, to warto o niego dbać. Nie będę tu wymieniał wszystkich czynności, jakie trzeba wykonywać (odsyłam m.in. do dokumentacji), ale kilka poleceń warto przyswoić.

Usługę (wszystkie komponenty) zrestartować można za pomocą poleceń:

cd /opt/mailcow-dockerized
sudo docker-compose up -d

Warto pamiętać też o regularnej aktualizacji:

cd /opt/mailcow-dockerized/
sudo /opt/mailcow-dockerized/update.sh

Jest to wariant najprostszy, bo automatyczny. Co za tym idzie może się zdarzyć, że… coś pójdzie nie tak. Choć przez kilka(naście) miesięcy – jak korzystam z krówki – nigdy nie miałem z tego tytułu problemów.

Kopia zapasowa

Warto również pamiętać o kopiach zapasowych. Tutaj można wspomóc się skryptem dostarczanym wraz z MailCow:

sudo /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all

W przypadku skryptów można zautomatyzować podawanie lokalizacji docelowej:

sudo MAILCOW_BACKUP_LOCATION=/media/backup /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh backup all

Do przywracania służy polecenie:

sudo /opt/mailcow-dockerized/helper-scripts/backup_and_restore.sh restore

Co ważne – podczas tworzenia kopii zapasowej w podanej lokalizacji (tak ręcznie, jak i w skryptach) są tworzone katalogi „mailcow_DATA-KOPII”. Ich strukturę i nazwę trzeba zachować w niezmienionej postaci. Pamiętajcie też o ew. kopii katalogu „data”, zwłaszcza, jeśli wprowadzaliście tam jakieś zmiany.

Rapid spam filtering system (RSPAMD)

Gdy decydujemy się na własny serwer pocztowy, to na nas spoczywa m.in. filtrowanie SPAMu. Zarówno przychodzącego, jak i wychodzącego. W MailCow znajdziemy zintegrowany system (oprogramowanie) RSPAMD, do którego od razu warto sobie wygenerować hasło w ustawieniach MailCow (Rspamd UI).

I ogólnie warto tu od czasu do czasu zaglądać. Nie tylko dla ładnych wykresów… ;-)

Ustawienia użytkownika

jeśli chodzi o (podstawową) administrację to właściwie tyle. Warto jednak pamiętać, że „zwykły użytkownik” również może się zalogować od panelu zarządzania. Oczywiście nie ma tylu uprawnień, i nie może zmieniać konfiguracji serwera:

Ale może np. wygenerować sobie tymczasowy alias, ważny przez określony czas (liczony w godzinach lub dniach):

Rzecz niby błaha, ale… moim zdaniem bardzo przydatna, nie tylko, gdy musimy podać adres e-mail na jakiejś „potencjalnie podejrzanej stornie”.

SOGo groupware, czyli podstawowy (nie tylko) webmail

Ale serwer pocztowy to jedno, bo musi (powinien) mięć też jakiś webmail, czyli miejsce, gdzie użytkownik może się zalogować m.in. po to, by sprawdzić pocztę, czy wysłać wiadomość. W przypadku MailCow domyślny webmail to SOGo. I moim zdaniem to dość dobry wybór. Chyba dużo lepszy niż „klasyczny” (archaiczny) np. Roundcube.

Jest to dość dobrze przemyślany webmail, do tego nie straszy wyglądem, a wręcz… powinien się podobać większości użytkowników.

RainLoop, czyli dodajemy (kolejny) webmail

Natomiast jeśli kto z Was chciałby dodać do serwera inny webmail, to nie ma takiego problemu – mamy w końcu pełnoprawny webserwer na Nginx.

Podstawowe pliki związane z usługą MailCow (np. konfiguracja) znajdują się w katalogu:

/opt/mailcow-dockerized

Pliki RainLoop wrzucamy do katalogu:

/opt/mailcow-dockerized/rainloop

Jest to – jak już pisałem – bardzo minimalistyczny webmail, Z poziomu użytkownika wygląda tak:

Administrator ma kilka dodatkowych opcji:

Do panelu „admina” można dostać się, dodając „?admin” do linku, np.:

https://poczta.webinsider.pl/rainloop/?admin

Natomiast dla „zwykłych użytkowników” możemy dodać odpowiednią opcję w panelu zarządzania, korzystając ze wspomnianej już opcji „customize”:

Ja osobiście lubię ten webmail. Co więcej – traktuje go jako „mobilną alternatywę” dla Thunderbirda…

Pamiętajcie tylko, by dobrze zabezpieczyć dostęp do katalogu „data” tak, by nie można było odczytywać m.in. plików konfiguracyjnych przez internet. W tym celu wystarczy utworzyć plik:

sudo nano /opt/mailcow-dockerized/data/conf/nginx/site.rainloop.custom

I wpisać do niego np. taką zawartość:

# Block https://*/rainloop/data/* access from web
location ~ /rainloop/data {
   deny all;
   return 403;
}

Na koniec trzeba jeszcze zrestartować (web)serwer Nginx:

cd /opt/mailcow-dockerized
sudo docker-compose restart nginx-mailcow

Oczywiście zamiast ścieżki „/rainloop/data/” możecie wprowadzić własną, zależnie od tego jaki katalog chcecie chronić.

Czy na pewno chcesz własny serwer pocztowy?

Jak (mam nadzieje) widać, instalacja i konfiguracja własnego serwera pocztowego nie musi być trudna. Oczywiści własny serwer pocztowy daje poczucie niezależności, bo w końcu nasza poczta e-mail jest u nas. Ale… serwer pocztowy należy traktować jako żywy organizm, i należy się o niego troszczyć – pamiętajcie o regularnych aktualizacjach, kopiach zapasowych, oraz bieżącym monitorowaniu, czy ktoś z Waszego serwera nie wysyła SPAMu… A w razie wątpliwości czy problemów, zapraszamy do współpracy… :-)

(!) Zgłoś błąd na stronie
Pomogłem? To może postawisz mi wirtualną kawę?
LUTy dla D-Cinelike (DJI Mini 3 Pro, DJI Avata, OSMO Pocket) od MiniFly
Wdrożenie Omnibusa w sklepie na WooCommerce
Jak (legalnie) latać dronem w Kategorii Otwartej
Patryk