logo new

red3
red2

Postfix - przetwarzanie poczty za pomocą kilkunastu specjalizowanych programów

 

Procesy uruchamiane są w określonej liczbie, aby wykonać określoną liczbę czynności, a w przypadku dłuższej bezczynności są usuwane. Taka architektura zapewnia łatwe udoskonalanie wybranych funkcji serwera bez konieczności jego przebudowy w całości - wystarczy poprawić lub napisać ponownie jeden z programów. Nie bez znaczenia jest też aspekt bezpieczeństwa - procesy mające bezpośredni dostęp do zasobów lokalnych chronione są łańcuchem kilku innych procesów pośredniczących.

Postfix - wybrane programy pomocnicze
postalias - służy budowie i utrzymaniu tradycyjnej bazy aliasów pocztowych.
postcat - wyświetla zawartość binarnych plików z kolejek w formie tekstowej.
postconf - wyświetla aktualne wartości zmiennych konfiguracyjnych Postfiksa.
postdrop - wstawia do kolejki maildrop treść pobraną ze standardowego wejścia.
postmap - służy budowie i utrzymaniu (kompilacji) baz danych i tabel konfiguracyjnych.
postfix - skrypt sterujący serwera Postfix; dopuszcza komendy:
- check - sprawdzenie poprawności aktualnej konfiguracji,
- start - uruchamia serwer Postfix wraz ze sprawdzeniem poprawności konfiguracji,
- stop - zatrzymuje serwer,
- flush - wymusza próbę wysłania listów z kolejki deferred,
- reload - odświeża konfigurację serwera po zmianach w plikach konfiguracyjnych.

Z punktu widzenia obiegu poczty najważniejszą i najciekawszą innowacją jest zastosowany system kolejkowania. Obejmuje on aż cztery różne kolejki, przechowujące pocztę w różnych stadiach jej obróbki, i kilka pomocniczych katalogów. Przemieszczanie listów między kolejkami należy do zadań poszczególnych programów wchodzących w skład Postfiksa. Najważniejszą kolejką jest incoming - przechodzą przez nią wszystkie listy niezależnie od nadawcy i adresata. Incoming jest pomostem między procesem odbioru listu przez komponenty serwera Postfix a dostarczeniem go odbiorcy - lokalnemu lub zdalnemu. Kolejki active i deferred tworzą zamknięty obieg. Active zawiera pliki aktualnie otwarte w celu doręczenia, a jeśli doręczenie jest niemożliwe, plik zostaje skierowany do deferred. Kolejka maildrop służy do zapisywania poczty wysyłanej lokalnie z danego hosta.

Dostarczeniem poczty do kolejki incoming kieruje program cleanup. Otrzymuje on listy albo z kolejki maildrop (dokąd trafiają one od lokalnego nadawcy za pośrednictwem programu o nazwie "sendmail" - dla zachowania zgodności z oprogramowaniem skompilowanym do pracy z sendmailem) poprzez program pickup albo od daemona smtpd odpowiedzialnego za odbiór listów z sieci. Zadaniem programu cleanup jest również uzupełnienie i przepisanie nagłówków zgodnie ze standardem SMTP oraz dyrektywami odwzorowania (mapping) adresów wyznaczonymi przez administratora; zadanie to jest w pewnej części przekazywane programowi trivial-rewrite. Z kolejek incoming oraz deferred pliki przejmowane są przez menedżera kolejek qmgr i przenoszone do kolejek active i - być może - deferred. Przy wysyłaniu listów z kolejki active program stosuje strategie uwzględniające m.in. następujące czynniki:

- nieobciążanie pojedynczego odbiorcy zbyt dużą liczbą jednoczesnych połączeń;
- sprawiedliwa obsługa poszczególnych serwerów odbierających - wybór listów odbywa się według strategii round-robin, działającej na zbiorze listów uporządkowanych według odbiorców;
- sprawiedliwa obsługa kolejek active i deferred - przy wyborze listów z kolejki deferred stosuje się strategię exponential backoff z podwajaniem odstępu czasowego między kolejnymi próbami dostarczenia listu.

