SP24 | 2019-04-24 09:07:49 UTC | #1
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?
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.
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.
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 nazwausera
sudo passwd nazwausera
Teraz utworzymy dla niego katalog domowy:
sudo mkdir -p /var/www/html/nazwausera
sudo usermod -m -d /var/www/html/nazwausera nazwa_usera
I nadajmy uprawnienia
sudo chown -R nazwausera:nazwausera /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-spftimelimit = 3600
smtpdrecipientrestrictions =
permitmynetworks,
permitsaslauthenticated,
rejectunauthdestination,
checkpolicy_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:[email protected]; ruf=mailto:[email protected]; 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='[email protected]'
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='[email protected]'
- 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.
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.
DBanaszewski | 2019-04-20 14:14:36 UTC | #2
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:
SP24 | 2019-04-20 14:23:21 UTC | #3
Niestety nie mam pojęcia jak takie wpisy powinny wyglądać.
SP24 | 2019-04-20 14:34:28 UTC | #4
Informacje nt. wpisu SPF zostały dodane. Pozostałe wpisy zostaną dodane
SP24 | 2019-04-24 09:08:18 UTC | #5
Poradnik został uzupełniony o rekordy DKIM oraz DMARC