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"