Prosty MTA z heirloom-mailx i ssmtp

Czasami potrzebny jest nam serwer pocztowy, który przyśle informacje dla root’a (np. monity smartd, mdadm, sypnięte crony itp) ale równocześnie nie chcemy stawiać pełnego serwera typu postfix/exim. Warto w tym celu wykorzystać zestaw heirloom-mailx + ssmtp. hairloom-mailx jest prostym shellowym klientem SMTP – przy okazji linkuje polecenie mail (przydatne w skryptach). ssmtp pełni funkcję serwera SMTP ale nie działa jako demon – proces uruchamia się gdy jest potrzebny i znika po wysłaniu maili. Dodatkowo ssmtp może zostać skonfigurowany by wysyłać maile nie tylko przez relay’a ale również autoryzując się na zewnętrznym serwerze pocztowym, np. gmail’u czy gdziekolwiek indziej.

Instalacja

apt-get install ssmtp heirloom-mailx

Konfiguracja z relay’em

Edytujemy plik /etc/ssmtp/ssmtp.conf – w konfiguracji z relay’em wystarczą te linijki:

root=postmaster@domena.pl
mailhub=domena.pl
hostname=serwerek.domena.pl

Warto zwrócić uwagę że dobrze by było aby domena serwerek.domena.pl istniała i wskazywała na nasz serwer – dzięki temu poczta nie odpadnie na prostych filtrach antyspamowych.

Konfiguracja pod gmail’a

W ssmtp.conf potrzebujemy:

root=postmaster@domena.pl
mailhub=smtp.gmail.com:587
hostname=serwerek.domena.pl
AuthUser=twojekonto@gmail.com
AuthPass=twoje_haslo_do_gmaila
UseTLS=YES
UseSTARTTLS=YES
AuthMethod=LOGIN

Test

Warto teraz sprawdzić czy poczta wychodzi jak powinna:

echo test | mail -s "testowa wiadomosc" postmaster@domena.pl

pflogsumm – statystyki poczty dla postfix’a

Jeżeli administrujesz nawet niedużym serwerem pocztowym na pewno masz świadomość, że nie jesteś w stanie monitorować logów na bieżąco. Ciężko jest wyłapać np. problem w komunikacji z pewną domeną. Ciężko też oszacować skalę ruchu na serwerze zarówno pod kątem ilości jak i wolumenu maili. Trudno wybrać domeny, dla których warto by zrezygnować z greylistingu, itd, itp…

Na szczęście dostępne jest narzędzie pflogsumm, które wygeneruje nam dość wyczerpujące statystyki z logów postfix’a. Bardzo przydatne przy codziennym przeglądzie “stanu zdrowia” serwera pocztowego.

Przykładowy wycinek statystyk z pewnego małego serwerka prezentuje się tak:

Postfix log summaries for Jul  4

Grand Totals
------------
messages

   1158   received
   1261   delivered
      0   forwarded
      5   deferred  (50  deferrals)
      2   bounced
    392   rejected (23%)
      0   reject warnings
      0   held
      0   discarded (0%)

 164898k  bytes received
 242985k  bytes delivered
    201   senders
     77   sending hosts/domains
    354   recipients
     51   recipient hosts/domains

Per-Hour Traffic Summary
    time          received  delivered   deferred    bounced     rejected
    --------------------------------------------------------------------
    0000-0100          26         28          2          0          7
    0100-0200          14         18          3          0         10
    0200-0300           4          4          1          0          8
    0300-0400           6          6          1          0          8
    0400-0500           4          4          0          0          8
    0500-0600           2          2          1          0          9
    0600-0700           8          8          1          0          9
    0700-0800          16         18          1          0         10
    0800-0900          58         60          1          0          8
    0900-1000         104        110          5          0         17
    1000-1100         132        152          2          0         18
    1100-1200         106        106          1          0         31
    1200-1300          64         70          2          0          9
    1300-1400         112        132          2          0         14
    1400-1500          98        106          1          0         78
    1500-1600          86         88          2          0         32
    1600-1700          56         56          3          0         23
    1700-1800          58         77          5          2         19
    1800-1900          36         36          3          0         16
    1900-2000          26         26          2          0         24
    2000-2100          48         50          3          0          9
    2100-2200          32         42          2          0         10
    2200-2300          34         34          3          0         10
    2300-2400          28         28          3          0          5
...

Host/Domain Summary: Message Delivery
 sent cnt  bytes   defers   avg dly max dly host/domain
 -------- -------  -------  ------- ------- -----------
    132     5688k       0     1.7 s   11.0 s  gmail.com
    104     2633k       0     4.6 s    2.8 m  wp.pl
     68     1525k       0     1.3 s    9.4 s  interia.pl
     42      744k      21     1.1 s   83.6 h  o2.pl
     30    89891        0     0.7 s    2.6 s  op.pl
     29     6677k       1    16.1 s    7.4 m  poczta.onet.pl
     26      540k       0     1.9 s    6.7 s  poczta.fm
...

Host/Domain Summary: Messages Received
 msg cnt   bytes   host/domain
 -------- -------  -----------
     50     4142k  gmail.com
     46   491259   facebookmail.com
     38     1446k  wp.pl
     22    13520k  interia.pl
     14      675k  o2.pl
     10   105377   poczta.fm
     10    57713   hotmail.com
... i dużo więcej...

Instalacja na Debianie:

apt-get install pflogsumm

Testowo polecenie można uruchomić w następujący sposób:

sudo pflogsumm -i -d yesterday /var/log/mail.log /var/log/mail.log.1

W moim przypadku, logi przewijam codziennie ok 2:00 w nocy, dlatego podaję dwie ścieżki do plików log (bieżącego i wczorajszego) by mi te dwie godzinki nie umknęły 😉

Powyższe polecenie wypisze na standardowe wyjście statystyki w postaci ładnie sformatowanych tekstowych tabel. Warto przyjrzeć się innym parametrom polecenia – można dzięki nim zrezygnować ze statystyk, które nas nie interesują, bądź zmienić domyślną kolejność.

Teraz warto uruchomić okresowe raportowanie. Edytujemy crona:

sudo crontab -e

Na generowanie statystyk warto wybrać godzinę mniejszego obciążenia serwera (@daily oznacza północ), bo proces ich przygotowania dość mocno obciąży CPU. Wpisujemy polecenie wraz z interesującymi nas parametrami:

@daily /usr/sbin/pflogsumm -i --problems_first --no_bounce_detail \
         --no_deferral_detail -d yesterday \
         /var/log/mail.log /var/log/mail.log.1 | \
         mail -e -s "Statystyki poczty na `uname -n`" postmaster

Kolejnego dnia powinniśmy otrzymać nasze statystyki.