Postfix – serwer pocztowy (podstawy)

Krótki opis

Postfix to jeden z najpopularniejszych MTA (Mail Transport Agent) czyli agentów dostarczających pocztę. Powstał jako odpowiedz na liczne problemy z bezpieczeństwem Sendmaila i jest zbudowany zgodnie z nowszymi standardami zarówno programistycznymi jak i bezpieczeństwa.

Instalacja

Instalacji możesz dokonać z źródeł lub z pakietu. Najprostsza jest oczywiście instalacja z pakietu ale pamiętaj iż program ma wtedy ustawione pewne parametry już podczas kompilacji, które mogą Ci przeszkadzać.

W dystrybucjach używających systemu pakietów rpm instalacje wykonasz wykorzystując polecenie:

rpm -i postfix

Instalacje w Debianie dokonasz wydając polecenie

apt-get install postfix

Uruchomienie, restart i zatrzymanie serwera

Serwer uruchamiamy (w trybie konsoli) w dystrybucjach wykorzystujących schemat V System (czyli np. Red Hat, Debian, Mandriva (dawny Mandrake) ale nie Slackware) przy pomocy polecenia:

/etc/init.d/postfix start

Serwer restartujemy poleceniem:

/etc/init.d/postfix restart

Zatrzymania serwera dokonamy przy pomocy polecenia:

/etc/init.d/postfix stop

Najprostszy plik konfiguracyjny

Przedstawiony niżej plik konfiguracyjny to najprostszy jaki można stworzyć by program działał. Jest on w miarę bezpieczny ale przeznaczony raczej do domowego zastosowania. Pozwala na wysyłanie poczty jedynie z lokalnej sieci. Nie ma włączonej obsługi domen wirtualnych ani innych zaawansowanych ustawień ale ma jedną zaletę: działa.

#! /bin/bash

# see /usr/share/postfix/main.cf.dist for a commented, fuller
# version of this file.

# ustawienia katalogów i użytkowników dla postfixa
command_directory = /usr/sbin
daemon_directory = /usr/lib/postfix
program_directory = /usr/lib/postfix

setgid_group = postdrop
biff = no
notify_classess= resource, software, policy, protocol, software
#notify_classess - kiedy wysyłać maila z ostrzeżeniami o błędach

## sieciowe ustawienia
myhostname = gateway
mydomain = localnet
myorigin = poczta.$mydomain
# myorigin to adres pocztowy ustawiany przez system pocztowy
# w listach przekazywanych

smtpd_banner = Serwer pocztowy $myhostname
mynetworks = 127.0.0.0/8, 192.168.1.0/8
inet_interfaces = 192.168.1.2, 127.0.0.1
mydestination = gateway.localnet, localhost.localdomain, localhost,
$myorigin, 192.168.1.2 127.0.0.1, poczta.localnet

Kilka ważniejszych zmiennych pokazanych wyżej to:

  • myhostname – nazwa komputera, na którym zainstalowany jest MTA
  • mydomain – nazwa domeny, do której należy komputer
  • myorigin – nazwa, którą MTA podpisze się wysyłając wiadomość (pojawi się w polu from użytkowników serwera ich wiadomości, o ile oni sami w swoich wiadomościach tego nie ustawią)
  • smtpd_banner – nazwa, którą przedstawi się nasz Postfix, gdy klient połączy się z naszym systemem SMTP; najlepiej ustawić ją tak aby nie było widać ani nazwy naszego programu ani wersji, powinno to zniechęcić przynajmniej część hackerów
  • mynetworks – adresy, skąd MTA będzie przyjmował pocztę, należy tutaj wpisać sieć lokalną aby przynajmniej z niej można było wysyłać listy,
  • inet_interfaces – interfejsy, na których słucha program, nie zawsze musi słuchać na wszystkich
  • mydestination – adresy, które MTA powinien potraktować lokalnie i przekazać do lokalnego przekazywania.

Pamiętajmy iż plik /etc/mailname określa nazwę hosta pocztowego (bez kropki). Ustawiamy ją podobnie jak zmienną mydomain, gdyż niektóre programy (np. bezpieczeństwa) mają własne programy SMTP (by nie używać potencjalnie skompromitowanego systemu pocztowego), i z niego biorą dane. Pozwoli nam to uniknąć problemów z nie dostarczoną pocztą przez nie wysyłanie.

 

Pliki Konfiguracyjne

Katalogiem konfiguracyjnym jest /etc/postfix/ (przynajmniej w moim Debianie). Zawiera on pliki

  • access – kontrolujący dostęp do serwera poczty
  • canonical – odpowiedzialny za zamianę nazw użytkowników
  • dynamicmaps.cf – ??
  • main.cf – główny plik konfiguracyjny dla programu określający podstawowe paramtery
  • master.cf – plik konfiguracyjny procesu postfix, określa jak powinny byc inicjowane poszczególne składowe pakietu,
  • pcre_table – plik z alternatywnymi tabelami do przepisywania adresów lub określania przeznaczenia poczty (routingu).
  • post-install – skrypt poinstalacyjny postfixa
  • postfix-file – plik z danymi dla skryptu post-install (nie edytować!)
  • postfix-script – wygląda jak skrypt odpowiedzialny za uruchomienie itp.
  • regexp_table – opcjonalna tabela użytkowników do przepisywania i routingu poczty
  • reloceted – tablica do relokacji poczty, wysyła informację typu "użytkownik został przeniesiony do"
  • transport – tablica określająca sposoby transportu poczty (np.: w zależności od adresata)

