Poczta na twoim serwerze VPS

I. Wstęp

Czasem zdarza się tak, że potrzebujemy założyć własną skrzynkę mailową. Można to zrobić na popularnych portalach, ale czasem jesteśmy zmuszeni do postawienia takowej na naszym serwerze VPS, lecz nie każdy umie sobie z tym poradzić. W tym poradniku pokażę w jaki sposób zainstalować potrzebne pakiety, oraz w jaki sposób skonfigurować naszą pocztę.

Czego potrzebujemy?

  • Serwer VPS KVM (z kodem VW7N4P 10% rabatu)
  • System Ubuntu 16.04 lub inny
  • Wolny czas
  • Domenę

Na początek…

:warning: Jeśli jesteś zalogowany na konto ROOT nie musisz stosować przedrostka sudo

Przed instalacją wszystkich wymaganych pakietów należy zaktualizować nasze repozytoria. W tym celu wykonujemy komendę:

sudo apt update

Gdy mamy już aktualne repozytoria możemy przejść dalej.

II. Instalacja

Przyszedł czas na właściwą część poradnika jaką jest instalacja potrzebnych pakietów. Na początek będziemy potrzebowali serwera Apache2 oraz PHP5/7, zainstalujmy serwer Apache2 komendą:

sudo apt install apache2

Po udanej instalacji pakietu należy włączyć go oraz ustawić jego start wraz z systemem

sudo systemctl start apache2
sudo systemctl enable apache2

O ile w przypadku Apache2 sprawa była prosta, gdyż mamy domyślnie takie repozytoria, to z PHP7.3 będzie trochę trudniej, gdyż domyślnie mamy do dyspozycji PHP w wersji 7.0.
Dlatego dodajmy odpowiednie repozytoria wykonując komendę:

sudo LC_ALL=C.UTF-8 add-apt-repository ppa:ondrej/php

Po jej wykonaniu powinniśmy zobaczyć coś takiego:


Musimy kliknąc ENTER, po czym musimy znowu zaktualizować nasze repozytoria:

sudo apt update

Po zaktualizowaniu wszystkich paczek, zainstalujmy wreszcie PHP7.3:

sudo apt install php7.3 php7.3-cli php7.3-common

Jeśli zostaniesz zapytany o to czy chcesz kontynuować wciśnij Y i zatwierdź Enterem.
Po instalacji PHP7.3v jesteśmy gotowi przejść do instalacji naszej poczty.
Na początku zainstalujmy Postfix komendą:

sudo apt install postfix

Podczas instalacji zobaczymy takie okienko:


Klikamy strzałkę w prawą i ENTER, następnie zobaczymy takie okienko:

Wybieramy Internet Site i klikamy ENTER
W następnym okienku:

Wpisujemy nazwę naszej zarejestrowanej domeny, z której będziemy chcieli wysyłać emaile a następnie klikamy ENTER
Po zakończonej instalacji zrestartujmy usługę postfix komendą:

sudo service postfix restart

:warning: Jeśli po zakończonej instalacji zobaczycie błąd:

postmulti: fatal: file /etc/postfix/main.cf: parameter myhostname: bad parameter value:

Oznacza to, że macie źle ustawiony hostname. Możemy to naprawić, edytując plik

sudo nano /etc/postfix/main.cf

Odnajdujemy linijkę: myhostname: i wpisujemy tam po prostu localhost, po czym zapisujemy plik CTRL + X, następnie Y i ENTER. Teraz włączamy usługę

sudo service postfix start

Aby upewnić się, że wszystko działa wpiszmy:

sudo service postfix status

I jeśli otrzymamy odpowiedź: postfix is running oznacza to, że wszystko jest w porządku


Dobra, teraz czas na instalację **Dovecot**. Jest to klient, dostarczania poczty dlatego jest on niezwykle ważny.

W celu zainstalowania pakietu wpisujemy komendę:

sudo apt install dovecot-imapd dovecot-pop3d

Jeśli zostaniemy zapytani czy kontynuować wpisujemy Y i klikamy ENTER
:warning: Jeśli po raz kolejny zobaczymy błąd związany z naszym hostnamem musimy ponownie go edytować (patrz do góry), a po edycji powłączać usługi:

sudo service postfix start
sudo service dovecot start

Jeśli wszystko poprawnie wystartuje idziemy dalej. Teraz musimy zainstalować klienta pocztowego. Ja wybrałem SquirrelMail. A więc zainstalujmy pakiet komendą:

