|
wersja 1.5 |
|
Spis treści |
ChangeLog 1. W czym tkwi problem ? 2. Czego potrzebujemy ? 3. Jeszcze kilka uwag 4. Cyrus 5. Postfix 6. Razem 7. Inne 8. Lewi nadawcy 9. Debian woody 10. Uwagi od adminów Posłowie |
| ChangeLog |
Zmiany od wersji 1.2: - opis konfiguracji dla Debiana "woody" (podziękowania dla Dariusza R.) - nowy punkt: Uwagi od adminów Zmiany od wersji 1.0: - uaktualniono dla cyrus-sasl-2.x.x (podziękowania dla Gabriela K.) - "lewi nadawcy" (punkt nr 8) - kilka poprawek (pierdoły) |
| 1. W czym tkwi problem ? |
Hmmm... Skoro czytasz ten dokument, mam nadzieję, że nie muszę tego wyjaśniać. Jeśli jednak tak nie jest, oto krótkie wprowadzenie: pocztę można wysyłać na różne sposoby. Ostatnio bardzo popularne stało się wysyłanie listów przez cudze serwery poczy oraz wysyłanie listów podszywając się pod kogoś. Nie trzeba dużej wyobraźni ani sprytu żeby robić takie rzeczy ani żeby wymyślić jakie skutki może to spowodować. Rozwiązaniem na tego rodzaju problemu jest uwierzytelnienie użytkownika przed wysłaniem poczty. Inaczej: jeśli ktoś chce wysłać list jako heniek@serwer.pl, przed wysłaniem listu serwer wymaga podania hasła Heńka. Proste i skuteczne. Rozwiązuje to przy okazji masę innych problemów, ale nie o nich chce tu pisać tylko o ich rozwiązaniu. Skorzystam jeszcze z okazji, i podziękuję SzAmO za jego cenne uwagi. |
| 2. Czego potrzebujemy ? |
Na początek pozwolę sobie zauważyć, że testowałem wszystko na moim ulubionym Slackware 8.0. Soft, którego użyłem: POSTFIX w wersji 1.1.6 (2002.03.26) CYRUS-SASL w wersji 1.5.27 lub odpowiednio 2.1.10 (zalecany) Jeszcze uwaga, którą dostałem od Orest'a (thx !): w przypadku dystrybucji Mandrake należy najpierw odinstalować binarki cyrus-sasl oraz libsasl* (nie zastosowanie się do tego grozi "segmentation fault"). Potem już spokojnie można zainstalować sobie cyrusa ze źródełka. Oki. Teraz standardowo: do jakiegoś katalogu rozpakowujemy kod źródłowy jednego i drugiego. Najpierw weźmiemy w obroty Cyrusa. |
| 3. Jeszcze kilka uwag |
Istnieją dwa sposoby skonfigurowania SASL'a, a Ty musisz się zdecydować na jeden z nich. Hasła użytkowników, przy uwierzytelnianiu mogą być przechowywane albo w osobnym pliku sasl'a (/etc/sasldb) albo mogą być brane z pliku /etc/shadow Sposób pierwszy: - tylko admin może zmienić hasło dla użytkownika - użytkownik ma dwa hasła: jedno do shella i pop3 (odbiór poczty) i drugie do wysyłania poczty. Mogą być takie same, ale po zmianie tego pierwszego użytkownik może się pogubić + podsłuchanie hasła poczty wychodzącej nie daje intruzowi dostpu do shella + łatwo zablokować userowi wysyłanie listów i pozostawić tylko odbieranie Sposób drugi: Jest zupełnie odwrotnie niż w przypadku pierwszego. Zwiększone ryzyko dostępu do shella, gdy ktoś próbuje "zgadnąć hasło" A teraz zrób sobie przerwę (np. na papierosa), pomyśl o innych plusach i minusach, o tym, co będzie lepsze dla Twoich użytkowników, o pokoju na świecie i zdecyduj się albo na to, albo na to. Generalnie sposób drugi pracuje "bezobsługowo" dla admina a jeśli ktoś potrafi przechwycić hasło poczty wychodzącej, równie dobrze może przechwycić hasło pop3 lub ftp. Z drugiej strony, jeśli użytkownik nie ma dostępu do shella, ftp itp. to dlaczego nie dać mu dwóch różnych haseł ? Chwila refleksji: jeszcze nie spotkałem się z tak popieprzoną dokumentacją jak tą od cyrusa. Połowa rzeczy przeterminowana, drugiej połowy nie ma, w doc'ach dla postfixa piszą o czym innym niż w cyrusie, w Sieci jeszcze inne rzeczy...jednym słowem można ocipieć. |
| 4. Cyrus |
Wchodzimy do katalogu z rozpakowanym cyrusem (1.x) i wydajemy polecenie: make clean - dla zasady - miałem przez to problemy - i sedno: ./configure --enable-login --enable-plain --with-gnu-ld --with-pwcheck Dla cyrusa serii 2.x sprawa wygląda tak: ./configure --enable-login --enable-plain --with-gnu-ld --with-saslauthd Krótkie omówienie powyższych opcji: --enable-login :wymagane do prawidłowej pracy Outlook Express 5.x Bill nie dopilnował i chłopaki coś spieprzyli... --enable-plain :niektóry soft tylko w ten sposób potrafi się zalogować --with-gnu-ld :bez tego możesz później dostać "generic fault". Co za syf, ile ja się męczyłem żeby na to wpaść... --with-pwcheck (dla 1.x) lub --with-saslauthd (dla 2.x) :jeśli zdecydowałeś się na użycie haseł z /etc/shadow Jeśli nie, możesz to pominąć. Jeśli się wahasz, dodaj to, łatwo przeskoczyć potem na shadow. Jeszcze cenna wskazówka, którą dostałem od ViNYLa (thx!): Gdy ./configure wyrzuci błąd "brak pliku krb.h" należy dodać parametr --disable-krb4. Błąd ten jest bowiem spowodowany brakiem kerberosa. Oczywiśnie nie jest on niezbędny do normalnego funkcjonowania postfixa i nikomu nie jest potrzebny ;). Dobra jest, teraz standardowo: make i make install. Kolejny krok: Cyrus 1.x: utwórz link z /usr/local/lib/sasl (bo tu się domyślnie zainstaluje) do /usr/lib/sasl (bo tutaj będzie szukany): ln -s /usr/local/lib/sasl /usr/lib/sasl Cyrus 2.x: utwórz link z /usr/local/lib/sasl2 (bo tu się domyślnie zainstaluje) do /usr/lib/sasl2 (bo tutaj będzie szukany): ln -s /usr/local/lib/sasl2 /usr/lib/sasl2 Jedziemy dalej z koksem: jeśli w pliku /etc/ld.so.conf nie masz wpisu /usr/local/lib, to zrób go teraz. Po prostu wpisz to w nowej linijce, zapisz zmiany, wydaj polecenie ldconfig, dysk trochę pomieli i będzie git. Na wszelki wypadek wyloguj się i zaloguj. Teraz w /usr/lib/sasl/ (odpowiednio /usr/lib/sasl2/) musisz utworzyć plik smtpd.conf. Jeśli chcesz korzystać z osobnej bazy haseł i userów umieść tam: dla wersji 1.x: pwcheck_method: sasldb a dla wersji 2.x: pwcheck_method: auxprop Jeśli chcesz korzystać z /etc/shadow, umieść tam: dla wersji 1.x: pwcheck_method: pwcheck dla wersji 2.x: pwcheck_method: saslauthd Zapisz zmiany. To jedyna potrzebna linijka w tym pliku. Dobra, na razie wystarczy z cyrusem... |
| 5. Postfix |
Mam nadzieję, że posiadasz przynajmniej podstawową wiedzę nt. konfiguracji Postfixa. Jeśli nie, odpuść sobie, zajrzyj na moją stronę, przeczytaj i przećwicz sobie "Podstawy konfiguracji" i zacznij czytać w tym miejscu. Na początek smutna wiadomość (choć pewnie już dawno się domyśliłeś): Postfixa trzeba od nowa przekompilować z dodatkowymi opcjami. Na wszelki wypadek zrób sobie backup /etc/postfix/ (o ile go używasz). Dobra, wchodzimy do katalogu z rozpakowanym źródełkiem postfixa. Wydajemy polecenie make tidy a następnie przechodzimy do sedna sprawy: Dla cyrusa wersji 1.x: make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include" AUXLIBS="-L/usr/local/lib -lsasl" Dla cyrusa wersji 2.x: make makefiles CCARGS="-DUSE_SASL_AUTH -I/usr/local/include/sasl" AUXLIBS="-L/usr/local/lib -lsasl2" Dla utrudnienia to wszystko w jednej linii, następnie make i make install. Teraz jest dobry czas na to, żeby przywrócić swoje stare konfigi i zobaczyć, czy wszystko działa. Teraz postfix powinien normalnie wysyłać pocztę, reagować na zmiany w konfigach itp. Jeśli jest to twój pierwszy kontakt z Postfixem, czytasz nie to, co trzeba Czas zamieszać w main.cf. W sumie nie będzie tego dużo... smtpd_sasl_auth_enable = yes broken_sasl_auth_clients = yes smtpd_sasl_security_options = noanonymous smtpd_recipient_restrictions = permit_sasl_authenticated , reject, check_relay_domains Pierwszej linijki nie muszę komentować, druga pozwala sasl'ować się starszym klientom poczty, (m.in. Outlook Express 4.x) które mają niedociągnięcia, trzecia nie pozwoli robić nam koło pióra a czwarta zostanie jeszcze omówiona niżej. No i to by było tyle... |
| 6. Razem |
Okej, czas to wszystko sprawdzić. Jeśli masz jakieś problemy, miej logi i patrzaj w logi. Najpierw sprawdzamy Postfixa - postfix start. Jeśli się wystartował, nie jest źle. Jeśli nie poszedł, zobacz do logów i skoryguj błąd. Może to tylko literówka przy parametrze... Aby sprawdzić, czy jest git, wystarczy telnetować się na port postfixa: telnet localhost 25 Trying 127.0.0.1... Connected to localhost. 220. serwer.pl ESMTP Postfix ehlo localhost 250 - serwer.pl 250 - PIPELINING ................. 250 - AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 250 - AUTH LOGIN PLAIN DIGEST-MD5 CRAM-MD5 ................. Jeśli widzisz te linijki z AUTH, jest w porządeczku :). Jeśli ich nie widzisz, może w parametrach kazałeś nie wywalać EHLO Jest coś takiego, już nie pamiętam... Teraz chwila dla Cyrusa. a) ---------- użytkownicy i hasła w osobnym pliku Sasl 1.x: Ten plik to /etc/sasldb. Sprawdź, czy istnieje, jak nie, utwórz go. Użytkowników dla poczty tworzy się tak: saslpasswd -c heniek gdzie heniek, to nazwa użytkownika, jego login. Zmiana hasła wygląda tak: saslpasswd heniek. Domyślnie konto tworzone jest dla użytkowników dla domeny $myhostname, z main.cf. Jeśli obsługujesz kilka domen: saslpasswd -c -u serwer.pl heniek To utworzy konto dla heniek@serwer.pl. Analogicznie zmienia się jego hasło. Aby przyblokować konto, tzn. hasło, robisz: saslpasswd -d heniek Sasl 2.x: Ten plik to /etc/sasldb2. Zostanie on utworzony automatycznie. Będziesz musiał zmienić jego prawa tak, żeby był read/write dla użytkownika postfix (tego, z którego prawami działa Postfix). To po pierwsze. Po drugie: wykorzystując polecenie saslpasswd2 do edycji użytkowników prawdopodobnie będziesz musiał za każdym razem podać ręcznie jego domenę. Dzieje się tak dlatego, że Sasl 1.x wykorzystywał domyślną domenę $myhostname z pliku main.cf, natomiast wersja 2.x wykorzystuje polecenie systemowe 'hostname' - a to prawdopodobnie będzie niepełną (np. polska zamiast polska.pl). nazwą domenową. Do rzeczy: użytkowników dla poczty tworzy się tak: saslpasswd2 -c -u polska.pl heniek gdzie heniek, to nazwa użytkownika, jego login a domena to polska.pl Zmiana hasła wygląda tak: saslpasswd2 -u polska.pl heniek Aby przyblokować konto, tzn. hasło, robisz: saslpasswd2 -d -u polska.pl heniek b) ---------- użytkownicy i hasła z /etc/shadow Sasl 1.x: Działa to tak: jest sobie cały czas demon pwcheck, dostaje hasło, robi z nim co trzeba i zatwierdza autoryzacje lub nie. 1. Tworzysz katalog /var/pwcheck (mkdir /var/pwcheck). 2. Przy starcie systemu uruchamiasz (budzisz :) demona: pwcheck & Ważny jest ampersand ( & ) na końcu, bez niego wał przestaje zaraz działać. Można go odpalić też w każdej chwili z linii poleceń... 3. Startujesz postfixa: postfix start Sasl 2.x: Działa to tak: jest sobie cały czas demon saslauthd, dostaje hasło, robi z nim co trzeba i zatwierdza autoryzacje lub nie. 1. Tworzysz katalog /var/state/saslauthd (mkdir /var/state/saslauthd). 2. Przy starcie systemu uruchamiasz (budzisz :) demona: saslauthd -a shadow 3. Startujesz postfixa: postfix start Jeśli masz od groma użytkowników równolegle sprawdzających pocztę, możesz zwiększyć liczbę demonów sasl'a: służy temu parametr -n [liczba]. Domyślnie działa w tle pięć sztuk. I jeszcze uwaga ku przestrodze (THX dla Michała W. i Piotra B.): to odnośnie pwcheck i niektórych dystrybucji (np. Debian), w których pakiet postfix-tls jest chroot'owany (występuje wtedy error socketa dla pwcheck). Rozwiązanie: należy zamiast utworzenia katalogu /var/pwcheck utworzyć /var/spool/postfix/var/pwcheck a następnie link do niego: ln -s /var/spool/postfix/var/pwcheck /var/pwcheck. Teraz powinno być git (/var/pwcheck jest tak naprawdę /var/spool/postfix....). Analogicznie dla saslauthd, tyle że zmiany dotyczą katalogu /var/state/saslauthd. Czas na Outlook Express. Menu --> Narzędzia --> Konta --> Właściwości -->Serwery Zaznacz "Serwer wymaga uwierzytelnienia" i kliknij "Ustawienia" i zaznacz "Użyj tych samych..." lub "Zaloguj używając". Oczywiście twój e-mail wychodzący ma mieć adres i użytkownika domeny $myhostname lub tego, co dałeś przy -u. Dobra, Outlook to żadna filozofia. Najważniejsze to sprawdzić, czy działa. A powinno działać... Przeładuj jeszcze postfixa. |
| 7. Inne |
Poruszę jeszcze opcję smtpd_security_options. Tak więc mamy: noanonymous - nie pozwala na anonimowe wysłanie poczty. Prawdę mówiąc nie orientuję się na czym dokładnie to polega ale bez tego można chyba przesłać list podając się za anonymousa. Chyba. noplaintext - nie pozwoli przesłać niezaszyfrowanego hasła. nodictionary - nie pozwoli na atak słownikowy. Nie wiem w jaki sposób "will not use methods that are vulnerable to dictionary attack" noactive - nie pozwoli na atak nie-słownikowy, aktywny. Tu już zupełnie nie czaję. Teraz uwaga, która dostałem od SzAmO (thx!): przy ustawieniu nodictionary i noactive SASL może nie działać a w logach pojawi się "no SASL authentication mechanisms". Jesli ktos wie o co tu biega, prosze o info. Tak wogólę to z tymi ograniczeniami radzę nie przesadzać... Jeśli wyłączasz plaintexty, wyłącz też anonimousa. Szczegóły w dokumentacji. Kolejna uwaga od SzAmO: jesli uzywasz Amavisa z Postfixem, ustaw permit_mynetworks przed permit_sasl_authenticated w smtpd_recipient_restrictions ponieważ Amavis nie używa autoryzacji. Obiecałem, że wrócę do smtpd_recipient_restrictions... No to wracam. Ważna jest tutaj kolejność, i tak: smtpd_recipient_restrictions = permit_sasl_authenticated, check_relay_domains - każe każdemu się zalogować, uwierzytelnić permit_mynetworks, permit_sasl_authenticated, check_relay_domains - lokalni nie muszą się logować, tylko ci z zewnątrz Jesli cos nie gra i dalej idzie wysylac poczte bez zalogowanie, na koncu (lub w odpowiednim miejscu) mozesz dorzucic reject. Chcę tylko powiedzieć, że mieszając tym paramatrem możemy ustawić to, co trzeba. Opcje parametru znajdują się w "Podstawach konfiguracji" na mojej stronie - te bardziej sensowne - oraz w dokumentacji postfixa - wszystkie. Jeśli masz sprawdzanie poczty przez www (i jej wysyłanie) zamieszaj tak, żeby localhost łączył się bez hasła przy wysyłaniu a inne musiały się logować. Jak widzisz - jest sporo możliwości i wszysko zależy od Twojej wyobraźni. Dobra, kończę, bo zaczynam pisać od rzeczy... |
| 8. Lewi nadawcy |
A już myślałem, że będzie spokój... Uwagę na problem zwrócił Kocurek Nawet gdy działa SASL, pojawia się pewien problem: załóżmy, że wśród userów mamy użytkownika czesiek. Ale kawał z niego wała i wyczaił on, że po autoryzacji (dla użytkowika czesiek) może on w polu "nadawca" wpisać cokolwiek, podając także dowolny adres zwrotny maila. Czyli autoryzuje się, ale wysyła list jako admin@serwer.pl (a nie czesiek@serwer.pl) i pisze, że "w tym miesiącu opłatę za stałe łącze kierujemy do Cześka". Czaisz o co chodzi, a ja opiszę tu rozwiązanie tego problemu: Bierzemy w obroty main.cf i wpisujemy (dopisujemy) następujące linijki: smtpd_sender_login_maps = hash:/etc/postfix/login_maps smtpd_sender_restrictions = reject_sender_login_mismatch Ten pierwszy plik nazwij sobie jak chcesz. W tej drugiej linijce nie zrób literówki przy "m-i-s-m-a-t-c-h". Oczywiście parametr ten możesz dopisać do innych. Generalna składnia pliku login_maps wygląda tak: adres_emailowy login_sasl w naszym przypadku: czesiek@serwer.pl czesiek lub, gdy nie mamy kilku domen (obsługujemy pojedyńczą): czesiek czesiek Teraz po autoryzacji jako czesiek będzie można wysłać e-maila z adresem zwrotnym tylko jako czesiek@serwer.pl. I jest fajnie, już nikt nie będzie nam robił "koło pióra". Co więcej, komunikat o błędzie zajebiście wygląda :) Pozostaje wydać polecenie postmap /etc/postfix/login_maps a następnie uruchomić/przeładować Postfixa (postfix reload). |
| 9. Debian woody |
Duże podziękowania należą się Dariuszowi R. który jest autorem niniejszego punktu. Przedstawia on opis instalacji Postfixa z SASLem na "gołym woodym" wyłącznie na paczkach: ================================================ Witam. Poniewaz na grupie dosc znaczna ilosc postow ma podobny temat, garsc informacji w jaki sposob ja zmusilem do dzialania sasla z postfixem z paczek Debiana 3.0 W zasadzie to References: <1690.00000315.3e8c67d6@newsgate.onet.pl> bylo bardzo pomocne ale w trakcie wykorzystywania informacji zauwazylem pewna rzecz, o ktorej ponizej. Zanim jednak przejde dla tych co moga miec trudnosci z odnalezieniem wspomnianego postu: [cytata]----------------------------------------------------------- Pewnego dnia, a było to 3 Apr 2003 18:56:55 +0200, przyszła do mnie wiadomość z adresu > Czy ktos mogl by podac jak zrobic uwiezytelnianie (sasl) dla postfixa > pod debianem za pomoca pakietow (apt-get install)-chyba bedzie latwiej > i dalsza konfiguracje bo mecze sie z tym juz dlugo i nic mi nie wychodzi, > przejzalem juz duzo stron jak to zrobic ale mi nie idzie (min. > http://linio.terramail.pl/ps.html), a w dodatku na kazdej innej stronie jest > inaczej napisane jak to zrobic:( apt-get install postfix-tls cyrus-common libsasl-modules-plain update-alternatives --config pwcheck (wybrać pwcheck_pam). echo "pwcheck_method: pwcheck\nmech_list: plain login\n" > /etc/postfix/smtpd.conf ln -sf /var/state/pwcheck /var/run Potem konfiguracja /etc/postfix/main.cf i bangla. To wszystko oczywiście przy założeniu, że chcesz autoryzować używając haseł systemowych. eloy [/cytata] ----------------------------------------------------------------------- Tyle Eloy, teraz moje obserwacje ;) Podczas instalacji pakietu cyrus-common skrypt tworzy w /usr/sbin/pwcheck symlinka do /etc/alternatives/pwcheck. Dzieki temu za pomoca update-alternatives mozemy wybrac albo pwcheck_standard albo pwcheck_pam. Wszystko pieknie pod warunkiem, ze nie mamy w systemie pakietu sasl-bin. Pakiet ten zawiera pwcheck, ktorego umieszcza wlasnie w /usr/sbin/pwcheck, a co za tym idzie skrypty z cyrus-common nie beda mogly utworzyc symlinka do /etc/alternatives/pwcheck, a zarazem /etc/init.d/pwcheck bedzie uruchamial nam pwchecka z pakietu sasl-bin. Tak wiec nalezy pozbyc sie albo pakietu sasl-bin albo zmienic sobie nazwe /usr/sbin/pwcheck na jakas inna, utworzyc symlinka do /etc/alternatives/pwcheck itp itd. Wiadomo chyba o co chodzi. Na co jeszcze zwrocic uwage. pwcheck_pam z cyrus-common korzysta z pliku /etc/pam.d/cyrus a nie /etc/pam.d/smtp. To chyba wszystko. Reszta tak jak w http://linio.terramail.pl/ps.html !!!UWAGA!!! Pamietajcie ze w Debianie postfix jest chrootowany. Jesli cos nie dziala, sprobujcie w master.conf ustawic unpriv i chroot na "no" (czyli literka "n", samo "-" nie zalatwia sprawy). smtp inet n n n - - smtpd ================================================ |
| 10. Uwagi od adminów |
Dziękuję wszystkim niżej wymienionym osobom ("sponsorom") za przekazane mi uwagi dotyczące instalacji Postfixa z SASLem. Proszę o kolejne! ---------- mandrake & red hat ---------- sponsor: Arkadiusz P. jeśli wyświetla komunikat o braku db.h należy doinstalować pakiet: libdb4.0-devel-4.0.14-6mdk.i586.rpm dla RH jest to pakiet db4-devel ---------- smtpd_sasl_local_domain ---------- sponsor: Arkadiusz W. Zmorą, z którą walczyłem to zostawienie linijki smtpd_sasl_local_domain = pustą. Jeśli wpisałem tam faktyczną domeme to za każdym razem dostawałem komunikat SASL LOGIN authentication failed. ---------- debian ---------- sponsor: |ufo| & Warden Należy zmienić jeszcze zapis w master.cf: #smtp inet n - - - - smtpd smtp inet n - n - - smtpd Defaultowo w linijce z smtp jest w kolumnie chroot literka "n". Nalezy to zmienic i dac "-". Bez tego przy odpaleniu saslauthd -a shadow -m /var/spool/postfix/var/run/saslauthd/mux i probie autoryzacji dostajemy error postfix/smtpd[9118]: warning: SASL authentication failure: cannot connect to saslauthd server |
| Posłowie |
Jest to pierwsza wersja tego dokumentu i zawiera pewnie jakieś błędy/niedoróbki/potknięcia itp. Będę bardzo wdzięczny za wszelkie uwagi, komentarze, poprawki, wyrazy wdzięczności. Z góry przepraszam za powyższe i mam nadzieję, że będziecie mnie informować w których miejscach coś nie gra. Jako (częściowe) wytłumaczenie przedstawiam fakt, że większość tej pracy powstawała w późnych godzinach nocnych. Ostatnia wersja tego dokumentu znajduje się pod niżej wymienionym adresem. Kontakt ze mną: linio@terramail.pl Wesprzyj finansowo autora - kliknij tutaj |
|
=============================== Henryk Liniowski, Poznań 2003 http://linio.terramail.pl =============================== |