Rozproszenie funkcji pomiędzy mniejsze programy oraz architektura i strategie zarządzania kolejkami skutkują większą wydajnością oraz większą odpornością przy dużym obciążeniu czy awarii. Pojedynczy niewysłany list nie powinien zablokować wysyłania całej kolejki. Zgodnie z zapewnieniem autora, Postfix jest w stanie obsłużyć milion listów na typowej stacji roboczej PC.

Instalacja

Po rozpakowaniu archiwum ze źródłami Postfiksa przenosimy się do utworzonego katalogu poleceniem:

cd postfix-*

Następnie tworzymy hierarchię plików Makefile poleceniem:

make makefiles OPT="-O3 -m486 -fexpensive-optimizations \



  -fomit- frame-pointer" DEBUG=""

Opcje OPT służą optymalizacji kodu przez kompilator gcc, zaś opcja DEBUG nakazuje pozostawienie symboli niezbędnych do odpluskwiania (przy instalacji ostatecznej lepiej będzie dodatki te usunąć). Możemy też podać ścieżkę do kompilatora (parametr CC). Kompilację przeprowadzamy dobrze znanym poleceniem make.

Po usunięciu sendmaila z systemu (zalecamy jego backup, dopóki nie przekonamy się o niezawodności instalacji Postfiksa) zakładamy użytkownika o nazwie postfix, nie mającego katalogu domowego i powłoki. Wybieramy rodzaj uprawnień i dostępu, jaki chcemy mieć do katalogu z kolejkami - czy katalog ma być udostępniony do zapisu wszystkim użytkownikom, czy też zapisy mają być dokonywane za pośrednictwem programu ze zmienionym identyfikatorem obowiązującym (setgid). W drugim przypadku zakładamy również nową grupę dla tego zadania.

Następnie instalujemy Postfix poleceniem make install. Uruchomiony skrypt zapyta nas o ścieżki dostępu do poszczególnych komponentów serwera - katalogi z plikami konfiguracyjnymi, daemonami i programami użytkowymi uruchamianymi z linii komend, a także o identyfikator użytkownika oraz grupy dla Postfiksa.

Konfigurowanie

Pliki konfiguracyjne przygotowane zostały jako tekstowe, bez potrzeby obróbki jakimkolwiek preprocesorem, i zawierają obszerne wyjaśnienia. Składnia poleceń konfiguracyjnych jest prosta: parametr1 = wartość. Możliwe jest też użycie wcześniej zdefiniowanych zmiennych: parametr2 = $parametr1. Globalne parametry pracy Postfiksa ustawiane są w pliku o nazwie main.cf. Do prawidłowego funkcjonowania niezbędne jest nadanie wartości parametrom myhostname, mydomain oraz myorigin. Parametr myorigin odpowiada za część domenową adresów pocztowych pojawiających się w wysyłanej poczcie i może przybierać wartości $myhostname, $mydomain lub inne, przypisane wprost.

Należy również określić zestaw domen obsługiwanych przez dany serwer. Ustawienia te reguluje parametr mydestination, który może przybrać postać:

mydestination = $myhostname, localhost.$mydomain, $mydomain

Jak widać, przypisanie szeregu wartości jednej zmiennej konfiguracyjnej wymaga prostego wyliczenia z przecinkiem jako separatorem. W podobny sposób wybieramy hosty mogące wysyłać pocztę za pośrednictwem naszego serwera (mail relaying):

mynetworks = 192.168.1.0/28, 192.168.37.0/28