sudo apt install squirrelmail

Po instalacji pakietu musimy go skonfigurować. Tak więc zapraszam do kolejnej sekcji.

III. Konfiguracja

Zacznijmy od wprowadzenia polecenia:

sudo squirrelmail-configure

Naszym oczom ukaże się menu, w którym wybieramy numer 2 i klikamy ENTER
Teraz wybieramy 1 i klikamy ENTER
Tutaj wpisujemy nazwe naszej domeny tak jak poprzednio i klikamy ENTER


Dobra, teraz wpisujemy R i klikamy ENTER, aby powrócić do wcześniejszego menu.
Jeśli jesteśmy już w głównym menu wybieramy cyfrę 4. General Options i kliakmy ENTER
W naszych opcjach:

Wybieramy cyfrę 11 i klikamy Y a następnie ENTER
Po wszystkim wpisujemy S i klikamy ENTER, następnie możemy już wyjść z konsoli wpisując Q.

Teraz musimy przenieść plik konfiguracyjny do katalogu apache, aby mieć dostęp do strony. W tym celu wpisujemy polecenie:

sudo cp /etc/squirrelmail/apache.conf /etc/apache2/sites-available/squirrelmail.conf

Teraz uruchamiamy całość poleceniem:

sudo a2ensite squirrelmail.conf
sudo service apache2 reload

Teraz możemy przejść pod adres xxx.xxx.xxx.xxx/squirrelmail (gdzie xxx.xxx.xxx.xxx to IP twojego VPSa)

Dobra, teraz dodajmy pierwszego użytkownika naszej poczty. W tym celu wprowadźmy komendy:

sudo useradd nazwa_usera
sudo passwd nazwa_usera

Teraz utworzymy dla niego katalog domowy:

sudo mkdir -p /var/www/html/nazwa_usera
sudo usermod -m -d /var/www/html/nazwa_usera nazwa_usera

I nadajmy uprawnienia

sudo chown -R nazwa_usera:nazwa_usera /var/www/html/nazwa_usera

Teraz możemy się już zalogować, jednak nie możemy jeszcze wysyłać maili. Musimy dodać odpowiednie wpisy w strefie DNS domeny. W tym celu przejdźmy do edycji rekordów DNS domeny i stwórzmy 2 wpisy:

Rekord A: Name(mail), Value(IP VPS’a)
Rekord MX: HostName(nazwa domeny), Priority(5)
Rekord TXT (SPF): Name(@), Value(v=spf1 mx ~all)

Ale do wpisu TXT musimy doinstalować odpowiednie pakiety:

sudo apt install postfix-policyd-spf-python

Następnie edytujemy plik konfiguracyjny

sudo nano /etc/postfix/master.cf

Dodaj to na końcu pliku:

policyd-spf unix - n n - 0 spawn
user=policyd-spf argv=/usr/bin/policyd-spf

Następnie zapisz plik, i edytuj konfigurację Postfixa

sudo nano /etc/postfix/main.cf

I dołącz te linijki na koniec pliku:

policyd-spf_time_limit = 3600
smtpd_recipient_restrictions =
permit_mynetworks,
permit_sasl_authenticated,
reject_unauth_destination,
check_policy_service unix:private/policyd-spf

Następnie zrestartuj usługę:

sudo service postfix restart

Rekord DKIM
Na początku zaktualizujmy repozytoria oraz system komendami:

sudo apt update
sudo apt dist-upgrade

Po zakończonej aktualizacji możemy przystąpić do instalacji pakietów odpowiedzialnych za działanie rekordu DKIM. W tym celu wykonajmy komendę:

sudo apt install opendkim opendkim-tools

Jeśli zostaniemy zapytani czy chcemy zainstalować pakiety wpisujemy y i zatwierdzamy wybór klawiszem ENTER

Po udanej instalacji przejdźmy do pliku konfiguracyjnego w celu skonfigurowania naszej usługi:

sudo nano /etc/opendkim.conf

Teraz doklej ten fragment na końcu pliku:

AutoRestart             Yes
AutoRestartRate         10/1h
UMask                   002
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                 /var/run/opendkim/opendkim.pid
SignatureAlgorithm      rsa-sha256

UserID                  opendkim:opendkim

Socket                  inet:12301@localhost

