QMAIL

 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