Prawidłowe podanie powyższych parametrów powinno wystarczyć do działania serwera Postfix w instalacji, w której istnieje nieskrępowany dostęp do portu SMTP. Prosta składnia i przejrzystość pliku konfiguracyjnego to główne, ale nie jedyne zalety zarządzania instalacją Postfiksa. Brak jest również różnego rodzaju subtelnych i nieuchwytnych wzajemnych zależności między poszczególnymi opcjami konfiguracyjnymi, a także między nimi a elementami środowiska, w którym uruchamiany jest serwer. Dzięki temu problemy, które w sendmailu wymagały dni, a czasem i tygodni wytężonej pracy, w Postfiksie dają się rozwiązać w ciągu kilku godzin, a nawet i minut - np. kompletne zdefiniowanie wirtualnych domen pocztowych z identycznymi, różnymi od pierwotnych, adresami nadawców.

 

Postfix - wybrane parametry konfiguracyjne (plik main.cf)

Kontrola zasobów:

  • header_size_limit - maksymalny rozmiar nagłówka listu; obszar nagłówka wykraczający poza limit jest przenoszony do treści listu
  • extract_recipient_limit - maksymalna liczba odbiorców listu określonych w nagłówku
  • message_size_limit - maksymalny rozmiar listu
  • queue_minfree - minimum wolnego miejsca na partycji dyskowej, na której zlokalizowane są kolejki
  • qmgr_message_active_limit - maksymalna liczba listów obsługiwanych jednocześnie w kolejce active
  • default_destination_concurrency_limit - liczba równoczesnych sesji z tym samym serwerem pocztowym.

Operacje na adresach:

  • canonical_maps - definiuje tabelę odwzorowania (mapping) adresów dla programu cleanup; powoduje odwzorowanie zarówno adresów nadawców, jak i odbiorców - użyteczne przy przekształceniu adresu postaci login@domena na Imie.Nazwisko@domena.
    Przykład: canonical_maps = hash:/etc/postfix/canonical
  • sender_canonical_maps - analogicznie do canonical_maps z ograniczeniem do przekształcania adresów nadawcy; przekształcenie obejmuje wszystkie pola nagłówka z From: i Return-Path:
    recipient_canonical_maps - podobnie jak sender_canonical_maps - z ograniczeniem do adresów odbiorców. Przeszukanie tablic z sender_canonical_maps i recipient_canonical maps jest dokonywane przed przeszukaniem canonical_maps
  • masquerade_domains - przekształca adresy nadawców do postaci login@domena (maskowanie).
    virtual_maps - lista tablic zawierających adresy wirtualne i odpowiadające im adresy rzeczywiste; adresy raz znalezione w tablicach adresów wirtualnych podlegają kolejnemu dopasowaniu do tych tablic.

Ochrona przed natrętną pocztą reklamową UCE

  • header_checks - definiuje tablice zawierające wyrażenia regularne opisujące nagłówki listów, które mają być odrzucane, np. header_checks = regexp:/etc/postfix/header_checks
  • smtpd_client_restrictions - lista dostępu do portu tcp 25 (SMTP). Obowiązuje zasada "pierwszego dopasowania"
  • smtpd_helo_required - wprowadza wymóg rozpoczęcia sesji SMTP komendą HELO (lub EHLO), co zablokuje dostęp części programów spamerskich
  • smtpd_helo_restrictions - ograniczenie wysyłania poczty via Postfix z użyciem polecenia HELO.
    - reject_invalid_hostname - odrzuca hosty niewłaściwie formułujące nazwę hosta w poleceniu SMTP HELO
  • relay_domains - domeny adresowe, dla których poczta ma być przyjmowana; domyślnie przyjmuje wartość $mydestination.

 

Serwis artinfo.com.pl wykorzystuje pliki cookie. Korzystając z serwisu wyrażasz jednocześnie zgodę na wykorzystanie plików cookie. Możesz wyłączyć pliki cookie w opcjach swojej przeglądarki internetowej. Cookies to małe pliki tekstowe, które serwis internetowy umieszcza na dysku użytkownika lub w jego przeglądarce. Nie używamy cookies do gromadzenia danych osobowych, takich jak: imię, nazwisko lub adres e-mail.