\
Wszystko z paczek.
(Pliki dostarczane z Cyrus-SASL są w sasl2-bin.)
# apt-get install libsasl2-2 libsasl2-modules postfix-tls sasl2-bin
Uwaga: zgodnie z http://42.pl/url/cG nie uda się zrobić CRAM-MD5 z wykorzystaniem PAM/shadow:
,--[ http://42.pl/url/cH ]--
| CRAM-MD5 relies on having a plain-text password to create the challenge.
| If you use an authentication method where your password is in shadow, or
| crypt-password in MySQL, then it stands to reason that CRAM-MD5 won't work.
`---
Niestety.
*** /etc/mailname: Check if you see your FQDN hostname ( == 'hostname --fqdn')
*** /etc/postfix/master.cf: # Kluczowe: smtp nie może[1] być chrootowane (5 kolumna) - inaczej postfix # nie będzie mógł czytać /var/run/saslauthd/mux # i zaowocuje to komunikatem: postfix/smtpd[$pid]: warning: SASL authentication failure: # cannot connect to saslauthd server: Permission denied # Do przejrzenia: http://42.pl/url/cC, http://42.pl/url/cD i http://42.pl/url/cE. smtp inet n - n - - smtpd -o smtpd_sasl_auth_enable=yes smtp unix - - n - - smtp smtps inet n - n - - smtpd -o smtpd_tls_wrappermode=yes -o smtpd_sasl_auth_enable=yes 587 inet n - n - - smtpd -o smtpd_enforce_tls=yes -o smtpd_sasl_auth_enable=yes # Zapewne niektóre opcje nie są niezbędne, ale 'If It Works, Don't Fix It!'.[1] Dokładniej to może, tylko trzeba trochę się nagimnastykować z dostępem do /var/run/saslauthd/mux właśnie...
*** /etc/postfix/main.cf: smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, check_relay_domains smtp_sasl_auth_enable = yes smtpd_sasl_auth_enable = no broken_sasl_auth_clients = yes smtp_sasl_password_maps = hash:/etc/postfix/null # /etc/postfix/null to jest hash z /dev/null wykonany za pomocą 'postmap /dev/null; mv /dev/null.db /etc/postfix' smtpd_use_tls = yes smtpd_tls_auth_only = no smtpd_tls_key_file = /etc/postfix/ssl/tls.pem smtpd_tls_cert_file = /etc/postfix/ssl/tls.pem smtpd_tls_CAfile = /etc/postfix/ssl/tls.pem # Miałem wcześniej przygotowany certyfikat sygnowany własnym CA (skrypty do # przygotowania tegoż są w OpenSSL bodajże) - zawsze zresztą TLS możesz wyłączyć # (odpowiada za to smtpd_use_tls) smtpd_tls_loglevel = 1 # powyższa opcja: jeśli nie wystarcza Ci poziom logowania transakcji TLS - zwiększ tę liczbę smtpd_tls_received_header = yes tls_random_source = dev:/dev/urandom
*** /etc/postfix/sasl/smtpd.conf: pwcheck_method: saslauthd saslauthd_path: /var/run/saslauthd/mux # Bardzo ważne: postfix musi być w stanie czytać ten plik - u siebie zrobiłem to # dodając go do grupy sasl (/var/run/saslauthd był własnością root.sasl) mech_list: plain login minimum_layer: 0 auto_transition: no
*** /etc/default/saslauthd: START=yes MECHANISMS="pam"
*** /etc/pam.d/smtp: auth required pam_unix.so nullok try_first_pass account required pam_unix.so password required pam_permit.so session required pam_permit.so
Teraz: /etc/init.d/postfix reload /etc/init.d/saslauthd restartI sprawdzamy:
Najpierw sprawdzę czy SASL jest w stanie korzystając z PAM (taką metodę
autoryzacji zdefiniowaliśmy w /etc/default/saslauthd) zautoryzować
użytkownika - jeśli tak, da nam to pewność, że SASL jest skonfigurowany
prawidłowo i że potrafi skorzystac ze zdefiniowanej metody autoryzacji
(tu: PAM) - potem pozostanie jedynie upewnienie się, że postfix potrafi
skontaktować się z SASL (pamiętaj o /var/run/saslauthd/mux) no i poinformować, że umie
SMTP AUTH (patrz niżej).
Tak wygląda problem z dostępem do MUX saslauthd:
postfix/smtpd[32640]: warning: SASL authentication failure: cannot connect to saslauthd server: No such file or directory postfix/smtpd[32640]: warning: SASL authentication failure: Password verification failed postfix/smtpd[32640]: warning: hostname.tld[xxx.xxx.xxx.xxx]: SASL PLAIN authentication failed: generic failure-- wyjąłem postfiksa z chroota (patrz początek strony o master.cf) i jest OK
$ testsaslauthd -u abc -p def 0: OK "Success."
$ testsaslauthd -r domena.pl -s smtp -u uzytkownik -p haselko 0: OK "Success."(-- oczywiście PAM musi umieć podpiąć się do mysql: 'libpam-mysql' na Debianie)
$ perl -MMIME::Base64 -e 'print encode_base64("\0abc\0def");' YWJjAGFiYwBkZWY=Tu taki hint - jeśli masz użytkowników wirtualnych, np. username@domena.com, to uważaj na znak '@' w username - perl zamierza go potraktować specjalnie, więc musisz go 'zacytować':
$ perl -MMIME::Base64 -e 'print encode_base64("\0uzytkownik\@domena.pl\0Pompony");' AHV6eXRrb3duaWtAZG9tZW5hLnBsAFBvbXBvbnk=Teraz przeprowadzam normalną sesję ESMTP (potrzebny 'netcat' - jeśli go nie masz, możesz normalnie się zatelnetować na port 25 i wpisywać te polecenia po kolei):
# { echo "ehlo test"; echo "AUTH PLAIN YWJjAGFiYwBkZWY="; echo "quit"; } | nc localhost 25 220 host.domain.pl (NO UCE ESMTP) welcomes. We block/report all spam. 250-host.domain.pl 250-PIPELINING 250-SIZE 10240000 250-ETRN 250-STARTTLS 250-AUTH LOGIN PLAIN 250-AUTH=LOGIN PLAIN 250-XVERP 250 8BITMIME 235 Authentication successful 221 ByeKonfigurację klientów można znaleźć gdzieś indziej - np. tutaj. Co prawda dotyczy innego serwera, ale powinno się dać ją zastosować ;)
Powodzenia :) Sam wykorzystuję powyższy przepis w praktyce ;)
/var/log/mail.err /var/log/mail.info /var/log/daemon.log /var/log/auth.log /var/log/messages
- przygotuj wersje używanych pakietów (apt-cache policy nazwapakietu) - przygotuj wszystkie wymienione pliki konfiguracyjne (por. 'postconf -n'), wytnij komentarze - upewnij się, że NA PEWNO masz poprawną parę username/password (pokaż jak to sprawdzasz) - przeprowadź testy krok po kroku i dla każdego kroku pokazuj błędy z logów - jeśli do testów nie używasz netcata, a klienta pocztowego, użyj więcej niż jednego - np. mutta, Outlook Expressa, Thunderbirda - dokładnie opisz wtedy konfigurację - napisz na czym polega problem (co nie działa) - napisz co już zrobiłeś w celu znalezienia przyczyny problemuICIC