Serwer pocztowy oparty na Postfixie to na pewno dobry pomysł w kontekście jego szybkości, bezpieczeństwa i elastyczności. W zasadzie Postfix to zespół współpracujących ze sobą demonów do obsługi i przetwarzania poczty. Instalacja Posfixa najczęściej wiąże się z instalacją innych pakietów takich jak SASL czyli autoryzacja poczty wychodzącej ( bez tego nasz sewer będzie typu Open Relay ), pakiet do szyfrowania TLS/OpenSSL czy też pakiety odpowiedzialne za obsługę pobierania poczty z serwera na komputer klienta wykorzystując protokoły POP3 czy IMAP. Instalacja wykonana z wykorzystaniem dystrybucji Linux Debian.
Instalacja i Konfiguracja Postfixa
Poniżej przedstawiony jest proces instalacji i konfiguracji serwera MTA Postfix w oparciu o użytkowników systemowych. Tak więc w tym przypadku opieramy się na trzymanie danych w oparciu o pliki tekstowe a nie bazę danych typu MySQL.
Sama instalacja Postfixa jest prosta, wystarczy wpisać poniższe polecenia w konsoli.
Aktualizujemy pakiety:
apt-get update apt-get upgrade
Następnie instalujemy Postfixa:
apt-get install postfix
Po zainstalowaniu pakietu przechodzimy do właściwej konfiguracji Postfixa. Na samym początku pojawi się nam okno dialogowe w którym podajemy podstawowe informacje dotyczące konfiguracji Postfixa.
Konfigurujemy nasz serwer pocztowy krok po kroku zgodnie z podanymi poniżej zalecanymi ustawieniami:
- General type of mail configuration: wybieramy Internet Site
- System mail name: wpisujemy nazwę domeny naszego serwera ( musi być zgodna z FQDN )
- Root and postmaster mail recipient: wpisujemy nazwę maila dla roota ( administratora serwera pocztowego )
- Other destination to accept mail: nazwy domen obsługiwanych przez serwer, mogą to być zarówno domeny FQDN jak i lokalne
- Force synchronous updates on mail queue: NO
- Local networks: pozostawiamy adres IP lokalny
- Mailbox size limit: 0
- Local address extension character: +
- Internet protocols to use: all
Jeśli popełniliśmy błąd podczas podstawowej konfiguracji wystarczy, że wpiszemy poniższe polecenie aby rozpocząć proces od nowa:
dpkg-reconfigure postfix
Konfiguracja i tak zostaje zapisana w pliku: /etc/postfix/main.cf tak więc możemy konfigurować parametry „ręcznie”.
Domyślna konfiguracja Postfixa wymusza aby pracował w środowisku chroot, co można zmienić ( nie polecam takiej zmiany ze względów bezpieczeństwa ) w pliku: /etc/postfix/master.cf co widać w linii odwołującej się do demona smtp ( patrz: 3 kolumna – w tym wypadku jest nałożony chroot „-„, literka n go deaktywuje ):
smtp inet n - - - - smtpd
Zmieniamy odpowiednie dyrektywy w pliku /etc/postfix/main.cf jak poniżej:
+ Dyrektywa: myhostname
Zmieniamy nazwę naszego hosta na naszą domenę zgodną z FQDN np. mail.naszadomena.pl
Tak też będzie identyfikowany nasz serwer pocztowy w sieci.
myhostname = mail.naszadomena.pl
+ Dyrektywa: mydestination
Tutaj wpisujemy domeny obsługiwane przez nasz serwer ( oczywiście domeny muszą w DNSach być nakierowane na nasz serwer, co jest chyba oczywiste ). Należy uważać aby nie wpisywać domen, które są wyszczególnione do obsługi wirtualnych domen w dyrektywach: virtual_alias_domain i virtual_mailbox_domain ! Z domen wyszczególnionych w mydestination będziemy korzystać my i nasi użytkownicy systemowi.
mydestination = mail.naszadomena.pl, naszadomena.pl, nasza_inna_domena.pl, localhost, [LOKALNA_NAZWA_KOMPUTERA]
Powyższy wpis dotyczy zarówno domen FQDN jak i domen lokalnych. System konfiguracyjny automatycznie dopisał nam: localhost i nazwę komputera, które pobrał z pliku gdzie trzymane są nazwy hostów: /etc/hosts
+ Dyrektywa: mynetworks
Ten wpis podaje, które adresy należą do naszej sieci ( są zaufane ). W tym wypadku dodajemy adres lokalny serwera. Z tego adresu maile nie będą poddawane restrykcjom z uwagi na „zaufanie” wychodzą i wchodzą w obręb tej samej sieci. Wpis jest taki jaki został ustawiony podczas startowej konfiguracji Postfixa.
mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
+ Skrzynki pocztowe
Jeśli teraz wyślemy naszego maila do jakiegoś użytkownika wykorzystując jedną z naszych domen ( musi być to domena z mydestination lub jakaś wirtualna – jeśli takową ustaliliśmy w konfiguracji ) to mail zostanie wysłany do użytkownika systemowego, na przykład wysyłamy na naszym serwerze maila z wykorzystaniem domeny lokalnej:
echo "jakiś mail" | mail -s "testowy temat" nasz_user@localhost
Sprawdzamy co mówią nam nasze logi mailowe po wysłaniu maila:
tail /var/log/mail.log
Jeśli mamy w logach status SEND i żadnych błędów to nasz mail wylądował w skrzynce usera, nasuwa się pytanie gdzie ta skrzynka jest ? Skrzynki ( domyślnie typ: mbox ) znajdują się w katalogu: /var/spool/mail/ ( lub /var/mail/ – jeśli brak chroota ) umieszczone są tam pliki tekstowe z naszymi mailami, nazwa pliku oczywiście określa użytkownika systemowego. Postfix obsługuje dwa typy skrzynek ( sposób magazynowania wiadmości ): MBOX i MAILDIR. Mail wysłany do użytkownika, który nie istnieje w naszym systemie oczywiście zostanie odrzucony chyba, że jest aliasem wtedy nastąpi przekierowanie do usera lub na inny serwer pocztowy. Przypominam, że ta konfiguracja Postfixa opiera się na plikach tekstowych, tak więc mówiąc o użytkownikach poczty mówię o użytkownikach systemowych, których dane zapisane są w pliku: /etc/passwd.
Do odbierania poczty jak wspomniałem na wstępie służą protokoły POP3 i znacznie bardziej od niego popularny IMAP. Tak więc aby użytkownik, mógł ze swojego komputera obsługiwać pocztę na serwerze należy zainstalować serwer Dovecot.
Wracając do skrzynek pocztowych to dla przykładu jeśli chcemy wymusić aby Postfix przetrzymywał nasze maile w standardzie „MAILDIR” dodajemy poniższą opcję do pliku konfiguracyjnego: /etc/postfix/main.cf
home_mailbox = Maildir/
Powyższy katalog Maildir powinien zostać utworzony w katalogu domowym użytkownika ( np. /home/[USER]/Maildir/ ). Jeśli takiego katalogu nie ma to wysłanie maila na skrzynkę użytkownika spowoduje automatyczne utworzenie takiego katalogu wraz z niezbędnymi plikami przechowującymi pocztę użytkownika. Jeśli katalog nie został stworzony sugeruję przejrzeć logi – możliwe, że są problemy z uprawnieniami katalogu.
+ Bezpieczeństwo i testowanie Postfixa
UWAGA: Taka podstawowa konfiguracja to proszenie się o kłopoty 🙂 Nasz serwer staje się Open Relay`em więc każdy może wykorzystać nasz serwer do spamu.
Więcej informacji na temat restrykcji, autoryzacji za pośrednictwem SASL i testowania naszego serwera pocztowego można znaleźć w poniższym artykule:
Obsługa wirtualnych aliasów
Ta część tekstu dotyczy ficzera, który był mi potrzebny do obsługi wielu aliasów mailowych.
Wirtualne aliasy są po to aby użytkownik mając na przykład jedna skrzynkę pocztową na naszym serwerze mógł mieć także inne adresy, które będą tożsame z jego głównym adresem. Tak więc mamy tutaj z przekazywaniem poczty z innych „wirtualnych” adresów pocztowych na „fizyczne” adresy naszych użytkowników na serwerze, które lądują we właściwej skrzynce systemowego użytkownika.
Przykłady plik z wirtualnymi aliasami:
admin@wirtualny_alias.pl webmaster@nasza_domena.pl biuro@mail.pl webmaster@nasza_domena.pl szalony_user@mail.pl szalony
Tak więc dla przykładu mail wysłany na admin@wirtualny_alias.pl zostanie przekazany na maila webmaster@nasza_domena.pl ( poczta zostaje przekazana na nasz serwer i ląduję u użytkownika webmaster )
W przypadku drugiego przykładu mail wysłany na adres biuro@mail.pl zostaje przekazany tak samo jak w pierwszym przypadku na nasz właściwy adres webmaster@nasza_domena.pl
W trzecim przypadku mail wysłany na adres szalony_user@mail.pl ląduje u użytkownika lokalnego „szalony”.
Oczywiście wszystkie domeny wirtualne muszą zostać dopisane do dyrektywy: virtual_alias_domains.
Tak więc do pliku konfiguracyjnego main.cf dodajemy poniższe opcje dotyczące naszych wirtualnych domen:
virtual_mailbox_base = /var/mail/virtual virtual_transport = maildrop virtual_alias_domains = wirtualna_domena_1.pl, wirtualna_domena_2.pl, wirtualna_domena_3.pl virtual_alias_maps = hash:/etc/postfix/virtual_alias
W zasadzie tutaj nie trzeba nic tłumaczyć, trzeba tylko pamiętać aby wyszczególnione domeny w virtual_alias_domains nie były takie same jak w dyrektywie mydestination !
Teraz przystępujemy do utworzenia naszych aliasów mailowych. Tworzymy plik o takiej samej nazwie jak podaliśmy w powyższej dyrektywie virtual_alias_maps, czyli w naszym przypadku: /etc/postfix/virtual_alias
I tam dodajemy nasze wirtualne aliasy zgodnie z podanym wcześniej przykładzie. Dla przykładu:
Następnie wykonujemy polecenie:
postmap /etc/postfix/virtual_alias
Następnie restartujemy Postfixa:
service postfix restart
W katalogu /etc/postfix/ powinien pojawić się przetworzony nowy lub zaktualizowany plik: virtual_alias.db
Teraz możemy przystąpić do testowania jak spisują się nasze aliasy pocztowe 🙂
Błędy, problemy … rozwiązania
+ Problem z dostarczeniem poczty na serwery Google
Przykładowy log z naszego serwera:
Our system has detected that this message does 550-5.7.1 not meet IPv6 sending guidelines regarding PTR records and 550-5.7.1 authentication. Please review 550-5.7.1 https://support.google.com/mail/?p=ipv6_authentication_error for more 550 5.7.1 information.
Musimy sprawdzić opcję określającą obsługę protokołów IP, zmieniamy tak jak poniżej w pliku /etc/postfix/main.cf
inet_protocols = ipv4
+ Przekierowanie maili do /dev/null
Warto skorzystać z takiego rozwiązania aby zatrzymać niechcianą pocztę. Na przykład dla usuwanie maili od usera www-data szczególnie jeśli autorespondery niektórych userów wysyłają na domyślny adres www-data@nasz-host.com ogromną ilość maili potwierdzających dostarczenie wiadomości.
Wykorzystamy do tego wirtualne aliasy, na samym początku tworzymy użytkownika systemowego no-reply:
useradd -s /sbin/nologin -d /dev/null no-reply passwd no-reply
Po czym dodajemy do pliku z naszymi aliasami przekierowanie na konto usera no-reply ( u mnie plik z wirtualnymi aliasami ma nazwę: /etc/postfix/virtual_alias ):
www-data@nasz-host.com no-reply
Po czym należy przegenerować bazę z aliasami i zrestartować postfixa:
postmap /etc/postfix/virtual_alias /etc/init.d/postfix reload
keys: instalacja postfixa, virtualne aliasy, virtualne, przekierowania, autorespondery, maile no-reply, /dev/null, przykładowa konfiguracja, debian, ubuntu, linux, raspberry, serwery pocztowe, szybki i bezpieczny MTA, tutorial, poradnik
Zmieniłem inet_protocols na ipv4, mimo to zwrotki z Gmaila nadal przychodzą. Co może być nie tak? Dodam, że nie udaje się zrestartować Postfixa. To znaczy maile wysyła, jednak nie dochodzą one na skrzynki gmailowe.