Przydatne komendy

Jest kilka przydatnych komend, które pozwalają na znacznie łatwiejsze zarządzanie pocztą:

  • postconf wyświetla aktualną konfigurację dla określonego paramteru albo wszystkie parametry
  • postmaster -d – pozwala usuwać wiadomości z kolejki
  • /etc/init.d/postfix reload – odczytuje na nowo plik konfiguracyjny dla postfixa
  • postfix check – sprawdza strukturę katalogów i plików Postfixa, ostrzega o brakujących plikach i katalogach lub złych ich ustawieniach (właścicielach i trybie dostępu), tworzy brakujące katalogi.
  • mailq – wyświetlenie kolejki oczekujących listów

 

Relayhost

Relayhost, czyli przekazywanie całej naszej poczty przez inny host jest czasem bardzo przydatne. Szczególnie gdy jesteśmy jako sieć jedynie na łączu dostępowym np.: modemie. W Postfixie ustawia się to bardzo prosto, podając jedynie nazwę hosta, który odbierze naszą pocztę. Przykład:

relayhost = knf.p.lodz.pl

Od tej chwili wszystko przechodzi przez zdefiniowany przez nas host (w naszym przykładzie knf.p.lodz.pl).

 

Zapomniałbym o jednym. Listy z kolejki usuwa się (w sensie wymuszenia wysłania) poleceniem postfix flush. Należy więc w skrypcie inicjującym połączenie dodać taką komendę. Dzięki niej listy natychmiast zostaną wysłane

master.cf

W pliku main.cf można określić domyślną ilość procesów uruchomionych przez postfixa, można to udokładnić w master.cf Plik ten określa m.in. zasoby, jakie możemy przydzielić określonemu procesowi (określa to kolumna maxproc, domyślna liczba to 50) i czy dany podprogram działa w środowisku chroot.

Gdy ktoś odchodzi

Z czasem konta użytkowników serwera są usuwane. Jedni rezygnują z naszych usług, innych musimy sami wyrzucić. Co jednak zrobić z listami przychodzącymi na ich adres? Najlepiej wysłać informację do nadawcy iż konto takie zostało wykasowane, pewnie z jakąś dodatkową informacją np. nowym adresem czy numerem telefonu.

Z pomocą przychodzi tutaj nam mapa relocated. Jej składnia jest następująca: z lewej strony jest nazwa konta, z prawej komunikat. Jeżeli jest on wielowyrazowy należy umieścić go w cudzysłowie.
Przykład:

ziutus "Nowy adres ziutusa to: ziutus@www.rak.pl"

Następnie informujemy postfixa o wykorzystaniu tej mapy definiując zmienną relocated_maps .


relocated_maps = hash:/etc/postfix/relocated

Następnie wywołujemy postmap /etc/postfix/relocated i przeładowujemy Postfixa /etc/init.d/postfix reload . Teraz powinno już działać. Ustawienie testujemy wysyłając maila na wpisane konto (u nas ziutus).

 

Limity wielkości skrzynki oraz wiadomości

Podstawową sprawą jest ustawienie limitów na wielkość wiadomości oraz skrzynki. Pozwoli nam to uniknąć sytuacji gdy ktoś będzie przesyłał filmy listami. Limity na wielkość wiadomości definiuje zmienna message_size_limit a limity na wielkość skrzynki mailbox_size_limit . Obie liczby podawane są w bajtach.
Przykład:


message_size_limit = 5000000
mailbox_size_limit = 25000000

Skrzynki użytkowników są wielkości 25 MB a maksymalna wielkość przesyłki 5 MB.

 

Oprócz globalnych limitów ustawionych w Postfixie, program honoruje limity ustawione przy pomocy qouty. Można więc wydzielając osobną partycję na pocztę limitować miejsce na serwerze w zależności od użytkownika.

Ciekawostka: Dodatkowo można określić ilość linii w liście:

line_lenght_limit = 10000

 

Limity czasowe dla klientów

Należy również ustawić limity czasowe dla klienta pocztowego. Podstawowy to command_time_limit czyli czas na wykonanie wszystkich poleceń (w sekundach).

Przykład:

command_time_limit = 1200

Formaty i miejsca skrzynek pocztowych

