Debian Sarge – Postfix i SASL

Należy najpierw zainstalować odpowiednie pakiety, w tym celu wydajemy polecenie:

apt-get install  libsasl2 libsasl2-modules postfix-tls sasl2-bin

W katalogu /etc/postfix/sasl/ należy umieścić plik smtpd.conf o zawartości:

pwcheck_method: saslauthd
saslauthd_path: /var/run/saslauthd/mux
mech_list: plain login

Plik ten określa metody autoryzacji (u nas wykorzystywany jest demon saslauthd) do którego Postfix łączy się przez gniazdo /var/run/saslauthd/mux i skorzysta z mechanizmów autoryzacji plain oraz login.

Procesy Postfiksa działają domyślnie w środowiskach chroot, więc ścieżka podana w pliku /etc/postfix/saslauthd tak naprawdę tyczy się katalogu /var/spool/postfix/var/run/saslauthd. Rozwiązania tego problemu są dwa: albo rezygnujemy z bezpieczeństwa, jakie daje nam chroot (niepolecane) albo tworzymy infrastrukturę umożliwiającą korzystanie z sasla także w chrootach (polecane). Rozwiązanie drugie polega na utworzeniu katalogu dostępnego w środowisku chroot Postfiksa oraz stworzeniu sytuacji, w której gniazdo sasla jest dostępne w dwóch miejscach na raz (my to osiągamy mountując jeden katalog jako podkatalog innego katalogu, wspaniała możliwość jąder 2.4 i 2.6).

Od strony praktycznej wygląda to tak:

  • Tworzymy odpowiedni katalog, w którym będzie dostępne dla Postfiksa gniazdo demona saslauthd:
    mkdir -p -m710 /var/spool/postfix/var/run/saslauthd
  • Sprawiamy aby jeden katalog występował w dwóch miejscach na raz mountując go dzięki opcji bind. Gdybyśmy wykorzystali polecenie mount po restarcie systemu operacje należałoby powtórzyć, dlatego umieścimy poniższy wpis w pliku /etc/fstab:
    /var/run/saslauthd      /var/spool/postfix/var/run/saslauthd    auto    defaults,bind                           0       2

    Przy pierwszym wykonywaniu zadań z tej listy należy więc tuż po tej czynności wydać polecenie mountowania:

    mount /var/run/saslauthd
  • Do groupy sasl dodajemy użytkownika postfix edytując plik /etc/groups. Po edycji linia opisująca tę grupę powinna wyglądać następująco:
    sasl:*:45:postfix

    Krok ten wynika z następującego faktu: otóż skrypty startowe ze względów bezpieczeństwa zmieniają zasady prawa dostępu do katalogu /var/run/saslauthd na 710, czyli że właściciel ma pełne prawa (root), grupa sasl do której należy katalog ma prawo przeglądania jego zawartości a wszyscy inni mają zakaz wstępu do katalogu. Dodając użytkownika postfix do tej grupy dajemy mu możliwość zaglądania do tego katalogu, czyli skorzystania z mechanizmu sasl (dostęp do gniazda zdefiniowanego wyżej).

Demon sasla domyślnie nie jest uruchamiany, aby tą sytuację zmienić, odkomentujemy linijkę w pliku /etc/defaults/saslauthd:

START=yes

Ostatni krok to włączenie mechanizmu sasl w Postfiksie i umożliwienie zautoryzowanym użytkownikom na wysyłanie poczty. W tym celu do pliku konfiguracyjnego Postfiksa (domyślnie /etc/postfix/main.cf) dodajemy następujące polecenia:

############# SASL
broken_sasl_auth_clients = yes
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous

#broken_sasl_auth_clients = yes
#smtpd_sasl_auth_enable = yes
#smtp_sasl_security_options = noplaintext

Należy też do dyrektwy określającej restrykcje na odbiorców poczty dodać informacje o autoryzowanych metodą sasl (patrz na permit_sasl_authenticated):

smtpd_recipient_restrictions =  check_client_access hash:/etc/postfix/access_map, reject_unknown_recipient_domain, reject_non_fqdn_recipient, permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination, permit

Gdy to wszystko już zrobimy należy zrestartować oba demony:

/etc/init.d/postfix  restart
/etc/init.d/saslauthd  restart

Czas na test. Z ulubionego programu pocztowego wysyłamy wiadomość testową (należy pamiętać aby włączyć autoryzację przy wysyłaniu poczty). Jeżeli wszystko zrobiliśmy dobrze, serwer przyjmie wiadomość do wysyłki a w logach uzyskamy komunikaty podobne do poniższych (zwróćmy uwagę na linie zawierającą komunikat sasl_method=PLAIN, sasl_username=ziutus oznaczającą że mechanizm sasl zautoryzował użytkownika ziutus):

May 22 05:20:30 debian nss-mysql[3313]: E20844F9FD: client=terminal-3-67.retsat1.com.pl[195.26.22.67], sasl_method=PLAIN, sasl_username=ziutus
May 22 05:20:33 debian nss-mysql[3319]: E20844F9FD: message-id=<429008AB.1020100@ziutus.com>
May 22 05:20:33 debian nss-mysql[3311]: E20844F9FD: from=

Rozwiązywanie problemów

Sprawdzenie czy saslauthd poprawnie autoryzuje

Dzięki poleceniu testsaslauthd możemy sprawdzić czy saslauthd poprawnie autoryzuje użytkowników. Polecenie przyjmuje dwa parametry -u nazwa_uzytkownia oraz -p haslo_w_jawnej_postaci. Jeżeli autoryzacja przebiega poprawnie otrzymamy następujący komunikat:

debian:/# testsaslauthd -u jozwiak -p 1234560: OK "Success."

natomiast jeżeli autoryzacja nie będzie poprawna uzyskamy komunikat:

debian:/etc# testsaslauthd -u jozwiak -p 123456
0: NO "authentication failed"

Dodaj komentarz