Pierwsza część artykułu przeprowadziła nas przez prostą konfigurację postfixa, zapobiegającą przerobieniu naszego serwera na open-relay przy pomocy autoryzacji poprzez pop-before-smtp. Dziś czas na część drugą, czyli jak szybko włączyć autoryzację, tls i mieć to z głowy.
Pierwszą rzeczą jaką trzeba sprawdzić, to czy mamy zainstalowane potrzebne pakiety:
- postfix-tls
- sasl2-bin
- libsasl2
- openssl
- libsasl2-modules
Ruszamy - naszym celem są następujące pliki:
- /etc/postfix/main.cf, czyli plik zawierający opcje postfixa
- /etc/postfix/sasl/smtpd.conf, sposoby autentykacji sasl
- /etc/postfix/smtpd.key, klucz, którym będzie autoryzowany postfix
- /etc/default/saslauthd, konfiguracja demona SASL, który będzie dokonywał autentykacji
- /etc/fstab, nawet tu będziemy musieli dokonać zmiany, jeśli chcemy, żeby sasl działał poprawnie
Na pierwszy ogień idzie konfiguracja postfixa - otwieramy /etc/postfix/main.cf i dodajemy linie:
- smtpd_sasl_auth_enable = yes, odpowiada za włączenie mechanizmu autoryzacji
- broken_sasl_auth_clients = yes, pozwala na autoryzację klientom takim jak OE. Nazwa opcji jest swoją drogą jednoznaczna…
- smtpd_use_tls = yes, pozwalana włączenie szyfrowania transmisji
- smtpd_tls_cert_file = /etc/postfix/smtpd.cert, informuje gdzie znajduje się klucz publiczny serwera
- smtpd_tls_key_file = /etc/postfix/smtpd.key, dla odmiany wskazuje lokalizację klucza prywatnego
- do linijki smtpd_recipient_restrictions = dodajemy opcję permit_sasl_authenticated. Należy ją dodać przed jakimkolwiek zakazem typu reject.
Postfix już skonfigurowany - teraz pozostaje mu tylko dostarczyć dane, które obiecaliśmy. Na pierwszy ogień idzie autentykacja. Przede wszystkim otwieramy plik /etc/default/saslauthd i ustawiamy opcje
START=yes
MECHANISMS=”shadow”
(lub “pam” lub “pam shadow”). Szybciutko restartujemy demona (/etc/init.d/saslauthd restart).
Nie jest to wszystko - drugi plik, którym musimy się zająć (a wręcz stworzyć ), to /etc/postfix/sasl/smtpd.conf. Opisuje on jakim mechanizmem posłużymy się do autentykacji - możemy użyć baz danych lub też w opisywanym przypadku, skonfigurowanego przed chwilą demona odwołującego się do kont systemowych. W naszej sytuacji wystarczy do tego pliku dodać linie
pwcheck_method: saslauthd
mech_list: plain login
W perfekcyjnym świecie to byłoby wszystko, w tym mniej doskonałym okazuje się, że dostaniemy komunikat
postfix/smtpd[7663]: warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory
postfix/smtpd[7663]: warning: SASL authentication failure: Password verification failed
postfix/smtpd[7663]: warning: SASL PLAIN authentication failed
Dzieje się tak, ponieważ domyślnie sasl tworzy swój socket w /var/run/saslauthd/ a postfix, działający w chrootowanym środowisku szuka plików w (domyślnie) /var/spool/postfix/var/run/saslauthd/. Tworzenie katalogu (mkdir -p /var/spool/postfix/var/run/saslauthd) a potem tworzenie softlinka (ln -s) jest tu oczywiście opcję, niemniej nie rozwiązującą sytuacji. Dużo lepszym rozwiązaniem (i dość permanentym), jest zamontowanie tego katalogu poprzez dowiązanie. Na stałe rozwiązuje to odpowiednia linijka w /etc/fstab:
/var/run/saslauthd /var/spool/postfix/var/run/saslauthd none rw,bind 0 0
.
I już jest prawie dobrze gdyby nie to, że przy próbie autentykacji okazuje się że coś jest nie tak z uprawnieniami (warning: SASL authentication
failure: cannot connect to saslauthd server: Permission denied; warning: SASL authentication
failure: Password verification failed; SASL PLAIN authentication failed). Żeby poprawić sytuację wystarczy dodać postfixa do grupy sasl komendą usermod -G sasl postfix i już po sprawie.
Po restarcie autentykacja już działa. Możemy sprawdzić to telnetując się na port 25. Po komendzie ehlo wyświeli nam się linijka z wspieranymi rodzajami autentykacji. My wydamy następną komendę - AUTH PLAIN dGVzdAB0ZXN0AHRlc3Q=. Jeśli mamy użytkownika o loginie test i haśle test to autoryzacja przebiegnie pomyślnie. A tak przy okazji - jeśli nie mamy, to ciąg znaków za metodą PLAIN możemy łatwo uzyskać za pomocą następujące komendy:
perl -MMIME::Base64 -e ‘print encode_base64(”test\0test\0test”);’
lub
printf ‘user\0user\0hasło’ | mmencode
jeśli mamy oczywiście zainstalowanego albo perla z modułem MIME::Base64 albo xemacs21-bin
Pozostała nam kwestia bezpieczeństwa. Musimy utworzyć parę kluczy, tak aby można było hasło przesyłać bezpiecznie. W tym zakresie wystarczy wykonać polecenie
openssl req -new -outform PEM -out smtpd.cert -newkey rsa:1024 -nodes -keyout smtpd.key -keyform PEM -days 365 -x509
. Wpisanie danych daje nam ważny rok, podpisany samemu przez siebie certyfikat. Jeśli mamy certyfikat kwalifikowany, to wystarczy go dograć w to właśnie miejsce.
Voila - cel osiągnięty. Teraz pozostaje dodać spamassassina oraz clamav’a i mamy prosty, funkcjonalny serwer pocztowy, ale o tym w następnych odcinkach.