Postfix potrafi obsłużyć mailbox-y (poczta w jednym pliku w katalogu /var/mail), zapisać pocztę do katalogów użytkownika (/home/user/Mailbox/), jak również Maildiry (każda wiadomość w osobnym pliku, z określeniem stanu wiadomości). Domyślny sposób to mailbox. Jeżeli chcemy ustawić aby pocztę dostarczał do katalogu domowego użytkownika należy odpowiednio ustawić zmienną home_mailbox:

home_mailbox = Mailbox

Jeżeli natomiast chcemy przełączyć na Mialdir-a to musimy w pliku /etc/postfix/main.cf ustawić zmienną home_mailbox:

home_mailbox = Maildir/

Oczywiście jeżeli nie chcemy zmieniać domyślnego miejsca dostarczania wiadomości nie należy ustawiać zmiennej home_mailbox.

Projektując nowy system pocztowy (np. zmieniając domyślny system skrzynek pocztowych z mbox-a na maildira) należy zadbać aby pozostałe aplikacje (co najmniej klient POP3, imap i interfejs WWW) współpracowały z określonym formatem skrzynek. Często jest tak, iż Postfix stosuje procmaila do dostarczania poczty do skrzynek lokalnych użytkowników. Należy wtedy ustawić procmaila aby to on tworzył Maildiry.

Logi

Postfix standardowo loguje informacje do systemowego sysloga. To właśnie w nim możesz określić pliki, w których zapisywane są informację. Istnieje jednak kilka zmiennych mających wpływ na informacje wysyłane do sysloga.

Jedną z nich jest disable_dns_lookups. Jeżeli ustawimy ją na na yes zamiast zapisywać do logów nazwy domenowe komputerów trafią tam adresy IP komputerów.

Bezpieczeństwo

Przyjemną rzeczą występującą w Postfixie jest podział zadań na podprogramy tak, że każdy podprogram odpowiada za jedną czynność, dodatkowo można zażądać aby działały one w środowisku chroot. Daje to duże bezpieczeństwo, gdyż błąd w którymś podprogramie daje najwyżej dostęp włamywaczowi do niewielkiej części systemu, do której program ma dostęp.

Jak nie być spamerem

Postfix nie jest domyślnie skonfigurowany jako open-relay (czyli serwer umożliwiający każdemu wysyłanie wszędzie poczty). Umożliwia wysyłanie jedynie z ściśle określonych adresów bez autoryzacji (definiujesz ją miedzy innymi w zmiennej mynetworks). Jednak aby umożliwić wysyłanie poczty z dowolnego miejsca na świecie należy albo rozszerzyć listę adresów mogących wysyłać do całego Internetu (przez co stajemy się open-relay’em) albo wymusić na wysyłających jakąś metodę autoryzacji. Można uruchomić popbeforesmtp, która pozwala na wysyłanie poczty użytkownikom, którzy tuż wcześniej autoryzowali się przez protokół POP3. Najlepiej jednak skorzystać z możliwości jakie daje SASL czyli autoryzować w momencie wysyłania listu. Opis jak to zrobić znajdziesz w części zaawansowanej kursu obsługi Postfiksa.

 

Kontrola pracowników

Aby przekazać na określone konto całą pocztę przechodzącą przez serwer należy wskazać go w zmiennej alawys_bcc

always_bcc = uzytkownik

Następnie dzięki procmailowi możemy filtrować pocztę w zależności od tego jak chcemy.

W przypadku backupowania całej przechodzącej poczty, plik z pocztą można przeszukać z wykorzystaniem programu grepmail (strona domowa projektu http://grepmail.sourceforge.net/).

Postfix w Internecie

ćwiczenia

ćwiczenie 1

Należy zainstalować serwer pocztowy a następnie:

  1. Wysłać z konta administratora pocztę do użytkownika tester1, oraz między Państwa użytkownikiem a użytkownikiem tester1.
  2. skonfigurować go tak, aby poczta skierowana do użytkownika root kierowana była do użytkownika admin.
  3. Umożliwić komputerom z sieci lokalnej wysyłanie poczty przez państwa komputer. Ustawić maksymalną wielkość wiadomości na 4 MB oraz wielkość skrzynki pocztowej na 20 MB.

Odpowiedzi do ćwiczeń

ćwiczenie 1 (serwer pocztowy Postfix)

  1. Pocztę można wysłać korzystając z programów Kmail, Evolution, Mozilla. Należy ją skierować do użytkownika teser1@localhost. W celu przekierowania poczty możemy skorzystać z pliku /etc/newaliases. Tworzymy w nim wpis:

    root: admin

    a następnie wydajemy polecenie newaliases i każemy postfixowi odnowić informację o plikach konfiguracyjnych wydając komendę /etc/init.d/postfix reload

  2. W tym celu należy dodać naszą sieć do zmiennej mynetworks. Jeżeli nasza sieć to 192.168.1.0/24 to wpis powinien wyglądać następująco

    mynetworks = 127.0.0.0/8, 192.168.1.0/8
  3. Należy ustawić zmienne message_size_limit, mailbox_size_limit oraz na następujące wartości:

    message_size_limit = 4000000
    mailbox_size_limit = 20000000

Dodaj komentarz