Ačkoliv sendmail je základním MTA programem na Unixových systémechexistuje i několik dalších programů, které mohou pracovat na jeho místě O bezpečnosti Sendmailu toho bylo napsáno již mnoho.
Daniel Berstein napsal Qmail se zřetelem na bezpečnost
Qmail využívá pro práci v systému několik nezávislých malých procesů, které neběží pod právy superuživatele. Je snadno konfigurovatelný (např. pro uchovávání mailů lze použít jiné místo než /var/spool/mail atd.
Aliasy uživatelů
Qmail umožňuje vytváření aliasů pro každého uživatele. Každý uživatel tak disponuje svojí e-mailovou adresou "user-cokoliv@domena. Je¶li przyjmiemy dodalszych przyk³adów nazwê konta luke, w katalogu domowym umieszcza siêplik .qmail, gdzie zawarte s± regu³y sk³adowania poczty dla kontaluke@serwer. Je¶li u¿ytkownik luke utworzy plik .qmail-poufne,automatycznie zacznie funkcjonowaæ (bez udzia³u administratora) aliasluke-poufne@serwer, a poczta bêdzie przetwarzana zgodnie z regu³amizawartymi w tym pliku. Umo¿liwia to nawet tworzenie ma³ych, prywatnychlist dyskusyjnych. Umieszczenie pliku .qmail-default, powodujeprzetwarzanie w zawarty tam sposób przesy³ek zaadresowanych naluke-xxx@serwer, gdzie xxx to dowolny alias, inny ni¿ pozosta³e. Wplikach .qmail mo¿na definiowaæ miejsce sk³adowania poczty, forwardowaæj±, b±d¼ te¿ przekazywaæ potokowo do zewnêtrznych poleceñ. Příklady: /home/ludek/Mailbox -umieszczaj w takim pliku w standardowym formacie /home/ludek/mail/ -umieszczaj w takim katalogu (uko¶nik na koñcu!) w formacie maildir &ludek@innyserwer -przeforwarduj na podany adres - |/home/ludek/bin/sms -"zasil" tre¶ci± listu skrypt zgodnie z regu³ami podanymi w qmail-command(8). Oczywi¶cie linijek i poleceñ mo¿e byæ kilka. Brak plików .qmailpowoduje sk³adowanie poczty w sposób zdefiniowany globalnie przezadministratora. Wa¿ne jest, aby nie tworzyæ pustych plików, lub zawieraæw nich wy³±cznie komentarzy (3). Je¶li poczta bêdzie nadchodziæ w czasie edycji plików, mog± wyst±piæproblemy z jej dostarczeniem. W takiej sytuacji na czas edycji nale¿yustawiæ atrybut +t (sticky bit) dla katalogu domowego poleceniem chmod+t $HOME, a po zakoñczonej edycji go zdj±æ.
Instalace
Podstawowym warunkiem pomy¶lnego zainstalowania Qmaila jest kompilacjapakietów przeznaczonych dla konkretnej dystrybucji. Próba kompilacjistandardowego uniwersalnego pakietu tar.gz mo¿e koñczyæ siê b³êdem izniechêcaæ potencjalnych u¿ytkowników do dalszych prób (4). Dla Red Hataistniej± ¼ród³owe pakiety rpm, które bez problemu siê kompiluj±. Dlaosób nie maj±cych do czynienia z plikami src.rpm krótkie przypomnienie,co nale¿y czyniæ: << rpm -i qmail-1.03-6.src.rpm cd /usr/src/redhat/SPECS/ rpm -bb qmail.spec>> Po poprawnej kompilacji w /usr/src/redhat/RPMS/i386/ powninni¶myotrzymaæ pakiety: qmail-1.03-6.i386.rpm qmail-client-1.03-6.i386.rpmqmail-msglog-1.03-6.i386.rpm. Pakiet qmail zawiera instalacjê qmaila przeznaczeniem na serwery,qmail-msglog rozszerzenie msglog i nie wymaga zwykle instalacji. Pakietqmail-client zawiera wy³±cznie czê¶æ klienck± dla sieci wewnêtrznych. Natypowych maszynach siê go nie instaluje. Komunikacja ta jest oparta ospecjalny protokó³ QMQP, którego wyczerpuj±cy opis znajduje siê wdokumentacji. Mo¿na równie¿ otworzyæ port QMQP na ¶wiat zewnêtrzny. Niejest to jednak polecane, ani te¿ nie ma zbytniego sensu. W przypadku systemu RedHat skrypt w /etc/rc.d/init.d zawieradyrektywê:<< qmail-start "`cat /etc/qmail/dot-qmail`" splogger qmail>> Oznacza to, i¿ globalny sposób dostarczania przesy³ek odczytywany jestz /etc/qmail/dot-qmail (o zawarto¶ci dalej). Zmiana tego pliku wymagazrestartowania qmaila:
<< /etc/rc.d/init.d/qmail stop /etc/rc.d/init.d/qmail start >> W innych dystrybucjach standardowym miejscem na okre¶lenie globalnej wysy³ki jest plik /var/qmail/rc, który w czasie startu systemu jest po prostu wykonywany. Wielu u¿ytkowników broni siê przed globalnie narzuconym systemem maildir. Niektórzy równie¿ nie chc± umieszczaæ poczty w katalogach domowych (np. gdy na /var/spool/mail za³o¿ona jest oddzielna quota). W takiej sytuacji najlepiej jest, by ostatnim ogniwem ³añcucha by³ procmail, dostarczaj±cy przesy³ki na starych zasadach. Dodatkowym atutem jest utrzymanie dzia³ania plików .procmailrc w katalogach domowych. W tym celu nale¿y do dot-qmail wstawiæ: << | dot-forward .forward | preline procmail >> W wiêkszo¶ci przypadków jest to najlepsze rozwi±zanie -poczta dostarcza siê na starych zasadach. W pierwszej kolejno¶ci dzia³aj± w katalogach domowych pliki .qmail, nastêpnie .forward (zapewnia to dodatkowy program dot-forward, bez którego nie jest to mo¿liwe), a na koñcu .procmailrc. Rozwi±zanie to jest te¿, jak widaæ, bezbolesne dla u¿ytkowników. Przy ustawieniu globalnego dostarczania poczty do ~/Mailbox nale¿y przystosowaæ do tego programy pocztowe. Na przyk³ad w globalnym pine.conf ustawiamy << inbox-path=Mailbox >> Problem stanowi wtedy pobieranie poczty przez pop3. FAQ opisuje poprawkê dla qpoppera, jednak bezpieczeñstwo tego demona jest dalekie od oczekiwañ Przy przej¶ciu na format maildir nale¿y u¿ywaæ klienta obs³uguj±cego ten format (np. mutt) lub konwertowaæ pocztê na format mailbox na czas uruchamiania MUA (skryptem maildir2mbox, rozwi±zanie ostateczne). Zwykle u¿ywa siê programu mutt. Do pobierania poczty przez pop3 s³u¿y wtedy qmail-pop3d, a opis instalacji zawarty jest w FAQ. 1.4 Konfiguracja ================= Przed uruchomieniem Qmaila nale¿y oczywi¶cie poddaæ edycji podstawowe pliki konfiguracyjne, zawarte w katalogu /var/qmail/control. S± to: - me -zawiera pe³n± nazwê maszyny, tzn. serwer.domena.pl. - defaultdomain -zawiera podstawow± domenê maszyny. - locals - zawiera aliasy pocztowe dla maszyny, analogicznie do sendmail.cw. - rcpthosts - zawiera wszystkie domeny, dla których sendmail przyjmuje pocztê, tzn. lokalne, wirtualne, oraz inne, dla których jest relay'em. - badmailfrom - czarna lista domen lub adresów, od których poczta jest odrzucana (np. spam). - smtproutes - zawiera nazwê serwera, dla którego qmail przekazuje ca³± wychodz±c± pocztê, poprzedzon± dwukropkiem (np. :mx1.domena.pl), analogicznie do "smart relay host" w sendmailu (5). - concurrencyremote - zawiera maksymaln± liczbê otwieranych jednocze¶nie po³±czeñ do serwerów docelowych (standardowo przy braku pliku 20). Przy obs³udze sporych list dyskusyjnych dobrze ustawiæ tê warto¶æ na wiêksz± (stosownie do zasobów sprzetowych). - virtualdomains - zawiera definicjê domen wirtualnych, je¶li serwer ma takowe obs³ugiwaæ. Domeny wirtualne s± bardzo proste w konfiguracji. Je¶li na serwerze serwer.pl w pliku virtualdomains umie¶cimy linijkê << mojadomena.org:luke >> a potem dodamy mojadomena.org do rcpthosts, qmail bêdzie przeadresowywa³ abc@mojadomena.org na luke-abc@serwer.pl, xyz@mojadomena.org na luke-xyz@serwer.pl itd. U¿ytkownik luke ma wtedy pe³niê w³adzy nad poczt± tej domeny poprzez tworzenie odpowiednich plików w katalogu domowym (w tym przypadku .qmail-abc i .qmail-xyz). Trzeba zauwa¿yæ, ¿e do dzia³ania adresu luke@mojadomena.org, trzeba utworzyæ plik .qmail-luke, gdy¿ przepisana ona bêdzie na luke-luke@serwer.pl. Poprzez utworzenie pliku .qmail-default mo¿na obs³ugiwaæ jak±kolwiek pocztê na cokolwiek@mojadomena.org. Pliki .qmail mog± byæ zagnie¿d¿one, np. .qmail-luke-default, dok³adne zasady postêpowania s± obszernie wyja¶nione w dokumentacji. Qmail umo¿liwia automatyczn± podmianê pola From: w wysy³anych przesy³kach, bez ¿mudnego konfigurowania wszystkich programów MUA (pine, elm, mutt itd.). Wystarczy ustawiæ zmienne: << MAILUSER=user MAILHOST=serwer.pl QMAILINJECT=f >> co spowoduje przyk³adow± podmianê tego pola na user@serwer.pl. W niektórych sytuacjach zachodzi potrzeba, aby poczta dla nieznanych u¿ytkowników by³a przekierowywana na inny serwer. Np. je¶li mamy MX dla domena.pl ustawiony na alfa.domena.pl, a posiadamy jeszcze serwer beta.domena.pl, mo¿na ustawiæ, ¿e je¶li na alfa.domena.pl nie ma konta janek, przeforwarduje siê to na janek@beta.domena.pl. W tym celu do /var/qmail/alias/.qmail-default wpisujemy: << | forward "$LOCAL"@beta.domena.pl >> 1.5 Qmail a majordomo ====================== W przypadku list dyskusyjnych obs³ugiwanych przez program majordomo, dochodzi do powa¿nego (na pierwszy rzut oka) problemu. Wpisy :include: w /etc/aliases s± traktowane przez fastforward (o uruchamianiu /etc/aliases patrz dalej) na innych zasadach. Mianowicie szuka on podanego pliku z koñcówk± .cdb (nie trzeba jej wpisywaæ w /etc/aliases). Ka¿da zmiana listy adresów musi byæ zakoñczona poleceniem << newinclude >> co powoduje kompilacjê do formy binarnej, analogicznie do newaliases. Zapisanie siê nowego u¿ytkownika na listê dyskusyjn± musi poci±gaæ za sob± przekompilowanie pliku z adresami. Rozwi±zanie problemu jest stosunkowo proste. W kodzie majordomo (jest to skrypt w perlu) nele¿y dwukrotnie (w funkcjach do_subscribe i do_unsubscribe) wpisaæ przed linijk± lclose(LIST): << system("newinclude","$listdir/$clean_list"); >> Tak poprawiony majordomo spisuje siê znakomicie [7]. Autor Qmaila zaleca jednak organizowanie list dyskusyjnych na w³asnym programie ezmlm, w pe³ni integruj±cym siê z qmailem. 1.6 Przyjmowanie po³±czeñ ========================== Bernstein zaleca uruchamianie qmail-smtpd z w³asnego pakietu ucspi-tcp w po³±czeniu z daemontools (6). Uruchomienie us³ugi odbywa siê wg FAQ nastêpuj±co: << tcpserver -v -u 1111 -g 2222 0 smtp /var/qmail/bin/qmail-smtpd \ 2>&1 | /var/qmail/bin/splogger smtpd 3 & >> W zale¿no¶ci od konkretnego systemu 1111 nale¿y zamieniæ na uid u¿ytkownika qmaild, za¶ 2222 na gid grupy nofiles. W takiej sytuacji qmail-smtpd mo¿e obs³u¿yæ naraz maksymalnie 40 po³±czeñ. Aby zwiêkszyæ tê ilo¶æ, nale¿y dodaæ opcjê -c . W tak uruchomionym qmailu zachodzi szansa na spowodowanie ataku DOS przez wyczerpanie zasobów pamiêci procesu qmail-smtpd [13]. Aby temu zapobiec, sugeruje siê nastêpuj±c± modyfikacjê tej komendy (7): << /usr/local/bin/softlimit -m 2000000 \ /usr/local/bin/tcpserver -v-R -l 0 -x /etc/tcp.smtp.cdb \ -u 1234 -g 4321 0 smtp /var/qmail/bin/qmail-smtpd >> Je¶li decydujemy siê na klasyczny nas³uch na porcie 25 z inetd, w /etc/inetd.conf nale¿y dodaæ linijkê: << smtp stream tcp nowait qmaild /usr/sbin/tcpd /var/qmail/bin/tcp-env /var/qmail/bin/qmail-smtpd >> i zrestartowaæ inetd poleceniem killall -1 inetd. 1.7 Relay ========== Qmail przyjmuje pocztê wy³±cznie dla domen wpisanych w pliku rcpthosts. Je¶li ma funkcjonowaæ dla okre¶lonych hostów (np. z sieci wewnêtrznej) jako relay,w /etc/hosts.allow wpisujemy np. << tcp-env: 10.1.1.70, 10.1.1.71 : setenv = RELAYCLIENT >> Po³±czenia z tych adresów bêd± mia³y umo¿liwiony relaying, gdy¿ ustawienie zmiennej RELAYCLIENT powoduje ignorowanie rcpthosts i przyjmowanie ka¿dej poczty. 1.8 Program ,,sendmail'' ========================= Qmail posiada program sendmail, który pozwala na pracê programów wywo³uj±cych tak nazwany program do wysy³ania poczty. Wiêkszo¶æ programów powinna pracowaæ poprawnie. FAQ podaje pewne "niuanse", jednak nie s± one istotne w wiêkszo¶ci przypadków. 1.9 Obs³uga protoko³u pop3 =========================== Qmail mo¿e byæ stosowany z dowolnym demonem pop3. Je¶li poczta przechowywana jest przez u¿ytkowników w ró¿nych miejscach i formatach, nale¿y wdro¿yæ uniwersalnego demona, np. solidpop3d. Je¶li u¿ytkownicy przechowuj± pocztê w formacie maildir w katalogu ~/Maildir, mo¿na zastosowaæ standardowy qmail-pop3d. Wywo³uje on celem sprawdzenia has³a program checkpassword. Jego standardowa wersja sprawdza has³a systemowe, jednak w sieci mo¿na znale¼æ wiele odmian s³u¿±cych do weryfikacji hase³ umieszczonych w bazach MySQL, czy LDAP. 1.10 U¿ytkownicy ,,alias" i ,,msglog" ====================================== System z zainstalowanym Qmailem posiada sporo u¿ytkowników (i 2 grupy) dzia³aj±cych na potrzeby tego pakietu. Jednym z nich jest alias, otrzymuj±cy pocztê dla nazw, dla których nie istnieje u¿ytkownik. Jego katalogiem domowym jest /var/qmail/alias i tam definiuje siê aliasy globalne. Zwykle znajduje siê tam plik .qmail-root, zawieraj±cy dyrektywy dla poczty roota (nie odbiera on poczty bezpo¶rednio!), oraz .qmail-msglog. U¿ytkownik msglog otrzymuje kopie wszystkich (!!!) przyjmowanych listów, zatem mo¿na tam wstawiaæ skrypty zliczaj±ce, zapisuj±ce nag³ówki przetwarzanych wiadomo¶ci, czy nawet archiwizuj±ce wszystko. Nale¿y tutaj podkre¶liæ, i¿ Qmail nie korzysta standardowo z bazy /etc/aliases, w przeciwieñstwie do sendmaila. Je¶li serwer posiada du¿o aliasów zdefiniowanych w /etc/aliases, mo¿na w /var/qmail/alias utworzyæ plik .qmail-default, co zadeklaruje definicjê dla wszystkich pozosta³ych przesy³ek. Tam umieszczamy dyrektywê << | fastforward -d /etc/aliases.cdb >> Wymaga to przebudowania /etc/aliases qmailowym newaliases (8). 1.11 Wady qmaila ================= Choæ pakiet qmail jest systemem bezpiecznym i wydajnym, nie jest pozbawiony wad [13]. Poni¿ej zostan± one pokrótce przedstawione, aby niniejszy tekst by³ obiektywny. 1. W 1997 roku wykryto mo¿liwo¶æ ataku DOS na qmail-smtpd. Opisa³ to Wietse Venema (9). Atak polega na wyczerpaniu dostêpnej pamiêci dla procesu demona. Mo¿na go unikn±æ poprzez przyjmowanie po³±czeñ wy³±cznie przez tcpserver z limitami softlimit. Jest to opisane w niniejszym opracowaniu przy okazji omawiania konfiguracji. 2. Wszystkie wiadomo¶ci s± akceptowane przez demona SMTP, a dopiero potem jest podejmowana decyzja o ich dalszym losie. Dlatego istnieje potencjalna mo¿liwo¶æ ataku DOS poprzez wys³anie wielu du¿ych wiadomo¶ci z fa³szywych adresów. Adresy te mog± wyczerpaæ zasoby kolejki pocztowej. Problem ten mo¿na rozwi±zaæ poprzez stosowanie alternatywnych demonów SMTP. 3. Je¶li wysy³ana jest wiadomo¶æ do kilku u¿ytkowników tego samego serwera, dla ka¿dego z nich tworzony jest nowy proces qmail-remote, przesy³aj±cy t± sam± wiadomo¶æ. Jest to brak oszczêdno¶ci pasma transmisyjnego. Nie ma ¿adnej mo¿liwo¶ci poprawienia tego zachowania. Pocieszyæ siê mo¿na tym, ¿e tego typu sytuacje s± statystycznie marginalne. 4. Proces qmail-inject (odpowiednik polecenia sendmail sprawdza wy³±cznie zmienne QMAILUSER, MAILUSER, USER oraz LOGNAME, ustalaj±c na ich podstawie to¿samo¶æ nadawcy. Zmienne te ustawia wy³±cznie program login. Nie podlega sprawdzeniu uid wywo³uj±cego procesu, dlatego te¿ wszystkie wiadomo¶ci wysy³ane przez demony (np. formularze www) maj± nadawcê anonymous@domena. Rozwi±zaniem jest wyra¼na deklaracja nadawcy przy formu³owaniu wiadomo¶ci (opcja sendmail -f). 5. Du¿a ilo¶æ rozsy³anych wiadomo¶ci powoduje spadek wydajno¶ci procesów qmail-remote. Rozwi±zaniem jest silly qmail syndrome patch [10]. 6. Nie istnieje mechanizm pozwalaj±cy na dostarczenie lokalnych zwrotów do postmastera. 7. Qmail-smtpd nie pozwala na obecno¶æ linii zawieraj±cej wy³±cznie znak LF (bare LF), odrzucaj±c takie przesy³ki ze stosown± adnotacj±. Jest to o tyle interesuj±ce, ¿e wymaga on od innych, choæ sam nie honoruje wielu norm RFC. Rozwi±zaniem jest qmail-0.95-liberal-lf.patch [11]. 8. Standardowa instalacja reaguje niepoprawnie na obecno¶æ niektórych znaków w adresie docelowym, co niektóre skanery interpretuj± jako open relay. W zwi±zku z tym nale¿y instalowaæ stosowny patch [9], aby nie byæ wpisanym na czarne listy takich serwerów. 9. Brak jakichkolwiek perspektyw na oficjalny rozwój. Aktualnie nie ma szans na now± wersjê, opracowan± oryginalnie przez Bernsteina.
http://www.komsta.net/teksty/qmail.txt