We właściwości Socket należy zwrócić uwagę na port (12301), i jeżeli jest on używany przez inną aplikację na waszym serwerze, należy zmienić ten port na inny.
Cały plik zapisujemy kombinacją klawiszy CTRL + X, wybieramy y, i potwierdzamy ENTER

Teraz podłączmy usługę pod Postfix’a, w tym celu edytujmy następujący plik:

sudo nano /etc/default/opendkim

I dodajmy następującą linijkę:

SOCKET="inet:12301@localhost"

Pamiętajmy, aby zmienić port na taki sam jaki jest w pliku, który edytowaliśmy wcześniej!
Dobrze, ten plik również zapisujemy (CTRL + X, wybieramy y, i potwierdzamy ENTER)

Teraz edytujemy plik konfiguracyjny Postfix’a, aby podłączyć pod nią usługę DKIM. Wykonajmy więc komendę:

sudo nano /etc/postfix/main.cf

Teraz poszukajmy następujących linijek:

milter_protocol = 2
milter_default_action = accept

i upewnijcie się, że nie są one zakomentowane! Jeśli są, odkomentujmy je. (usuwając znak # z początku linijki)

Teraz poszukaj parametrów: smtpd_milters i non_smtpd_milters. Jeśli nie możesz ich znaleźć dodaj je w pliku tak jak zrobiłem to niżej:

smtpd_milters = inet:localhost:12301
non_smtpd_milters = inet:localhost:12301

Pamiętaj aby port zgadzał się z portem zdefiniowanym w pliku opendkim.conf

Teraz przyszedł czas na stworzenie struktury folderów odpowiedzialnej za nasz klucz rekordu DKIM. Aby utworzyć katalogi, wystarczy wykonać polecenia:

sudo mkdir /etc/opendkim
sudo mkdir /etc/opendkim/keys

Teraz stwórzmy plik z zaufanymi hostami:

sudo nano /etc/opendkim/TrustedHosts

I dodajmy do niego taką zawartość:

127.0.0.1
localhost
192.168.0.1/24

*.example.com

Podmień tylko example.com na nazwę swojej domeny (Nie edytuj 3 pierwszych linii !)

Teraz zapiszmy plik i stwórzmy nowy z tabelą kluczy:

sudo nano etc/opendkim/KeyTable

I wklej do niego następującą zawartość:

mail._domainkey.example.com example.com:mail:/etc/opendkim/keys/example.com/mail.private

Pamiętaj aby zmienić example.com na nazwę swojej domeny!

Zapiszmy plik, i stwórzmy już ostatni plik tzw. Signing Table, czyli tablica podpisów:

sudo nano /etc/opendkim/SigningTable

I umieśćmy w nim następującą zawartość:

*@example.com mail._domainkey.example.com

Pamiętajmy o zmianie example.com na nazwę swojej domeny!
Plik również zapisujemy.

Teraz, gdy mamy już te wszystkie pliki musimy wygenerować klucz publiczny (ang. public key) oraz klucz prywatny (ang. private key). W tym celu przejdźmy do wcześniej utworzonego katalogu:

sudo cd /etc/opendkim/keys

I stwórzmy tam katalog dla naszej domeny:

sudo mkdir example.com

Gdzie example.com to nazwa twojej domeny
I przejdźmy do niego:

cd example.com

Teraz wygenerujmy klucze:

sudo opendkim-genkey -s mail -d example.com

Pamiętaj, aby zmienić example.com na nazwę twojej domeny!
Teraz powinniśmy mieć 2 pliki mail.private oraz mail.txt

Jeśli tak jest przejdźmy do zmiany właściciela naszego pliku mail.private, który zawiera nasz klucz prywatny. W tym celu wykonajmy komendę:

sudo chown opendkim:opendkim mail.private

Teraz przyszedł czas na dodanie rekordu DNS do naszej domeny, lecz najpierw otwórzmy plik mail.txt:

sudo nano -$ mail.txt

powinniśmy zobaczyć zawartość podobną do tej:
mail._domainkey IN TXT "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB" ; ----- DKIM key mail for example.com

Teraz w strefie DNS domeny dodajmy nowy rekord TXT z następującymi wartościami:

Name: mail._domainkey.example.com.

Text: "v=DKIM1; k=rsa; p=MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5N3lnvvrYgPCRSoqn+awTpE+iGYcKBPpo8HHbcFfCIIV10Hwo4PhCoGZSaKVHOjDm4yefKXhQjM7iKzEPuBatE7O47hAx1CJpNuIdLxhILSbEmbMxJrJAG0HZVn8z6EAoOHZNaPHmK2h4UUrjOG8zA5BHfzJf7tGwI+K619fFUwIDAQAB"

Powyższe dane są tylko danymi przykładowymi ! Pola należy uzupełnić wartościami z waszego pliku mail.txt

Teraz zrestartujmy nasze usługi Postfix i OpenDKIM:

sudo service postfix restart
sudo service opendkim restart

Rekord DMARC
Jest to już ostatni w tym poradniku rekord, który sprawi, że wysyłane przez nas maile będą odpowiednio podpisane/zweryfikowane.

Na samym początku tak jak to było w przypadku rekordu DKIM musimy zainstalować odpowiednią usługę (OpenDMARC). W tym celu wykonujemy komendę:

sudo apt install opendmarc

Po udanej instalacji pakietu musimy standardowo skonfigurować go:

sudo nano /etc/opendmarc.conf

AuthservID mail.example.com
PidFile /var/run/opendmarc.pid #Debian default
RejectFailures false
Syslog true
TrustedAuthservIDs mail.example.com,mail2.example.com
UMask 0002
UserID opendmarc:opendmarc
IgnoreHosts /etc/opendmarc/ignore.hosts
HistoryFile /var/run/opendmarc/opendmarc.dat
SoftwareHeader true

Nasz plik powinien wyglądać mniej więcej tak jak wyżej. Musimy zmienić tylko example.com na nazwę naszej domeny.
Tutaj muszę wspomnieć o linijce SoftwareHeader domyślna wartość to true, ale możemy ją wyłączyć zmieniając ją na false, gdyż odpowiada ona za debugowanie, a to w wersji finalnej jest nam nie potrzebne. Jednak na czas konfiguracji możemy ją zostawić.

Plik zapisujemy.

Teraz stworzymy folder w którym umieścimy plik z ignorowanymi hostami:

sudo mkdir /etc/opendmarc/

I stwórzmy wyżej wspomniany plik:

sudo nano /etc/opendmarc/ignore.hosts

Plik powinien wyglądać tak:

localhost
ip

Pamiętaj, aby zmienić ip na adres IP twojego serwera
Plik zapisujemy i przechodzimy do następnego kroku.

W następnym kroku dodamy tak jak poprzednio linijkę z portem:

sudo nano /etc/default/opendmarc

A linijka wygląda tak:

SOCKET="inet:54321@localhost"

Również sprawdźmy czy port nie jest zajęty.
Najlepiej jest to zrobić uruchamiając usługę komendą:

sudo /etc/init.d/opendmarc start

Jeśli naszym oczom nie ukaże się żaden błąd możemy iść dalej. Jednak jeśli zobaczymy błąd spróbujmy zmienić port i spróbować ponownie.

Teraz musimy znowu przejść do pliku konfiguracyjnego Postfix’a, aby dodać nowe informacje.

sudo nano /etc/postfix/main.cf

I znowu szukamy wartości smtpd_milters i non_smtpd_milters i modyfikujemy je tak, aby finalnie wyglądały mniej więcej tak:

smtpd_milters=inet:localhost:12345,inet:localhost:54321
non_smtpd_milters=inet:localhost:12345,inet:localhost:54321

Pierwszy wpis dotyczy DKIM, a drugi dotyczy rekordu DMARC, którym obecnie się zajmujemy.
Pamiętajmy o portach!

Teraz zrestartujmy Postfix’a w celu wprowadzenia zmian:

sudo /etc/init.d/postfix reload

W tym momencie możemy już dodać rekord TXT do naszej domeny według poniższego wzoru:

Name: _dmarc.example.com

Text: "v=DMARC1; p=quarantine; rua=mailto:dmarc@example.com; ruf=mailto:dmarc@example.com; fo=0; adkim=r; aspf=r; pct=100; rf=afrf; ri=86400"

Pamiętajmy, aby zmienić example.com na nazwę naszej domeny!

W zasadzie to już nasz rekord DMARC jest gotowy do użycia. Jednak chętnych zapraszam dalej.

Część dla chętnych
Jeśli to czytasz to pewnie jesteś chętny w pełni zaimplementować usługę DMARC. Jeśli tak to do dzieła!

Jeśli chcemy w pełni zaimplementować usługę DMARC musimy dodać jeszcze generowanie i wysyłanie raportów. Nie jest to wymagane jednak użyteczne. Do implementacji raportów będziemy potrzebowali również bazy danych MySQL.

Dobrze, więc przejdźmy do edycji pliku schema.mysql:

sudo nano /usr/share/doc/opendmarc/schema.mysql

Tam musimy odszukać i odkomentować 2 linijki:

CREATE USER 'opendmarc'@'localhost' IDENTIFIED BY 'changeme';
GRANT ALL ON opendmarc.* to 'opendmarc'@'localhost';

Gdy już odkomentujemy te linijki musimy zmienić changeme na hasło dla tego użytkownika, zapiszmy plik i wczytajmy schemat:

sudo mysql -u root -p < schema.mysql

Oczywiście musimy podać hasło do konta root i zatwierdzić klawiszem ENTER.
Po wczytaniu schematu utwórzmy skrypt do generowania raportów:

sudo nano /etc/opendmarc/report_script

I wklejmy do niego następującą zawartość:

#!/bin/bash

DB_SERVER='database.example.com'
DB_USER='opendmarc'
DB_PASS='password'
DB_NAME='opendmarc'
WORK_DIR='/var/run/opendmarc'
REPORT_EMAIL='dmarc@example.com'
REPORT_ORG='example.com'

mv ${WORK_DIR}/opendmarc.dat ${WORK_DIR}/opendmarc_import.dat -f
cat /dev/null > ${WORK_DIR}/opendmarc.dat

/usr/sbin/opendmarc-import --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose < ${WORK_DIR}/opendmarc_import.dat
/usr/sbin/opendmarc-reports --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose --interval=86400 --report-email $REPORT_EMAIL --report-org $REPORT_ORG
/usr/sbin/opendmarc-expire --dbhost=${DB_SERVER} --dbuser=${DB_USER} --dbpasswd=${DB_PASS} --dbname=${DB_NAME} --verbose

Teraz wypełnijmy plik odpowiednimi danymi.
DB_SERVER='database.example.com' - Tutaj wpisujemy hosta MySQL (domyślnie localhost)
DB_USER='opendmarc' - Zostawiamy tak jak jest
DB_PASS='password' - Wpisujemy tutaj wcześniej ustalone hasło
REPORT_EMAIL='dmarc@example.com' - Zmieniamy example.com na nazwę naszej domeny
REPORT_ORG='example.com' - Zmieniamy example.com na nazwę naszej domeny

Zapiszmy plik i nadajmy mu odpowiednie uprawnienia:

sudo chmod +x /etc/opendmarc/report_script

Teraz wystaczy już tylko dodać skrypt do crona

sudo nano /etc/crontab

I na końcu pliku dodaj:

1 0 * * * opendmarc /etc/opendmarc/report_script

Plik zapiszmy i przejdźmy na chwilę jeszcze do konfiguracji postfixa

sudo nano /etc/postfix/main.cf

I dodajmy następującą linijkę:

sender_bcc_maps = hash:/etc/postfix/bcc_map

Plik zapisujemy i edytujemy kolejny

sudo nano /etc/postfix/bcc_map

Dodajemy:

dmarc@example.com mailboxforbcc@example.com

Zmieniając example.com na nazwę naszej domeny. Zapisujemy.

Teraz wykonujemy komendę:

sudo postmap /etc/postfix/bcc_map

I restartujemy konfigurację postfixa

sudo /etc/init.d/postfix restart


Gotowe!
Teraz możesz wysyłać i odbierać wiadomości! Nasze wiadomości będą również odpowienio podpisane oraz zweryfikowane.

IV. Podsumowanie

Tak oto poradnik dobiegł końca! Mamy już funkcjonalną pocztę na naszym serwerze VPS. Jeśli masz jakieś pytania kieruj je bezpośrednio pod postem.

6lajków

Poradnik jest OK, ale nie ma słowa o DKIM, DMARC, SPF - WYMAGANE, aby dostarczyć maile do np. Onetu, Gmaila; obecnie mail będzie odrzucany przez ~90% dostawców mailowych :confused:

4lajki

Niestety nie mam pojęcia jak takie wpisy powinny wyglądać.

1lajk

Informacje nt. wpisu SPF zostały dodane. Pozostałe wpisy zostaną dodane

2lajki

Poradnik został uzupełniony o rekordy DKIM oraz DMARC

4lajki