logo

Life with qmail

Dave Sill

26 January 2004
Wersja polska: Dariusz Zmokły
globi malpa globi org
v.3.0, 01 luty 2004


Spis treści


1. Wprowadzenie

1.1. Odbiorca

Life with qmail jest skierowane do wszystkich zainteresowanych qmail'em, poczynając od kogoś kto właśnie zainstalował linuxa na swoim PC, aż do doświadczonego administratora systemu czy administratora poczty. Jeśli uważasz, że czegoś w tym tekście brakuje lub coś jest niejasne daj mi znać. Proszę słać komentarze na adres lwq@sill.org.

Jest wiele dostępnych informacji o qmail'u z różnych źródeł. Część adresowana jest do początkujących, część zakłada że odbiorca jest bardziej doświadczony. Life with qmail jest próbą "sklejenia" tych informacji w pojedyńcze źródło, wypełniające istniejącą lukę. Zakładam, że posiadasz jedynie znajomość podstawowych umiejętności :

<

1.2. Czym jest qmail ?

qmail jest programem obsługującym transfer poczty w internecie (MTA) dla systemów unix'owych. Zastępuje Sendmail'a, który jest dostarczany wraz z wieloma systemami unix'owymi. qmail używa prostego protokolu przesyłania poczty (SMTP) by wymieniać wiadomosci z MTA na innych hostach.


Uwaga: nazwa programu to "qmail", nie "Qmail".

1.3. Dlaczego warto używać qmail'a ?

Twój system operacyjny zawiera MTA, prawdopodobnie Sendmail'a, zatem jeśli czytasz ten dokument wygląda na to, ze szukasz czegoś lepszego. Oto część cech, którymi qmail przewyższa inne MTA dostarczane standardowo :

1.3.1. Bezpieczeństwo

qmail został zaprojektowany z myślą o bezpieczeństwie. Historia Sendmail'a pełna jest poważnych problemów związanych z bezpieczeństwem. Gdy Sendmail był tworzony, sieć była znacznie przyjaźniejszym miejscem. Wszyscy znali się zatem nie było potrzeby projektowania i pisania kodu z myślą o bezpieczeństwie. Dzisiejszy internet nie jest już tak przyjaznym miejscem dla serwerów. Autor Sendmail'a Eric Allman odwalił kawał dobrej roboty uszczelniając swój program, jednak aby naprawdę polepszyć go pod tym względem należałoby zaprojektować go od nowa.

1.3.2. Prędkość działania

qmail dostarcza pocztę równolegle. Domyślnie potrafi obsługiwać do 20 dostarczeń na raz.

1.3.3. Wiarygodność

qmail akceptując wiadomość gwarantuje, że nie zostanie ona utracona. Ponadto używa on nowego formatu skrzynki pocztowej, który pracuje poprawnie nawet z NFS bez lockowania plików.

1.3.4. Prostota

qmail jest mniejszy niż inne MTA o porównywalnych cechach.


Uwaga: Oficjalna strona qmail'a http://cr.yp.to/qmail.html omawia jego cechy znacznie bardziej szczegółowo.

1.4. Historia

qmail został napisany przez Dan'a Bernstein'a (DJB), http://en.wikipedia.org/wiki/Daniel_J._Bernstein, wykładowcę matematyki na Uniwersytecie Illinois w Chicago. Dr Bernstein znany jest także ze swojej pracy w dziedzinie kryptografii oraz z pozwu przeciwko rządowi Stanów Zjednoczonych w sprawie publikowania kodu źródłowego procedur szyfrujących. Zobacz http://en.wikipedia.org/wiki/Bernstein_v._United_States lub http://cr.yp.to/export.html aby poczytać o tej sprawie.

Pierwszy raz qmail został udostępniony publicznie 24 stycznia 1996 roku, była to wersja 0.70 beta. Publikacja pierwszej wersji gamma o numerze 0.90 miała miejsce 1 sierpnia 1996.

Wersja 1.0, pierwsza uważana za stabilną została ukończona 20 lutego 1997. Obecna wersja 1.03 nosi datę 15 czerwca 1998.

Następna ma być wersja testowa 2.0. Część nowych cech, które mogą się w niej pojawić opisana jest na stronie http://cr.yp.to/qmail/future.html.

1.5. Właściwości

Na stronie qmail'a http://cr.yp.to/qmail.html przedstawiono wyczerpującą listę jego właściwości. Poniższy akapit został sporządzony przede wszystkim na jej podstawie.

1.5.1. Konfiguracja

1.5.2. Bezpieczeństwo

1.5.3. Konstrukcja wiadomości

1.5.4. Usługi SMTP

1.5.5. Obsługa kolejki wiadomości oczekujących na wysłanie

1.5.6. Maile informujące o niedostarczeniu wiadomości (bounces)

1.5.7. Routing na podstawie domen

1.5.8. Dostarczanie poczty

1.5.9. Forwarding poczty i grupy dyskusyjne

1.5.10. Dostarczenia lokalne

1.5.11. Usługa POP3

1.6. Dodatkowe pakiety

qmail został napisany zgodnie z filozofią UNIX'a wg. której każde narzędzie powinno wykonywać jedno, dobrze zdefiniowane działanie, natomiast złożone funkcje powinny być wykonywane poprzez łączenie pojedyńczych działań w "potok". Alternatywnym podejściem jest budowanie coraz bardziej złożonych programów, które łączą w sobie funkcjonalność prostszych narzędzi.

Nie jest zaskoczeniem, że qmail nie robi wszystkiego tego, co ktoś mógłby chcieć żeby robił. Poniżej wymienionych jest kilka najbardziej popularnych dodatkowych pakietów do qmail'a. Oczywiście wiele standardowych narzędzi UNIX'a może być także wykorzystanych wraz z qmail'em.

1.7. Architektura

Funkcjonalna i fizyczna struktura qmail'a opisane są w załączniku D. W skrócie qmail składa się z wielu programów (modułów) wykonujących różne zadania.

1.8. Licencja

Prawa autorskie qmail'a należą do jego autora Dan'a Bernstein'a jednak wersja źródłowa nie zawiera dokumentu określającego prawa użytkowników. Na stronie http://cr.yp.to/softwarelaw.html opisuje on jakie prawa należą do użytkownika qmail'a zgodnie z amerykańskim prawem autorskim. Na stronie http://cr.yp.to/qmail/dist.html zgadza się on na rozpowszechnianie kodu źródłowego qmail'a. Rozpowszechnianie binariów jest dozwolone pod warunkami opisanymi na http://cr.yp.to/qmail/var-qmail.html. Zobacz także http://en.wikipedia.org/wiki/License-free_software.

Opisując te prawa w kilku słowach, możesz używać qmail'a dla jakiegokolwiek celu, możesz redystrybutować niezmodyfikowany kod źródłowy qmail'a oraz binaria qmail'a skompilowane do katalogu /var-qmail. Nie można rozpowszechniać zmodyfikowanych źródeł qmail'a oraz binariów skompilowanych do innych niż /var-qmail katalogów.

1.9. Porównanie z innymi MTA

Właściwie na powyższy temat można by napisać książkę, ale nie byłaby zbyt ciekawa. Oto krótkie porównanie qmail'a z kilkoma najbardziej popularnymi MTA pracującymi pod UNIX'em.

MTA Dojrzałość Bezpieczeństwo Możliwości Szybkość Zgodność z sendmail'em Modularność
qmail średnia wysokie wysokie wysoka dodatki tak
Sendmail wysoka niskie wysokie niska x nie
Postfix średnia wysokie wysokie wysoka tak tak
exim średnia niskie wysokie średnia tak nie
courier niska średnie wysokie średnia opcjonalnie tak

Zgodność z Sendmail'em oznacza, że dany MTA zachowuje się pod pewnymi względami jak Sendmail co powoduje, że przejście z Sendmail'a do tego programu pocztowego będzie niewidoczne dla użytkownika. Przykładowo chodzi o możliwość używania plików .forward, /etc/aliases i dostarczanie poczty do /var/spool/mail.

Jonathan de Boyne Pollard stworzył stronę na której porównuje te i inne cechy darmowych i komercyjnych MTA http://homepages.tesco.net/~J.deBoynePollard/Reviews/UnixMTSes/. Inne szczegółowe zestawienie jest pod adresem http://www.geocities.com/mailsoftware42/

1.10. Dokumentacja

1.10.1. strony manuali

qmail ma pełen komplet stron manuali. Po zainstalowaniu znajdują się one w /var/qmail/man. Prawdopodobnie będziesz potrzebował dodać tą ścieżlę do zmiennej środowiskowej MANPATH.

Powłoka Polecenie
Bourne (/bin/sh) MANPATH=$MANPATH:/var/qmail/man; export MANPATH
bash, Korn export MANPATH=$MANPATH:/var/qmail/man
C Shell setenv MANPATH $MANPATH:/var/qmail/man

Od tego momentu polecenia w stylu "man name-of-qmail-man-page" powinny wyświetlać odpowiednią stronę manual'a.

Strony te są także dostępne w formacie HTML :


Uwaga: manual'e qmail'a zawierają wiele informacji, jednak zostały napisane w bardzo zwięzły i techniczny sposób, zatem wymagają uważnego czytania. Może okazać się korzystne byś wydrukował je i przeczytał w celu zapoznania się z tym co jest w nich i gdzie to jest. Niewielka ilość informacji jest powtórzona na kilku różnych stronach, zatem jeśli nie wiesz gdzie coś się znajduje możesz mieć kłopoty ze znalezieniem tego czegoś.

1.10.2. Dokumentacja

qmail zawiera szereg dokumentów znajdujących sie w /var/qmail/doc. W ich skład wchodzą :

Te dokumentu są także dostępne on-line:

1.10.3. Dokumenty FAQ

Oto dwa oficjalne FAQ (Najczęściej Zadawane Pytania, i odpowiedzi):

Dokumentacja w postaci strony jest bardziej kompletna.

1.10.4. Książki

1.10.4.1. The qmail Handbook

Dave Sill, autor Life with qmail, napisał książkę o qmail'u dla wydawnictwa Apress (http://www.apress.com/). Książka ta, The qmail Handbook, przedstawia znacznie szczegółowiej to co znajduje się w LWQ, a poza tym zawiera wiele dodatkowych informacji.

Dodatkowe informacje http://www.apress.com/catalog/book/1893115402/. Zakupu dokonać można na http://www.amazon.com/exec/obidos/ASIN/1893115402/davesill.

1.10.4.2. qmail

John Levine napisał książkę pod tytułem qmail dla O'Reilly & Associates (http://www.oreilly.com). Zajrzyj na http://qmail.gurus.com/ gdzie znajdziesz spis treści i przykładowy rozdział.

By zamówic wejd

1.10.4.3. Running qmail

Richard Blum napisał Running qmail, opublikowaną przez Sams. Otrzymała ona niejednoznaczne recenzje na liście dyskusyjnej o qmail'u.

Więcej informacji uzyskasz na stronie http://www.amazon.com/exec/obidos/ASIN/0672319454/davesill.

1.10.5. Archiwa grupy dyskusyjnej

Grupa dyskusyjna poświęcona qmail'owi, utrzymywana przez Dan'a Bernstein'a, jest cennym źródłem informacji. Jej archiwum znajduje sie pod adresem:

Archiwa można przeszukiwac ze strony:

Inne archiwa dostępne w sieci to :

Odpowiedź na większość pytań dotyczących qmail'a możesz znaleźć przeszukując archiwa.

1.10.6. Inne miejsca w sieci

1.11. Gdzie szukać pomocy

1.11.1. Listy dyskusyjne

Wymienione poniżej listy znajdują się na serwerze list.cr.yp.to. W celu utrudnienia zdobycia ich adresów przez spammerów nie podaję ich kompletnych, prawidłowych adresów ani URL'a "mailto".

Listy te pracują pod ezmlm'em, który używa oddzielnych adresów w celu wykonania poszczególnych funkcji:

W celu podania innego adresu na który ma przychodzić korespondencja z listy dyskusyjnej, przykładowo na joe@example.com, wyślij list postaci:

1.11.1.1. qmail

Główna lista poświęcona qmail'owi. Tutaj prowadzone są dyskusje i zadawane pytania na wszystkie tematy dotyczące qmail'a za wyjątkiem tych którym poświęcone są inne listy. Przeczytaj "12 Steps to qmail List Bliss" Charles'a Cazabon'sa http://www.qcc.sk.ca/~charlesc/writings/12-steps-to-qmail-list-bliss.html przed zadaniem pytania. Przeczytaj także FAQ i przeszukaj archiwa listy. Gdy zadajesz pytanie proszę spróbuj podać wystarczającą ilość szczegółów w celu umożliwienia uczestnikom udzielenia odpowiedzi:

1.11.1.2. qmailannounce

Lista z ogłoszeniami dotyczącymi qmail'a. Tutaj uzyskasz informację o nowych wersjach tego programu. Nie wysyła się na nią wiadomości. Jest to lista tylko do czytania.

1.11.1.3. serialmail

Dyskusje dotyczące pakietu serialmail.

1.11.1.4. ezmlm

Dyskusje dotyczące pakietu ezmlm.

1.11.2. Konsultanci

Zobacz http://www.qmail.org/top.html#paidsup w celu zdobycia informacji gdzie można uzyskać pomoc na zasadach komercyjnych.

1.11.3. Baza wiedzy FAQTS

Baza danych pytań i odpowiedzi związanych z qmail'em jest dostępna pod adresem http://qmail.faqts.com. Jeśli masz pytanie na które ten dokument nie odpowiada, spróbuj poszukać odpowiedzi w tej bazie. Jest ona specjalnie pomocna w odnajdywaniu odpowiedzi na pytania "jak to zrobić".


2. Instalacja

Ten akapit opisuje instalację qmail'a. Jeśli jesteś doświadczonym administratorem systemu możesz go zainstalować posługując się wskazówkami zawartymi w pliku INSTALL źródłowej dystrybucji. Znajdują się w nim oficjalne zalecenia jak dokonać instalacji. Są bardziej złożone niż to co opisuję w Life with qmail i zakładają, że czytelnik jest doświadczonym administratorem systemu i poczty. Są także przestarzałe i różnią się w stosunku do tego co Bernstein obecnie zaleca.


Uwaga: Jeśli zdecydujesz się zainstalować qmail'a na podstawie zaleceń niniejszego dokumentu zalecane jest abyś najpierw przeczytał cały ten rozdział w celu oswojenia się z pełnym procesem instalacji.

2.1. Możliwe sposoby instalacji

2.1.1. Binaria czy kod źródłowy?

Z powodu ograniczeń nałożonych na dystrybucję pakietów złożonych z binariów zwykle qmail instalowany jest poprzez kompilację kodu źródłowego.

Jeśli nie wiesz jaka jest różnica pomiędzy kodem źródłowym, a binariami wyobraź sobie zamawianie pizzy dostarczanej do domu. "Binarna" wersja pizzy przywożona jest gotowa do spożycia. "Kod źródłowy" pizzy przybywa jako komplet zakupów w których skład wchodzą mąka, drożdże, ser, sos, dodatki i przepis jak samemu sporządzić pizzę. Instalacja na podstawie kodu źródłowego wymaga trochę więcej pracy, jednak jeśli dokładnie wypełnisz zalecenia zawarte w przepisie będzie tej samej lub lepszej jakości. Pizza sporządzona przez siebie samego będzie swieższa, możesz także użyć jakich chcesz dodatków zgodnie z twymi własnymi preferencjami i będziesz wiedział więcej o pizzy i o tym jak ona "działa".

Nie jest prosto tak skonfigurować serwer dostępny w internecie żeby był on bezpieczny. Nieprawidłowa konfiguracja może narazić system na ryzyko ataku a nawet może być on wykorzystany w celu ataku innych miejsc w internecie co może narazić jego administratora na odpowiedzialność prawną. Im więcej wiesz o tym jak działają usługi sieciowe tym większa szansa że będziesz potrafił je odpowiednio i bezpiecznie skonfigurować.

2.1.2. Instalacja z pliku tar czy z pakietu przygotowanego dla danego systemu operacyjnego?

Niektóre systemy operacyjne mają mechanizm automatyzacji instalacji na podstawie kodu źródłowego. Wracając do analogii z pizzą, umożliwiają upakowanie razem składników i przepisu. W efekcie możesz przygotować pizzę przyciskając odpowiedni przycisk.

Brzmi wspaniale nieprawdaż?

Niestety w praktyce, nie musi to być wcale taki dobry pomysł. Składanie takich pakietów jest dość skomplikowane i mogą zachowywać się w sposób odmienny od twoich oczekiwań. Pakiety takie są oprogramowaniem i jak każde oprogramowanie moga zawierać błędy. Ale nawet jeśli ich nie zawierają łatwość instalacji kosztuje. Tracisz większość z zalet upieczenia samemu pizzy: możliwości do dostosowania dodatków do twoich własnych upodobań, i wiedzę jak pizza została zrobiona i jak ona działa.

Gdyby qmail był pizzą instalowanie na podstawie pakietu własciwego dla danego systemu operacyjnego mogłoby być dobrym podejściem. Jednak jest on dość skomplikowanym systemem, który powinieneś dobrze rozumieć by zapewnić jego dobre działanie. Samoinstalujący się qmail jest łatwiejszy do zainstalowania, niż wersja zainstalowana od podstaw przez użytkownika, ale wersja zainstalowana przez użytkownika jest łatwiejsza do skonfigurowania i do odnalezienia powodów dla których coś nie działa. Instalację wykonujesz tylko raz, natomiast najprawdopodobniej kilkukrotnie bedziesz go przekonfigurował lub starał się dojść dlaczego coś nie działa tak jak powinno.

Z tego powodu zalecam instalowanie qmail'a od podstaw przy użyciu kodu źródłowego z pliku tar, a nie wersji "rpm" Red Hat'a czy innego "samoinstalującego się" pakietu.

2.2. Przygotowanie

Przed zainstalowaniem qmail'a w systemie, zwłaszcza jeśli jest to twoja pierwsza jego instalacja powinieneś wiedzieć o kilku rzeczach :

2.3. Wymagania systemowe

qmail'a można zainstalować i uruchomić na większości komputerów pracujących pod kontrolą UNIX'a czy systemów podobnych do UNIX'a pod warunkiem:


Uwaga: kolejka musi znajdować się na partycji, który umożliwia użycie plików uruchamialnych oraz plików setuid (ze zmienionym identyfikatorem właściciela). Niektóre systemy operacyjne automatycznie podmontowują /var z opcją nosuid lub noexec. W tych systemach należy albo wyłączyć tę opcję lub /var/qmail/bin powinien znajdować się na innej partycji na której są one wyłączone. Sekcja Zakladanie katalogówopisuje jak użyć linków symbolicznych by to osiągnąć.


Uwaga: w systemie Apple OS X nie uda się poprawnie zainstalowaćqmail'a posługując się wskazówkami zawartymi w tym dokumencie ani w pliku INSTALL. Jay Soffian opisał procedurę instalacji w systemie OS X, na stronie http://www.soffian.org/docs/qmail_on_os_x.html. Kyle Wheeler zaleca następujące modyfikacje:
Zanim skompilujesz zmień linię 4 strerr_sys.c tak:

struct strerr strerr_sys = {0,0,0,0};

Oraz zmień linię 81 hier.c:

c(auto_qmail,"doc","INSTALL.txt",auto_uido,auto_gidq,0644);

Ponadto, by naprawić błąd iż qmail czasami wiesza się w momencie bootowania uruchom jako root (po tym gdy założysz już 
użytkowników co opisane jest w instrukcji instalacji):

nidump passwd / > /etc/passwd


2.4. Ściaganie źródeł

Po przeczytaniu uwag w poprzednim punkcie powinieneś mieć system spełniający wymogi niezbędne do zainstalowania qmail'a. Obecnie trzeba ściągnąć źródła qmail'a i ewentualnych dodatkowych pakietów. Zwykle będą to qmail, ucspi-tcp i daemontools

Ściągnij te pliki przy użyciu przeglądarki internetowej lub klienta ftp.


Uwaga: Jeśli któryś z powyższych linków nie zadziała będzie tak najprawdopodobniej wówczas jeśli pojawiła się już nowsza wersja. W takim przypadku zajrzyj na stronę http://cr.yp.to/software.html i przejdź do miejsca skąd możesz ściągnąć najnowszą wersję. Może okazać się że nowsza wersja nie będzie kompatybilna z opisem który znajdziesz w tym dokumencie, więc dla pewności przeczytaj dokumentację załączoną w nowszej wersji, a szczególnie rozdział "Upgrading from previous versions..."


Uwaga: W tym opisie używamy dystrybucji netqmail , która składa się z oficjalnego qmail'a w wersji 1.03 na którego nakładamy łatki, które usuwają kilka błędów i zapewniają kompatybilność z aktualnymi wersjami systemów operacyjnych. Zajrzyj na http://www.qmail.org/netqmail/ oraz do pliku CHANGES netqmail'a by dowiedzieć sie więcej.

2.5. Kompilowanie źródła

2.5.1. Sprawdzenie działania kompilatora

Pierwsza rzeczą którą trzeba zrobić jest upewnienie się czy posiadasz narzędzia do kompilacji programów. Można to sprawdzać na wiele sposobów w zależności od typu UNIX'a, który używasz. Najprostszy z nich, ale nie dającym 100% pewności, jest próba uruchomienia go.


Uwaga: jeśli którykolwiek z poniższych testów powiedzie się, możesz zrezygnować z wykonywania pozostałych i przejść do dalszej części.
    $ cc
    cc: No input files specified
    $

W kolejnym punkcie opisane jest krok po kroku jak skompilować qmail'a.

2.5.2. Rozpakuj program

Jeśli dotarłeś do tego miejsca oznacza to, że masz działający kompilator C i źródła w postaci plików tar. Skopiuj albo przenieś te pliki do katalogu w którym chcesz pracować. Dobrym wyborem jest /usr/local/src dla qmail'a i ucspi-tcp, natomiast daemontools powinno być kompilowane w /package.

W tym momencie powinienes uzyskać uprawnienia root'a, jeśli jeszcze ich nie masz

    su
    umask 022
    mkdir -p /usr/local/src
    mv netqmail-1.05.tar.gz ucspi-tcp-0.88.tar.gz /usr/local/src
    mkdir -p /package
    mv daemontools-0.76.tar.gz /package
    chmod 1755 /package

Teraz możesz rozpakować pakiety.

    cd /usr/local/src
    gunzip netqmail-1.05.tar.gz
    tar xpf netqmail-1.05.tar
    cd netqmail-1.05
    ./collate.sh  # watch for errors here
    cd ..
    gunzip ucspi-tcp-0.88.tar.gz
    tar xpf ucspi-tcp-0.88.tar
    rm *.tar    # opcjonalne, tylko jeśli masz mało miejsca na dysku
    cd /package
    gunzip daemontools-0.76.tar.gz
    tar xpf daemontools-0.76.tar
    rm *.tar    # opcjonalne, j.w.

Powinieneś mieć teraz podkatalogi nazwane /usr/local/src/netqmail-1.05, /usr/local/src/ucspi-tcp-0.88 i /package/admin/daemontools-0.76.

2.5.3. Zakladanie katalogów

Program instalacyjny qmail'a sam tworzy podkatalogi, ktore są potrzebne. Dla ciebie pozostaje tylko stworzenie katalogu "domowego":

    mkdir /var/qmail

Możesz teraz przejść do następnego podpunktu.


Uwaga: Jeśli chcesz by część lub wszystkie pliki qmail'a znajdowały się poza /var możesz to osiągnąć tworząc symboliczne linki w /var/qmail do miejsca gdzie on się znajduje.

Przykładowo, pliki konfiguracyjne mogą znajdować sie w /etc/qmail poprzez:

    mkdir /etc/qmail
    ln -s /etc/qmail /var/qmail/control


2.5.4. Tworzenie użytkowników i grup

Najprościej zrobić to tworząc skrypt. W katalogu źrodłowym znajdź plik o nazwie INSTALL.ids. Znajdują się w nim polecenia, które należy wykonać, w wersjach dla wielu różnych platform, więc najlepiej skopiować go do pliku o innej nazwie i dokonać jego edycji.

    cd /usr/local/src/netqmail-1.05/netqmail-1.05
    cp INSTALL.ids  IDS

Następnie przy użyciu edytora tekstu usuń z niego to co nie jest potrzebne. Dla przykładu oto co powinno znaleźć się w IDS dla FreeBSD po zakończeniu edycji:

    pw groupadd nofiles
    pw useradd alias -g nofiles -d /var/qmail/alias -s /nonexistent
    pw useradd qmaild -g nofiles -d /var/qmail -s /nonexistent
    pw useradd qmaill -g nofiles -d /var/qmail -s /nonexistent
    pw useradd qmailp -g nofiles -d /var/qmail -s /nonexistent
    pw groupadd qmail
    pw useradd qmailq -g qmail -d /var/qmail -s /nonexistent
    pw useradd qmailr -g qmail -d /var/qmail -s /nonexistent
    pw useradd qmails -g qmail -d /var/qmail -s /nonexistent

Następnie użyj chmod by uczynić go wykonywalnym lub uruchom go poprzez sh:

Pierwsza metoda:

    chmod 700 IDS
    ./IDS

Druga metoda:

    /bin/sh IDS

Gdy skrypt zakończy działanie będziesz miał już stworzonych wszystkich potrzebnych użytkowników oraz grupy i możesz przejść do następnego punktu.

Jednak co zrobić jeśli polecenia dla twojego systemu nie znajdują się w INSTALL.ids? W takim wypadku trzeba je samemu napisać. Uruchom ulubiony edytor tekstu i zacznij edycję /etc/group. Trzeba dodać do niego dwie linie:

    qmail:*:2107:
    nofiles:*:2108:


Uwaga: Sprawdź najpierw czy 2107 i 2108 nie są jeszcze używane.

Teraz używając vipw (jest zainstalowany na większości systemów, jeśli nie użyj swego edytora ponownie, ale tym razem na pliku /etc/passwd) dodaj poniżesz linie na końcu pliku:

    alias:*:7790:2108::/var/qmail/alias:/bin/true
    qmaild:*:7791:2108::/var/qmail:/bin/true
    qmaill:*:7792:2108::/var/qmail:/bin/true
    qmailp:*:7793:2108::/var/qmail:/bin/true
    qmailq:*:7794:2107::/var/qmail:/bin/true
    qmailr:*:7795:2107::/var/qmail:/bin/true
    qmails:*:7796:2107::/var/qmail:/bin/true


Uwaga: Upewnij się, że 7790-7796 nie są jeszcze używane i że numery grup 2107 i 2108 odpowiadają identyfikatorom grup użytych powyżej. Jeśli któryś z tych numerów jest juz zajęty wybierz taki który jest wolny.

Nie musisz wcale dodawać tych linii na końcu, jest to po prostu najłatwiejszy sposób na wytłumaczenie co trzeba zrobić.

Po zakończeniu dodawania grup i użytkowników jesteśmy już gotowi do przejścia do następnego punktu.

2.5.5. Kompilacja

Jesteś już gotowy do rozpoczęcia kompilacji. Zmień katalog na /usr/local/src/netqmail-1.05/netqmail-1.05 i zaczynajmy:

    cd /usr/local/src/netqmail-1.05/netqmail-1.05

W punkcie Sprawdzenie działania kompilatora znalazłeś kompilator C. Jeśli nie nazywa się on cc, albo gdy katalog w którym on się znajduje nie został dodany do zmiennej środowiskowej PATH, będziesz musiał dokonać edycji plików conf-cc i conf-ld. Powiedzmy, że twój kompilator nazywa się gcc i jego katalog nie jest w twej ścieżce dostępu. W takim razie dokonaj edycji conf-cc i conf-ld i napisz "gcc" zamiast "cc".

Teraz napisz:

    make setup check

Po zakończeniu kompilacji trzeba skonfigurować qmail'a. Kilka skryptów dostarczonych wraz z nim ułatwi to.

Jeśli twoj DNS jest poprawnie skonfigurowany napisz:

    ./config

Jeśli, z jakiegoś powodu, config nie znalazł nazwy twego hosta w DNS trzeba uruchomić skrypt o nazwie config-fast:

    ./config-fast pełna.nazwa.hosta

Na przykład, jeśli twoja domena to example.com, a nazwa twojego hosta to dolphin powinieneś napisać:

    ./config-fast dolphin.example.com


Uwaga: W małych sieciach LAN możesz chcieć użyć pseudodomeny takiej jak ".local". np. jeśli twój host nazywa się "mash", możesz wykonać ./config-fast mash.local. Jeśli tak zrobisz bądź pewien by skonfigurować qmail'a by używał prawidłowej domeny internetowej. (Zob. rozdział 3, Konfiguracja.)

qmail został właśnie zainstalowany w twym systemie i jest gotowy do pracy! Za chwilę przeczytasz jak go uruchomić i przetestować.

2.6. Instalacja ucspi-tcp

Rozpakowaliśmy już qmail, ucpsi-tcp i daemontools z archiwów tar. Przejdźmy zatem do katalog ucpsi-tcp:

    cd /usr/local/src/qmail/ucspi-tcp-0.88

Jeśli w punkcie Kompilacja dokonałeś zmian w plikach conf-cc i conf-ld będziesz musiał wprowadzić te same zmiany tutaj.

Następnie:

    patch < /usr/local/src/netqmail-1.05/other-patches/ucspi-tcp-0.88.errno.patch
    make
    make setup check

To już wszystko. ucpsi-tcp jest zainstalowany.

2.7. Instalacja daemontools

Zmień katalog:

    cd /package/admin/daemontools-0.76

I znowu, jeśli zmodyfikowałeś pliki conf-cc i conf-ld podczas instalacji qmail'a i ucspi-tcp będziesz musiał zrobić te same zmiany tutaj.

Następnie:

    cd src
    patch < /usr/local/src/netqmail-1.05/other-patches/daemontools-0.76.errno.patch
    cd ..
    package/install

W systemach BSD (nie posiadają /etc/inittab) będziesz musial zrestartować komputer by uruchomić svscan'a, ktory jest demonem uruchamiającym pozostałe usługi.

Napisz "ps -ef | grep svscan" or "ps waux | grep svscan" by sprawdzić czy svscan już działa.


Uwaga: W systemie Solaris, będziesz musiał zmodyfikować linijkę /etc/inittab linijkę która uruchamia svscan z postaci:
  SV:123456:respawn:/command/svscanboot

do:

  SV:123456:respawn:/command/svscanboot </dev/null >/var/log/svscan 2>&1

lub:

  SV:123456:respawn:/command/svscanboot </dev/null >/dev/msglog 2>&1

W zależności od tego czy chcesz by informacje o błędach svscan'a były wysyłane do pliku lub na konsolę. Tutaj znajduje się wyjaśnienie czemu jest to konieczne:

http://marc.theaimsgroup.com/?l=log&m=100327801309834&w=2



Uwaga: Użytkownicy Slackware raportują, że wpis odnośnie SV do /etc/inittab musi poprzedzać linijkę startującą x1, w przeciwnym razie svscan nie wystartuje po reboocie.

2.8. Uruchomienie qmail'a

2.8.1. /var/qmail/rc

Katalog /var/qmail/boot zawiera przykładowe skrypty uruchamiające qmail'a podczas procesu bootowania komputera w różnych konfiguracjach: /var/spool/mail vs. $HOME/Mailbox, z procmailem lub dot-forward, i różne kombinacje powyższych. Możesz ich używać, jednak my wykorzystamy poniższy:

#!/bin/sh

# logowanie do stdout
# wiadomości dostarczane na podstawie control/defaultdelivery

exec env - PATH="/var/qmail/bin:$PATH" \
qmail-start "`cat /var/qmail/control/defaultdelivery`"


Uwaga: Skrypt ten używa odwrotnego cudzysłowiu (`), a nie zwykłego ('). Najlepiej skopiuj ten skrypt ze strony zamiast wklepywać go ręcznie.

Przy pomocy edytora tekstu utwórz /var/qmail/rc, zawierający powyższe dwie linie. Następnie wykonaj polecenia:

    chmod 755 /var/qmail/rc
    mkdir /var/log/qmail

W tym momencie musisz podjąć decyzję co do sposobu dostarczania wiadomości, które nie są dostarczane na podstawie pliku .qmail. Najczęściej spotykane rozwiązania znajdują się w tabeli.

Format skrzynki Nazwa Lokalizacja Dostarczanie domyślne Komentarz
mbox Mailbox $HOME ./Mailbox najpopularniejszy, działa z większością MUA
maildir Maildir $HOME ./Maildir/ bardziej wiarygodny, obsługiwany przez mniejszą ilość MUA
mbox  username /var/spool/mail zob.INSTALL.vsm tradycyjny format w UNIXie

Zajrzyj do INSTALL.mbox, INSTALL.maildir i INSTALL.vsm by dowiedzieć się więcej.

Aby dokonać wyboru formatu skrzynki pocztowej po prostu wprowadź wartość znalezioną w tabeli o nazwie 'dostarczanie_domyślne' do /var/qmail/control/defaultdelivery. Przykladowo aby wybrać standardowe dostarczanie poczty przez qmail'a do Mailbox:

    echo ./Mailbox >/var/qmail/control/defaultdelivery


Uwaga: defaultdelivery nie jest standardowym plikiem sterującym qmail'a. Jest to plik wykorzystywany poprzez /var/qmail/rc. qmail-start dostarcza wiadomość na podstawie defaultdelivery jeśli nie znajdzie pliku .qmail w katalogu domowym użytkownika. Umieszczenie tych instrukcji w oddzielnym pliku eliminuje potrzebę stosowania skomplikowanych kilkulinijkowych argumentów.

2.8.2. Pliki startowe systemu

2.8.2.1. Skrypt qmail'a

Jeśli ręcznym uruchomiłeś skrypt /var/qmail/rc qmail został częściowo uruchomiony. Chcemy jednak, by qmail był automatycznie uruchamiany podczas każdego startu systemu i by był bezpiecznie zamykany podczas wyłączania komputera.

Aby to osiągnąć utwórz skrypt podobny do poniższego w /var/qmail/bin/qmailctl:

#!/bin/sh

# description: the qmail MTA

PATH=/var/qmail/bin:/bin:/usr/bin:/usr/local/bin:/usr/local/sbin
export PATH

QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`

case "$1" in
  start)
    echo "Starting qmail"
    if svok /service/qmail-send ; then
      svc -u /service/qmail-send /service/qmail-send/log
    else
      echo "qmail-send supervise not running" 
    fi
    if svok /service/qmail-smtpd ; then
      svc -u /service/qmail-smtpd /service/qmail-smtpd/log
    else
      echo "qmail-smtpd supervise not running"
    fi
    if [ -d /var/lock/subsys ]; then
      touch /var/lock/subsys/qmail
    fi
    ;;
  stop)
    echo "Stopping qmail..."
    echo "  qmail-smtpd"
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "  qmail-send"
    svc -d /service/qmail-send /service/qmail-send/log
    if [ -f /var/lock/subsys/qmail ]; then
      rm /var/lock/subsys/qmail
    fi
    ;;
  stat)
    svstat /service/qmail-send
    svstat /service/qmail-send/log
    svstat /service/qmail-smtpd
    svstat /service/qmail-smtpd/log
    qmail-qstat
    ;;
  doqueue|alrm|flush)
    echo "Flushing timeout table and sending ALRM signal to qmail-send."
    /var/qmail/bin/qmail-tcpok
    svc -a /service/qmail-send
    ;;
  queue)
    qmail-qstat
    qmail-qread
    ;;
  reload|hup)
    echo "Sending HUP signal to qmail-send."
    svc -h /service/qmail-send
    ;;
  pause)
    echo "Pausing qmail-send"
    svc -p /service/qmail-send
    echo "Pausing qmail-smtpd"
    svc -p /service/qmail-smtpd
    ;;
  cont)
    echo "Continuing qmail-send"
    svc -c /service/qmail-send
    echo "Continuing qmail-smtpd"
    svc -c /service/qmail-smtpd
    ;;
  restart)
    echo "Restarting qmail:"
    echo "* Stopping qmail-smtpd."
    svc -d /service/qmail-smtpd /service/qmail-smtpd/log
    echo "* Sending qmail-send SIGTERM and restarting."
    svc -t /service/qmail-send /service/qmail-send/log
    echo "* Restarting qmail-smtpd."
    svc -u /service/qmail-smtpd /service/qmail-smtpd/log
    ;;
  cdb)
    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp.cdb
    echo "Reloaded /etc/tcp.smtp."
    ;;
  help)
    cat <<HELP
   stop -- stops mail service (smtp connections refused, nothing goes out)
  start -- starts mail service (smtp connection accepted, mail can go out)
  pause -- temporarily stops mail service (connections accepted, nothing leaves)
   cont -- continues paused mail service
   stat -- displays status of mail service
    cdb -- rebuild the tcpserver cdb file for smtp
restart -- stops and restarts smtp, sends qmail-send a TERM & restarts it
doqueue -- schedules queued messages for immediate delivery
 reload -- sends qmail-send HUP, rereading locals and virtualdomains
  queue -- shows status of queue
   alrm -- same as doqueue
  flush -- same as doqueue
    hup -- same as reload
HELP
    ;;
  *)
    echo "Usage: $0 {start|stop|restart|doqueue|flush|reload|stat|pause|cont|cdb|queue|help}"
    exit 1
    ;;
esac

exit 0

Skrypt ten jest dostępny także ze strony http://www.lifewithqmail.org/qmailctl-script-dt70.

Utwórz ten skrypt w edytorze albo ściągnij go z powyższej strony (zalecane).

Uczyń skrypt qmailctl uruchamialnym i zlinkuj go do katalogu znajdującego się w twojej ścieżce dostępu:

    chmod 755 /var/qmail/bin/qmailctl
    ln -s /var/qmail/bin/qmailctl /usr/bin

2.8.2.2. Skrypty supervise

Utwórz teraz katalogi supervise dla poszczególnych usług qmail'a:

    mkdir -p /var/qmail/supervise/qmail-send/log
    mkdir -p /var/qmail/supervise/qmail-smtpd/log

Stwórz plik /var/qmail/supervise/qmail-send/run:

#!/bin/sh
exec /var/qmail/rc

Stwórz plik /var/qmail/supervise/qmail-send/log/run:

#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail

Stwórz plik /var/qmail/supervise/qmail-smtpd/run:

#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
LOCAL=`head -1 /var/qmail/control/me`

if [ -z "$QMAILDUID" -o -z "$NOFILESGID" -o -z "$MAXSMTPD" -o -z "$LOCAL" ]; then
    echo QMAILDUID, NOFILESGID, MAXSMTPD, or LOCAL is unset in
    echo /var/qmail/supervise/qmail-smtpd/run
    exit 1
fi

if [ ! -f /var/qmail/control/rcpthosts ]; then
    echo "No /var/qmail/control/rcpthosts!"
    echo "Refusing to start SMTP listener because it'll create an open relay&
quot;
    exit 1
fi

exec /usr/local/bin/softlimit -m 2000000 \
    /usr/local/bin/tcpserver -v -R -l "$LOCAL" -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
        -u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /var/qmail/bin/qmail-smtpd 2>&1


Uwaga: concurrencyincoming nie jest standardowym plikiem konfiguracyjnym qmail'a. Wykorzystywany jest jedynie na potrzeby powyższego skryptu podobnie jest z -1 (minus jeden) w linii LOCAL i z -l (minus el) w linii tcpservera.


Uwaga: W systemie Solaris, standardowy program id nie zadziała poprawnie na potrzeby tego skryptu. Zamiast id użyj /usr/xpg4/bin/id, np:
    QMAILDUID=`/usr/xpg4/bin/id -u qmaild`
    NOFILESGID=`/usr/xpg4/bin/id -g qmaild`



Uwaga: Obszar pamięci określony przez polecenie softlimit może wymagać zwiększenia w zależności od typu systemu operacyjnego oraz hardware. Jeśli połączenia z portem 25 będą stwarzać problemy lub gdy hosty zewnętrzne nie będą mogły wysyłać do ciebie poczty zwiększ ten parametr do 3000000 lub 4000000.

W niektórych sytuacjach konieczne będzie nadanie temu parametrowi znacznie wyższej wartości. Przykładowo jeśli planujesz używać skanera antywirusowego mksd to w chwili obecnej potrzebuje on aż 128mb pamięci dla swych celów (od tłumacza).

Stwórz plik concurrencyincoming:

    echo 20 > /var/qmail/control/concurrencyincoming
    chmod 644 /var/qmail/control/concurrencyincoming

Stwórz plik /var/qmail/supervise/qmail-smtpd/log/run:

#!/bin/sh
exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t /var/log/qmail/smtpd

Uczyń pliki startowe plikami uruchamialnymi:

    chmod 755 /var/qmail/supervise/qmail-send/run
    chmod 755 /var/qmail/supervise/qmail-send/log/run
    chmod 755 /var/qmail/supervise/qmail-smtpd/run
    chmod 755 /var/qmail/supervise/qmail-smtpd/log/run

I utwórz katalogi dla logów:

    mkdir -p /var/log/qmail/smtpd
    chown qmaill /var/log/qmail /var/log/qmail/smtpd

I wreszcie zlinkuj katalog supervise do /service:

    ln -s /var/qmail/supervise/qmail-send /var/qmail/supervise/qmail-smtpd /service

Katalog /service tworzony jest w trakcie instalacji pakietu daemontools


Uwaga: qmail uruchomi się automatycznie wkrótce po utworzeniu powyższych linków. Jeśli nie chcesz żeby już teraz rozpoczął pracę napisz:
    qmailctl stop


2.8.2.3. Kontrola dostępu do SMTP

Zezwól na wysyłanie poczty z localhosta poprzez SMTP:

    echo '127.:allow,RELAYCLIENT=""' >>/etc/tcp.smtp
    qmailctl cdb

2.8.3. Zatrzymanie i wyłączenie zainstalowanego MTA

Mimo, że możliwa jest jednoczesna praca qmail'a i zainstalowanego MTA, którym prawdopodobnie jest Sendmail, nie zalecam tego chyba że wiesz co robisz. A jeśli czytasz ten tekst to prawdopodobnie tak nie jest :-)

Jeśli twym obecnym MTA jest Sendmail powinieneś być w stanie zatrzymać go uruchamiając skrypt zawarty w init.d z argumentem "stop". Jedno z poniższych powinno zadziałać:

    /etc/init.d/sendmail stop
    /sbin/init.d/sendmail stop
    /etc/rc.d/init.d/sendmail stop

Jeśli nie możesz znależć skryptu init.d/sendmail spróbuj zlokalizować PID Sendmail'a poprzez "ps -ef|grep sendmail" lub "ps waux|grep sendmail" i zatrzymaj go:

    kill PID-of-sendmail

Jeśli twym MTA nie jest Sendmail zajrzyj do jego dokumentacji aby dowiedzieć się jak należy go zatrzymać.

Powinieneś rozważyć całkowite usunięcie starego MTA z systemu. A przynajmniej usuń skrypt z init.d po to by nie startował ponownie podczas reboot'u systemu.

Dla Red Hat'a usuniecię Sendmail'a można osiągnąc poprzez:

    rpm -e --nodeps sendmail


Uwaga: Jeśli posiadasz dystrybucję, która używa RPM jako systemu kontroli zainstalowanych pakietów, czyli np. Red Hat usunięcie pakietu MTA może spowodować pewne problemy w przyszłości. Narzędzia, które przeprowadzają update systemu mogą próbować zainstalować ponownie Sendmail'a gdyż mogą nie być w stanie wykryć, że masz zainstalowany inny MTA. Mate Wierdl stworzył pakiet o nazwie "fałszywy_mta" który zapobiega tym problemom. Zainstaluj po prostu RPM dostępny tutaj http://www.csi.hu/mw/fake_mta-1-1memphis.noarch.rpm.


Sprawdź czy nic nie nie nasłuchuje na porcie SMTP (25). Jeśli coś tam jest może to być stary MTA, inetd, lub xinetd. Poniższe polecenie nie powinno dać żadnych wyników (chyba, że qmail-smtpd jest uruchomiony):

    netstat -a | grep smtp

Jeśli jednak coś otrzymałeś będziesz musiał zlokalizować przyczynę problemu i usunąć ją zanim uruchomisz qmail'a.

Na koniec zastąp istniejący /usr/lib/sendmail jego wersją z qmail'a

    mv /usr/lib/sendmail /usr/lib/sendmail.old                  # zignoruj błędy
    mv /usr/sbin/sendmail /usr/sbin/sendmail.old                # zignoruj błędy
    chmod 0 /usr/lib/sendmail.old /usr/sbin/sendmail.old        # zignoruj błędy
    ln -s /var/qmail/bin/sendmail /usr/lib
    ln -s /var/qmail/bin/sendmail /usr/sbin


Uwaga: Jest bardzo ważne by stworzyć linki sendmail , niezależnie od tego jaki MTA miałeś zainstalowany. Polecenie sendmail wywoływane jest przez wiele aplikacji w celu wysłania maila.

Jesteśmy już prawie gotowi do uruchomienia qmail'a. Ostatni krok to stworzenie kilku systemowych aliasów.

2.8.4. Tworzenie systemowych aliasów

Istnieją trzy aliasy systemowe, które powinny być stworzone w każdym systemie w którym działa qmail:

Alias Przeznaczenie
postmaster wymagany przez RFC 821, wskazuje na administratora poczty (ciebie)
mailer-daemon standardowy odbiorca niedostarczonych listów
root przekierowuje pocztę z uprzywilejowanego konta do administratora systemu

By stworzyć te aliasy zdecyduj gdzie chcesz żeby była dostarczana poczta kierowana do nich (do użytkownika lokalnego, czy do adresu na zewnątrz), stwórz i wypełnij odpowiednie pliki .qmail. Na przykład, powiedzmy że lokalny użytkownik dave jest zarówno administratorem poczty, jak i administratorem systemu:

    echo dave > /var/qmail/alias/.qmail-root
    echo dave > /var/qmail/alias/.qmail-postmaster
    ln -s .qmail-postmaster /var/qmail/alias/.qmail-mailer-daemon
    chmod 644 /var/qmail/alias/.qmail-root /var/qmail/alias/.qmail-postmaster

Jeśli pragniesz dowiedzieć się więcej zajrzyj do INSTALL.alias.

2.8.5. Startujemy qmail'a

Jeśli wcześniej zatrzymałeś qmail'a po tym jak stworzyłeś linki do /service uruchom go teraz poprzez:

    qmailctl start

2.9. Test poprawności instalacji

qmail powinien już pracować. Najpierw uruchom qmailctl stat by sprawdzić czy wszystkie cztery procesy pracują:

    # qmailctl stat
    /service/qmail-send: up (pid 30303) 187 seconds
    /service/qmail-send/log: up (pid 30304) 187 seconds
    /service/qmail-smtpd: up (pid 30305) 187 seconds
    /service/qmail-smtpd/log: up (pid 30308) 187 seconds
    messages in queue: 0
    messages in queue but not yet preprocessed: 0

Wszystkie cztery procesy powinny pracować (być oznaczone jako 'up') przez ponad sekundę. Jeśli nie są prawdopodobnie zrobiłeś gdzieś literówkę w skrypcie który je uruchamia albo pominąłeś jeden lub więcej kroków w trakcie tworzenia potrzebnych plików, katalogów lub linków. Wróć zatem do instalacji i sprawdź czy nic nie pominąłeś. Możesz także ściągnąć i uruchomić skrypt inst_check spod adresu http://lifewithqmail.org/inst_check. Przykład:

    # sh inst_check
    ! /var/log/qmail has wrong owner, should be qmaill
    ...try: chown qmaill /var/log/qmail
    #

Jeśli inst_check wykryje problemy, napraw je i uruchom go ponownie. Gdy wszystko będzie wyglądało poprawnie napisze on:

    Congratulations, your LWQ installation looks good!

Program readproctitle loguje komunikaty błędów wygenerowane przez usługi zarządzane przez svscan. By zobaczyć te komunikaty użyj ps lub innego polecenia które pokazuje spis procesów. Przykładowo możesz zobaczyć coś w rodzaju:

    # ps -efl | grep "service errors" | grep -v grep
    000 S root      1006  1001  0  76   0    -   334 pipe_w Mar31 ?        00:00:0
0
    readproctitle service errors: ...unable to start qmail-smtpd/run: exec format
error
    #

W tym przypadku problem polega na tym, że w pierwszej linii /service/qmail-smtpd/run jest błąd najprawdopodobniej spowodowany tym, że skrypt ten jest w formacie DOSowym (linie zakończone są sekwencją CR-LF zamiast jedynie LF).

Czasami pomaga uruchamianie usług ręcznie w celu odkrycia gdzie tkwi problem. Przykładowo jeśli nie działa usługa qmail-smtpd/log wykonaj:

    cd /service/qmail-smtpd/log
    svc -d .
    ./run
    jeśli nie ma błędów, wprowadź linijkę tekstu i wciśnij ENTER
    jeśli nadal nie ma błędow wciśnij CTRL-D (koniec pliku)

Powinieneś być w stanie zidentyfikować i naprawić problem. Gdy już się z tym uporasz przejdź do katalogu service i napisz:

    svc -u .

Gdy już wszystkie usługi pracują dłużej niż 1 sekundę wykonaj polecenia z TEST.deliver i TEST.receive by sprawdzić czy pracują poprawnie. Zwróć uwagę, ze w trakcie wykonywania tych testów logowanie będzie wykonywane przez multilog'a do /var/log/qmail, a nie splogger'a do /var/log/maillog.


Uwaga: Jeśli wybierzesz maildir jako domyślny format skrzynki pocztowej będziesz musiał stworzyć katalog Maildir w twoim katalogu domowym oraz w katalogach domowych alias'ow zanim wykonasz te polecenia. Zajrzyj do rozdziały maildir by dowiedzieć się jak stworzyć te katalogi.



3. Konfiguracja

Zainstalowałeś już qmail'a kompilując jego źródła, czy też korzystając z gotowej wersji. Ten rozdział zawiera informacje które administrator poczty lub systemu będzie potrzebował do skonfigurowania qmail'a zgodnie z własnymi potrzebami.

3.1. Pliki konfiguracyjne

Wszystkie pliki konfiguracyjne qmaila, za wyjątkiem plików .qmail z ~alias, znajdują się w /var/qmail/control. Strona manuala dla qmail-control zawiera następującą tabelę:

Plik Wartość domyślna Używany przez Znaczenie
badmailfrom brak qmail-smtpd Adres From na "czarnej" liście
bouncefrom MAILER-DAEMON qmail-send nazwa nadawcy wiadomości niedostarczonej
bouncehost me qmail-send nazwa hosta który odrzucił wiadomość
concurrencyincoming brak /service/qmail-smtpd/run max liczba nadchodzących równocześnie połączeń SMTP
concurrencylocal 10 qmail-send max liczba dostarczanych równocześnie listów lokalnie
concurrencyremote 20 qmail-send max liczba dostarczanych równocześnie listów na zewnątrz
defaultdelivery brak /var/qmail/rc domyślny plik .qmail
defaultdomain me qmail-inject domyślna nazwa domeny
defaulthost me qmail-inject domyślna nazwa hosta
databytes 0 qmail-smtpd max liczba bajtów w liście (0 brak limitu)
doublebouncehost me qmail-send nazwa hosta wysyłającego podwójny bounce
doublebounceto postmaster qmail-send użytkownik do którego wysyłane są podwójne bounce
envnoathost me qmail-send domyślna domena dla adresów bez "@"
helohost me qmail-remote nazwa hosta pokazywana przez komendę HELO
idhost me qmail-inject nazwa hosta dla Message-ID
localiphost me qmail-smtpd nazwa podstawiana za lokalny adres IP
locals me qmail-send domeny do których dostarczamy pocztę lokalnie
me FQDN of system różne domyślna dla wielu plików konfiguracyjnych
morercpthosts brak qmail-smtpd baza danych pomocniczych rcpthosts
percenthack brak qmail-send domeny używające relayowania w postaci "%"
plusdomain me qmail-inject domena podstawiana zamiast "+"
qmqpservers brak qmail-qmqpc adresy IP serwerów QMQP
queuelifetime 604800 qmail-send ilość sekund przez które wiadomość może przebywać w kolejce
rcpthosts brak qmail-smtpd domeny dla których akceptujemy pocztę lokalnie
smtpgreeting me qmail-smtpd komunikat powitalny SMTP
smtproutes brak qmail-remote routing dla niektórych domen zdefiniowany "ręcznie" przez administratora
timeoutconnect 60 qmail-remote jak długo w sekundach czekać na połączenie SMTP
timeoutremote 1200 qmail-remote jak długo w sekundach czekać na zewnętrzny serwer
timeoutsmtpd 1200 qmail-smtpd jak długo czekać przy odbieraniu poczty
virtualdomains brak qmail-send wirtualne domeny i użytkownicy

W celu uzyskania bardziej szczeógłowej informacji o poszczególnych plikach control zobacz na stronę manuala poświęconą modułowi wymienionemu jako "Używany przez".

3.2. Relay'owanie poczty

3.2.1. Wstęp

Czym jest relay'owanie? Ma ono miejsce wówczas gdy MTA przyjmuje wiadomość poprzez SMTP która nie została wysłana do lokalnego odbiorcy, ani nie pochodzi od lokalnego nadawcy.

W dniach gdy nie było jeszcze spamu, MTA zazwyczaj były skonfigurowane jako open relays (zezwalające na relay'owanie poczty): serwery które akceptowały pocztę od każdego, dla każdego.

Obecnie większość MTA jest skonfigurowana by kompletnie zakazywać relay'owania, lub by pozwalać jedynie zaufanym użytkownikom i systemom używania ich jako serwera przekacującego pocztę dalej.

Chris Johnson napisał bardzo dobry dokument na ten temat dla użytkowników qmail'a. Zachęcam cię do zajrzenia na: http://www.palomine.net/qmail/relaying.html.

3.2.2. Wyłączanie relay'owania.

Jeśli będziesz instalował qmail'a stosując się do oficjalnych zaleceń relay'owanie będzie wyłączone. Osiągamy to poprzez stworzenie pliku /var/qmail/control/rcpthosts z domenami wymienionymi w locals i virtualdomains (hosty lokalne). Nazwa pliku rcpthosts wywodzi się z polecenia SMTP RCPT (recipient). W trakcie sesji SMTP RCPT jest używane by określić adres odbiorcy wiadomości. rcpthosts zatem zawiera poprawne nazwy hostów które mogą wystąpić po poleceniu RCPT.

3.2.3. Zezwolenie na selektywne relay'owanie

Większość pojedyńczych użytkowników i małych grup roboczych może wyłączyć relay'owanie całkowicie. Jednak jeśli musisz obsługiwać rozproszoną społeczność użytkowników będziesz potrzebował znaleźć sposób by umożliwić swym i tylko swym użytkownikom na wykorzystywanie twego systemu jako relay. Można to osiągnąć poprzez wykorzystanie tcpserver'a do ustawienia zmiennej środowiskowej RELAYCLIENT, która każe qmail-smtpd by ignorował plik rcpthosts.

Jeśli będziesz kierował się poniższymi wskazówkami wybiórcze relay'owanie będzie domyślnie włączone. By umożliwić hostowi korzystanie z twego hosta jako relay'a dodaj wpis do /etc/tcp.smtp w stylu:

    IP address of client:allow,RELAYCLIENT=""

I następnie przebuduj bazę danych SMTP poprzez wykonanie:

    qmailctl cdb

lub:

    tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp
    chmod 644 /etc/tcp.smtp*

Jeśli kierowałeś się oficjalnymi wskazówkami Chris Johnson napisał kolejny niezły artykuł o tym jak skonfigurować qmail'a by zezwalał na selektywne relay'owanie. Zobacz http://www.palomine.net/qmail/selectiverelay.html.

3.3. Hosty o kilku nazwach

Jeśli twój system ma kilka nazw, np. wszystkie adresy postaci user@host1.example.com mogą być także zapisane jako user@example.com lub user@mail.example.com wówczas należy poinformować qmail'a, że wszystkie te nazwy powinny być traktowane jako lokalne.

W tym celu dodaj te nazwy do dwóch plików:

Wyślij do qmail-send sygnał HUP by skłonić go do ponownego przeczytania locals. Jeśli masz skrypt qmailctl, możesz zrobić:

    qmailctl reload

3.4. Domeny wirtualne

Wirtualne domeny są podobne do hostów o kilku nazwach o których mówiliśmy w poprzedniej sekcji. Jednak istnieje kilka istotnych różnic. Po pierwsze jeśli host example.net obsługuje domenę wirtualną virtual.example.com zwykle nie jest prawdą, że wiadomości wysyłane do joe@example.net zostaną dostarczone do tej samej skrzynki pocztowej co listy słane do joe@virtual.example.com. Każda domena wirtualna traktowana jest oddzielnie.

W qmail'u domeny wirtualne konfigurowane są w pliku virtualdomains, który składa się z linii postaci:

    user@domain:prepend

qmail konwertuje user@domain na prepend-user@domain i traktuje wynik tak jakby domain była lokalna. Składnik user@ jest opcjonalny. Jeśli brakuje go, wówczas linia ta dotyczy wszystkich adresów @domain.

Wracając do przykładowego scenariusza opisanego powyżej, jeśli administrator poczty w example.net chce stworzyć domenę wirtualną virtual.example.com kontrolowaną przez użytkownika o nazwie john, wówczas dodaje następującą linię do pliku virtualdomains:

    virtual.example.com:john

Po otrzymaniu wiadomości adresowanej do joe@virtual.example.com qmail zmieni adres odbiorcy na john-joe@virtual.example.com i dostarczy ją lokalnie. Sprawdź rozdział .qmail oraz podrozdział Adresy rozszerzone w celu uzyskania większej ilości informacji o tym jak użytkownik john może zarządzać swoją wirtualną domeną.

Podobnie jak z hostami o kilku nazwach wszystkie domeny wirtualne muszą być umieszczone w rcpthosts po to by qmail-smtpd wiedział, że ma akceptować wiadomości adresowane do nich. Różnicą jest to, że nie należy ich dodawać do pliku locals.

Po zmianie virtualdomains, wyślij sygnał (hangup) HUP by qmail przeczytał ponownie ten plik. Jeśli masz qmailctl, możesz zrobić:

    qmailctl reload

Nie zapomnij by dodawać domeny wirtualne także do rcpthosts.


Uwaga: Na serwerze DNS należy zdefiniować odpowiednie rekordy MX (mail exchanger) tak by listy kierowane do domen wirtualnych trafiały do odpowiedniego serwera poczty. Zadanie to należy do administratora serwera nazw i wybiega poza zakres tego dokumentu.

3.5. Aliasy

Działanie aliasów w qmail'u w naturalny sposób wynika ze sposobu w jaki dostarcza on wiadomości lokalne. qmail-local próbuje dostarczyć wiadomość adresowaną do localpart@host do lokalnego użytkownika o nazwie localpart Jeśli użytkownik taki nie istnieje wiadomość jest dostarczana do użytkownika alias. Jest to pseudo-użytkownik zdefiniowany we wszystkich systemach na których działa qmail. Jego katalogiem domowym jest /var/qmail/alias.

Na przykład jeśli chcesz stworzyć alias dla nazwy info@example.com, który będzie kierował wiadomości do użytkownika o nazwie tom napisz jako root:

    echo \&tom > /var/qmail/alias/.qmail-info

Rozdział .qmail opisuje jak tworzyć pliki .qmail definiujące aliasy i co robić z wiadomościami słanymi na do nich.

Dodatek Błędy popełniane przez początkujących opisuje kilka problematycznych sytuacji w tym m. in. uzycie aliasów zawierających duże litery, czy kropki ('.') a strona man dot-qmail dokładnie opisuje użycie plików .qmail.

Zauważ, że sposób w jaki alias'y zostały zaimplementowane w qmail'u alias nigdy nie jest w stanie przeszkodzić w dostarczaniu poczty użytkownikowi o tej samej nazwie. Przykładowo jeśli istnieje użytkownik rachel ~alias/.qmail-rachel nie zostanie nigdy użyty.

Pakiet fastforward umożliwia zastosowanie alternatywnego sposobu dostarczania poczty, w którym wszystkie aliasy są zdefiniowane w jednym pliku kompatybilnym z Sendmailow'a bazą aliasów.

Następny rozdział qmail-users opisuje inny mechanizm którego można użyc w celu implementacji aliasów.

3.6. qmail-users

qmail-users jest sposobem ustalania adresów dla użytkowników. Pliki konfiguracyjne znajdują się w /var/qmail/users. Plik ten jest tabelą przypisań. Istnieją dwa rodzaje przypisań: proste i złożone.


Uwaga: /var/qmail/users składa się z serii przypisań, jedno w linii, zakończonych przez linię zawierającą pojedyńczą kropkę (.). Jeśli tworzysz przypisanie ręcznie nie zapomnij o linii zawierającej kropkę.

3.6.1. Proste przypisania

Proste przypisanie wygląda jak:

=address:user:uid:gid:directory:dash:extension:

Powoduje ono, że wiadomość nadesłana na adres address będzie dostarczona dla użytkownika user o określonym uid i gid tak jak to określono w pliku directory/.qmaildashextension

3.6.2. Złożone przypisania

Złożone przypisanie wygląda tak:

+prefix:user:uid:gid:directory:dash:prepend:

Oznacza ono, że poczta otrzymana na adres postaci prefixrest zostanie dostarczona dla użytkownika user o określonym uid i gid, a plik directory/.qmaildashprependrest określi jak powinna być dostarczona.

3.6.3. Programy qmail-user

qmail-user zawiera dwa pomocnicze programy: qmail-newu i qmail-pw2u.

qmail-newu przetwarza plik przypisania i generuje plik bazy danych (CDB) o nazwie cdb w /var/qmail/users. CDB jest formatem binarnym, który jest łatwo dostępny dla qmail-lspawn nawet jeśli plik ten zawiera tysiące przypisań.

qmail-pw2u konwertuje systemową bazę danych o użytkownikach /etc/passwd w serię plików przypisań. qmail-pw2u używa kilku plików na podstawie których modyfikuje sposób konwersji.


Uwaga: Jeśli używasz qmail-pw2u nie zapomnij uruchomić qmail-pw2u i qmail-newu gdy dodajesz, usuwasz, zmieniasz UID lub GID użytkownika. Zwykle będzie to wygladało tak:
    qmail-pw2u </etc/passwd >/var/qmail/users/assign
    qmail-newu

3.7. Walka ze spamem.

Chris Hardie napisał dobre Anti-Spam HOWTO. Można je znaleźć na http://www.summersault.com/chris/techno/qmail/qmail-antispam.html.

3.8. Wirusy

Jason Haar napisał Qmail-Scanner, program przeszukujący maile w poszukiwaniu wirusów dla qmail'a. Zob. http://qmail-scanner.sourceforge.net/ by dowiedzieć się więcej.

Qmail-Scanner posiada wbudowany prosty skaner, jednak do poważniejszych zastosowań należy użyć oddzielnego skanera albo jednego z komercyjnych albo darmowego Tomasza Kojma Clam Antivirus scanner, dostępnego pod adresem http://clamav.elektrapro.com/.


4. Używanie qmail'a

Ten rozdział opisuje używanie qmail'a przez zwykłego użytkownika. Jeśli odbierasz lub wysyłasz poczte za pośrednictwem qmail'a znajdziesz tu pożyteczne informacje.

4.1. Pliki .qmail

Dostarczanie poczty jest zwykle kontrolowane przez jeden lub więcej plików ".qmail" w katalogu domowym użytkownika. Są to pliki z nazwami rozpoczynającymi sie na .qmail. Strona man dot-qmail opisuje zastosowanie plików .qmail.

Pliki te składają się z poleceń określających jak poczta ma być dostarczona. Jedno polecenie na linię. Pierwsze znak w linii oznacza typ dostarczania poczty jaki ma nastąpić:

Znak Typ Dostarczania Wartość
# żaden (komentarz) ignorowana
| program komenda do uruchomienia przez shell
/ lub . mbox (jeśli ostatni znak nie jest /) ścieżka do mbox (razem z / lub .)
/ lub . maildir (jeśli ostatni znak jest /) ścieżka do maildir (razem z / lub .)
& forward adres gdzie ma być przesłana wiadomość
litera lub liczba forward adres gdzie ma być przesłana wiadomość razem z pierwszym znakiem

4.1.1. dostarczanie poczty poprzez inny program

Gdy qmail napotyka instrukcję nakazującą uruchomienie programu, uruchamia on shell (/bin/sh) w celu wykonania komendy i kieruje nadchodzącą wiadomość na standardowe wejście uruchamianego programu. Strona man qmail-command dokumentuje szczegóły tego procesu.

Opcja uruchomienia programu stwarza wiele możliwości i może być użyta do zaimplementowania wielu zastosowań takich jak filtrowanie wiadomości, automatyczne odpowiadanie na wiadomości oraz ich dostarczanie poprzez inne programy takie jak procmail.

np.:

    |preline /usr/ucb/vacation djb

Powoduje, ze qmail uruchamia preline, które dostaje /usr/ucb/vacation i djb jako argumenty oraz kopie wiadomości na wejściu standardowym.

4.1.2. dostarczanie poczty do skrzynki mbox

"mbox" oznacza standardowy format skrzynki pocztowej w systemach unix'owych, w którym wiadomości przechowywane są w pojedyńczym pliku. Każda wiadomość zaczyna sie od linii "From ". Wygląda ona jak pole nagłówka, ale nim nie jest: jest to po prostu coś co program rozsyłający pocztę dodaje aby programy odczytujące ją były w stanie zorientować się od którego miejsca zaczyna się nowy list.

np.:

    ./Mailbox

Spowoduje to dołączanie nowych wiadomości do pliku $HOME/Mailbox. Każda z nich będzie zaczynała się od linii "From ". Skrzynka pocztowa typu mbox często wygląda podobnie do:

    From user1@example.net Thu May 13 18:34:50 1999
    Received: (qmail 1287205 invoked from network); 13 May 1999 18:34:49 -0000
    From: user1@example.net
    To: user2@example.com
    Subject: hey

    What's up?

Pierwsza linia została dodana przez qmail'a po odebraniu wiadomości.

4.1.3. dostarczanie poczty do skrzynki maildir

"maildir" jest formatem skrzynki pocztowej stworzonym przez Dan'a Bernstein'a w celu wyeliminowania pewnych niedogodności związanych ze standardowym typem skrzynki pocztowej jakim jest mbox. Skrzynka maildir jest katalogiem, w którego skład wchodzą trzy podkatalogi new, cur i tmp. Każda wiadomość w skrzynce jest oddzielnym plikiem w jednym z podkatalogów. W zależności od jej statusu znajduje się ona w podkatalogu: new jeśli jest wiadomością jeszcze nieprzeczytaną, cur jeśli jest wiadomością przeczytaną i tmp jeśli jest wiadomością która jest właśnie dostarczana. Strona podręcznika maildir dokładnie opisuje format maildir.

Jedną z korzyści posługiwania się tym formatem skrzynki jest to, iż mimo że nie używa się tutaj zajmowania plików w celu zapobiegnięcia jednoczesnej zmianie tej samej wiadomości poprzez kilka programów jest to format wiarygodny. Oznacza to, że skrzynki postaci maildir mogą być bezpiecznie używane w systemach plików zamontowanych poprzez NFS.

np.:

    ./Maildir/

Powoduje, ze wiadomości będą zapisywane w $HOME/Maildir w formacie maildir skrzynki pocztowej.


Uwaga: qmail-local dostarcza pocztę do skrzynek w formacie maildir ale nie potrafi ich utworzyć. Do tego celu służy program maildirmake zawarty w pakiecie qmail'a. np.: "maildirmake ~/Maildir". Upewnij się żeby uruchomić maildirmake jako właściciel katalogu maildir nie jako root. Być może polecenie useradd lub adduser w twym systemie wspiera katalog "skeleton" np. /etc/skel wówczas mógłbyś stworzyć maildir który będzie skopiowany dla wszystkich nowych userów.

4.1.4. forwardowanie poczty

Forward powoduje, że wiadomości są przesyłane na określony adres. Adres określony w pliku .qmail nie może zawierać komentarza, ani dodatkowych spacji.

Oto przykłady błednych wpisów:

    &<user@example.com>
    & user@example.com
    &Joe User <user@example.com>

A to przykłady poprawnych:

    &user@example.com
    user@example.com
    &user

Pierwsze dwa przykłady spowodują, że wiadomość zostanie dostarczona do user@example.com. Ostatni wyśle pocztę do lokalnego użytkownika user.

4.1.5. Rozszerzone adresy

qmail umożliwia rozszerzanie adresów kontrolowanych przez użytkownika. Użytkownik username@hostname.domain może otrzymywać także pocztę dla username-extension@hostname.domain. W dalszej części tego podrozdziału nie będę dodawał części adresu "@hostname.domain" ponieważ mówimy o działaniach odnoszących się do hosta lokalnego.

Instrukcje dostarczenia poczty dla username są w ~username/.qmail a dla username-extension znajdują się w ~username/.qmail-extension.

Przykładowo dave-lwq@sparge.example.com jest kontrolowane przez ~dave/.qmail-lwq na hoście sparge.

Rozszerzenia mogą mieć kilka pól, np. dave-list-qmail kontrolowane przez ~dave/.qmail-list-qmail. W tym przykładzie dave-list-qmail jest adresem listy dyskusyjnej o qmail'u, zaś ~dave/.qmail-list-qmail odpowiada za umieszczenie wiadomości z grupy dyskusyjnej w oddzielnej skrzynce pocztowej.

Zakres działania plików .qmail może być zwiększany przez użycie -default. Zatem dave-list-qmail może być także obsługiwany poprzez ~dave/.qmail-list-default. Umożliwia to plik .qmail obsługujący wszystkie adresy postaci dave-list-cokolwiek. Zauważ, że dave-list nie będzie obsłużony przez ~dave/.qmail-list-default ponieważ brakuje w nim "-" po "list".

qmail używa najlepszego pasującego wzorca. Przykładowo jeśli nadchodzi wiadomość adresowana do dave-list-qmail użyje on pierwszego z poniższych adresów:

    .qmail-list-qmail
    .qmail-list-default
    .qmail-default

Jeśli żaden z plików .qmail nie zostaje znaleziony dostarczanie nie udało się i wiadomość zostaje odesłana do nadawcy.

4.2. Wysyłanie wiadomości

Użytkownicy poczty zwykle nie używają MTA bezpośrednio do wysyłania listów. Zwykle wiadomości są pisane i wysyłane przy użyciu MUA (programu do komponowania wiadomości) takiego jak pine lub mutt, który sam wywołuje MTA w celu wysłania listu. Proces dostarczania listu do MTA nazywa się umieszczaniem (ang. injection).

Istnieją dwa sposoby umieszczenia wiadomości w MTA: poprzez SMTP albo przy użyciu programu dostarczonego przez MTA w tym celu.

4.2.1. SMTP

MUA może otworzyć połączenie poprzez protokół TCP do standardowego portu SMTP na lokalnym hoście lub na dedykowanym serwerze. Port ten nosi numer 25. Następnie MUA i MTA rozpoczynają dialog, którego efektem jest:

SMTP nie ma mechanizmu autentykacji, zatem ani nazwa użytkownika, ani hasło nie są wymagane w celu przesłania wiadomości. Jednakże wiele MUA odmawia przyjęcia wiadomości, które nie są wysyłane do lub od lokalnego użytkownika. Jeśli prawidłowa wiadomość jest odrzucana zwykle ma to związek z restrykcjami dotyczącymi relayowania (przesyłania) poczty. Zobacz rozdział Relay'owanie poczty w celu uzyskania większej ilości informacji o konfigurowaniu relayowania.

4.2.2. /var/qmail/bin/sendmail

Przez wiele lat Sendmail był jedynym MTA w świecie UNIX'ów. Był on tak wszechobecny, że wielu programistów utożsamiało nazwę Sendmail z MTA. W efekcie mechanizm umieszczania wiadomości w MTA zastosowany w Sendmail'u stał się standardem. qmail i inne MTA używają programu o nazwie sendmail który działa tak samo jak prawdziwy sendmail w trakcie umieszczania wiadomości w MTA.

Program sendmail używany przez qmail'a znajduje się w /var/qmail/bin/sendmail. Zastępuje on Sendmail'a na systemach qmail'owych, który zwykle znajduje się w:

W systemie z zainstalowanym qmail'em polecenie "ls -l ścieżka-do-sendmaila" powinno pokazać, że sendmail jest symbolicznym linkiem do /var/qmail/bin/sendmail

  $ ls -l /usr/lib/sendmail
  lrwxrwxrwx   1 root     root           29 Feb 19 11:04 /usr/lib/sendmail -> /var/qmail/bin/sendmail

4.2.3. qmail-inject

Oprócz emulowania sposobu w jaki sendmail umieszcza pocztę qmail ma swoj własny program służący do tego celu: qmail-inject. Tak naprawdę to sendmail jest po prostu nakładką na qmail-inject.

sendmail jest standardem zatem jest znacznie szerzej rozpowszechniony. qmail-inject działa tylko na systemach z zainstalowanym qmail'em, mimo to wysyłanie poczty przebiega podobnie.

Przykładowo w celu wysłania pustej wiadomości do joe@example.com:

 echo To: joe@example.com | /var/qmail/bin/qmail-inject

4.3. Zmienne środowiskowe

Niektóre podprogramy qmail'a ustawiają lub używają zmiennych środowiskowych. Poniższa tabela przedstawia te zmienne i opisuje ich zastosowanie.

Nazwa Strona man Ustaw lub użyj Zastosowanie
DATABYTES qmail-smtpd użyj zastępuje control/databytes
DEFAULT qmail-command ustaw część adresu pasującą do "-default" w nazwie pliku .qmail
DTLINE qmail-command ustaw pole nagłówka Delivered-To
EXT qmail-command ustaw rozszerzenie adresu
EXT2 qmail-command ustaw część rozszerzenia EXT następującą po pierwszym "-"
EXT3 qmail-command ustaw część rozszerzenia EXT następującą po drugim "-"
EXT4 qmail-command ustaw część rozszerzenia EXT następującą po trzecim "-"
HOME qmail-command ustaw katalog domowy użytkownika
HOST qmail-command ustaw domenową część adresu odbiorcy
HOST2 qmail-command ustaw część HOST poprzedzającą ostatnią kropkę
HOST3 qmail-command ustaw część HOST poprzedzającą przedostatnią kropkę
HOST4 qmail-command ustaw część HOST poprzedzającą przed-przedostatnią kropkę
LOCAL qmail-command ustaw lokalna część adresu odbiorcy
LOGNAME qmail-inject użyj nazwy użytkownika z pola From nagłówka (4)
MAILHOST qmail-inject użyj nazwy hosta z pola From nagłówka (2)
MAILNAME qmail-inject użyj nazwiska osoby z pola From nagłówka (2)
MAILUSER qmail-inject użyj nazwy użytkownika z pola From nagłówka (2)
NAME qmail-inject użyj nazwy osoby z pola From nagłówka (3)
NEWSENDER qmail-command ustaw adres użytkownika który forwarduje pocztę (zob. "man dot-qmail")
QMAILDEFAULTDOMAIN qmail-inject użyj zastępuje control/defaultdomain
QMAILDEFAULTHOST qmail-inject użyj zastępuje control/defaulthost
QMAILHOST qmail-inject użyj nazwy hosta z pola From nagłówka (1)
QMAILIDHOST qmail-inject użyj zastępuje control/idhost
QMAILINJECT qmail-inject użyj różnych opcji (zob. następna tabela)
QMAILMFTFILE qmail-inject użyj plik zawierający spis adresów pocztowych w celu wygenerowania Mail-Followup-To
QMAILNAME qmail-inject użyj nazwiska z pola From nagłówka (1)
QMAILPLUSDOMAIN qmail-inject użyj zastępuje control/plusdomain
QMAILSHOST qmail-inject użyj nazwy hosta w adresie nadawcy na kopercie
QMAILSUSER qmail-inject użyj nazwy użytkownika w adresie nadawcy na kopercie
QMAILUSER qmail-inject użyj nazwy użytkownika z pola From nagłówka (1)
RECIPIENT qmail-command ustaw adres odbiorcy na kopercie
RELAYCLIENT qmail-smtpd użyj zignoruj control/rcpthosts i dopisz wartość do adresu odbiorcy
RPLINE qmail-command ustaw pole nagłówka Return-Path
SENDER qmail-command ustaw adres nadawcy na kopercie
UFLINE qmail-command ustaw linię From w formacie UUCP
USER qmail-command ustaw bieżącego użytkownika
USER qmail-inject użyj nazwy użytkownika z pola From nagłówka (3)
Parametry QMAILINJECT
Litera Znaczenie
c używaj stylu address-comment w polu From
s zignoruj pole Return-Path
f skasuj pole From
i skasuj pole Message-ID
r zastosuj VERP dla danego użytkownika
m zastosuj VERP dla danej wiadomości

5. Zaawansowana tematyka

5.1. procmail

procmail jest popularnym MDA - programem dostarczającym pocztę. Funkcją spełnianą przez MDA jest przyjęcie wiadomości od MTA dla konkretnego użytkownika lub skrzynki pocztowej, a następnie dostarczenie jej zgodnie z potrzebami użytkownika. procmail może być używany w celu filtrowania wiadomości na podstawie różnych pól nagłówka lub treści wiadomości. Na przykład wiadomości od konkretnej osoby mogą być dostarczane do specjalnej skrzynki pocztowej.

Chcąc używać procmail'a z qmail'em należy pamiętać o kilku rzeczach. Po pierwsze, procmail zwykle jest skompilowany by pracować ze skrzynką pocztową w formacie mbox w /var/spool/mail. Możesz rekompilować procmail'a tak by zmienić to na $HOME lub poinstruować użytkowników by podawali procmail'owi faktyczny adres skrzynki. Jeśli nie spatchujesz go by dostarczał do $HOME, będzie używał /var/spool/mail dla plików tymczasowych.

Innym problemem jest to, że procmail nie rozumie co znaczą poszczególne kody błędów zwracane przez qmail-command. procmail używa standardowych unix'owych kodów błędów: zero oznacza sukces, zaś inna wartość błąd, którego powód wskazywany jest przez /usr/include/sys/errno.h. qmail-command używa pewnych wartości niezerowych w celu powiadomienia o błędach fatalnych, w innym przypadku sygnalizuje błąd tymczasowy. Można używać prostego skryptu shellowego w celu tłumaczenia kodów qmail-command. Taki skrypt pojawił się na liście o qmail'u i można go znaleźć w archiwach listy http://www.ornl.gov/its/archives/mailing-lists/qmail/1998/04/msg00487.htm l

Ponadto starsze wersje procmail'a (przed 3.14) nie współpracują ze skrzynkami pocztowymi w formacie maildir. Najlepszym rozwiązaniem jest używać jego najnowszej wersji. Innym podejściem jest safecat, program który dostaje na wejściu wiadomość i wpisuje ją do konkretnej skrzynki pocztowej w formacie maildir. W takim przypadku należy skłonić procmaila do korzystania z safecat przy użyciu odpowiednich poleceń. Albo zrezygnować z procmail'a i używać maildrop.

Wreszcie procmail oczekuje, że wiadomość którą otrzyma będzie w formacie mailbox. qmail dostarczając wiadomość w zwykłym trybie załącza jedynie treść wiadomości bez pola "From". Aby dostosować wiadomość do formatu akceptowanego przez procmail'a można użyc polecenia preline.

Przykładowo powiedzmy, że użytkownik "dave" chce aby jego poczta była przetwarzana przez procmail'a. Administrator systemu skompilował procmail'a by dostarczał wiadomości do $HOME oraz udostępnił wrapper'a kodów błędów /usr/local/bin/qmail-procmail. Plik .qmail "dave'a" powinien zatem mieć postać:

|/var/qmail/bin/preline /usr/local/bin/qmail-procmail dave

5.2. Serwery POP i IMAP

qmail zawiera serwer POP o nazwie qmail-pop3d, jednak nie jest on instalowany automatycznie w trakcie instalacji qmail'a. Możesz także użyć innego serwer'a POP lub IMPA jednak należy zwrócić uwagę, że były one pisane tak by współpracowały z Sendmailem, zatem dostosowanie ich do pracy z qmail'em będzie wymagało włożenia trochę wysiłku.

5.2.1. qmail-pop3d

Jest to serwer POP dostarczany razem z qmail'em. qmail-pop3d to dobry serwer i używany jest w wielu miejscach gdzie używa się qmail'a. Ma budowę modularną. Umożliwia różne schematy autentykacji poprzez różne moduły.


Uwaga: qmail-pop3d pracuje jedynie ze skrzynkami pocztowymi w formacie maildir zatem jeśli masz użytkowników logujących sie na serwer i używających MUA lokalnie, muszą one pracować ze skrzynkami w formacie maildir. Jeśli wszyscy użytkownicy ściągają pocztę poprzez POP nie jest to problemem.

5.2.1.1. Architektura qmail-pop3d

Serwer qmail-pop3d składa się z modułów:

Zwykle qmail-popup jest uruchamiany poprzez inetd lub tcpserver, nasłuchuje na porcie 110, porcie POP3. W momencie nawiązania połączenia prosi o podanie nazwy użytkownika oraz hasła. Następnie wywołuje checkpassword, które zajmuje się weryfikacją użytkownika i hasła i wywołuje qmail-pop3d jeśli autentykacja zakończyła się pomyślnie.

5.2.1.2. Instalacja qmail-pop3d

1. Zainstaluj i przetestuj qmail'a. Jeśli chcesz by wszyscy użytkownicy mogli ściągać pocztę poprzez POP upewnij się, że defaultdelivery jest ustawione do ./Maildir/. Jeśli zainstalowałeś skrypt uruchamiający qmail'a z rozdziału "Instalacja" jest to konfigurowane w control/defaultdelivery. Jeśli nie najprawdopodobniej w /var/qmail/rc w linij uruchamiającej qmail-start.

2. Ściągnij program checkpassword z http://www.qmail.org/top.html#checkpassword. Dobrym wyborem jest także standardowy checkpassword http://cr.yp.to/checkpwd.html jeśli nie potrzebujesz wersji bardziej skomplikowanej.

3. Skompiluj i zainstaluj checkpassword'a zgodnie z instrukcją. Sprawdź czy zainstalował się jako /bin/checkpassword.

4. Utwórz skrypt /var/qmail/supervise/qmail-pop3d/run:

    #!/bin/sh
    exec /usr/local/bin/softlimit -m 2000000 \
        /usr/local/bin/tcpserver -v -R -H -l 0 0 110 /var/qmail/bin/qmail-popup \
            FQDN /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir 2>&1

gdzie FQDN jst pełną nazwą domeny serwera POP, który konfigurujesz np., pop.example.net.


Uwaga: Może zaistnieć potrzeba zwiększenia limitu pamięci określonego poleceniem softlimit w zależności od twego systemu operacyjnego i sprzętu. Jeśli nie będzie można połączyć się z portem 110 lub też dostrzeżesz inne dziwne błędy możesz spróbować zwiększyć go do 3000000 lub 5000000.

5. Utwórz skrypt /var/qmail/supervise/qmail-pop3d/log/run:

    #!/bin/sh
    exec /usr/local/bin/setuidgid qmaill /usr/local/bin/multilog t \
        /var/log/qmail/pop3d

6. Utwórz katalog zawierający logi, ustaw uprawnienia dla skryptu run i zlinkuj tą usługę z /service:

    chmod +t /var/qmail/supervise/qmail-pop3d   # if daemontools < 0.75
    mkdir /var/log/qmail/pop3d
    chown qmaill /var/log/qmail/pop3d
    chmod 755 /var/qmail/supervise/qmail-pop3d/run
    chmod 755 /var/qmail/supervise/qmail-pop3d/log/run
    ln -s /var/qmail/supervise/qmail-pop3d /service

7. Dodaj poniższe do skryptu qmailctl do sekcji "start" :

    if svok /service/qmail-pop3d ; then
      svc -u /service/qmail-pop3d /service/qmail-pop3d/log
    else
      echo qmail-pop3d supervise not running
    fi

8. Dodaj poniższe do skryptu qmailctl do sekcji "stop" :

    echo "  qmail-pop3d"
    svc -d /service/qmail-pop3d /service/qmail-pop3d/log

9. Dodaj poniższe do skryptu qmailctl do sekcji "stat" :

    svstat /service/qmail-pop3d
    svstat /service/qmail-pop3d/log

10. Dodaj poniższe do skryptu qmailctl do sekcji "pause" :

    echo "Pausing qmail-pop3d"
    svc -p /service/qmail-pop3d

11. Dodaj poniższe do skryptu qmailctl do sekcji "cont" :

    echo "Continuing qmail-pop3d"
    svc -c /service/qmail-pop3d

12. Dodaj poniższe do skryptu qmailctl do sekcji "restart" :

    echo "* Restarting qmail-pop3d."
    svc -t /service/qmail-pop3d /service/qmail-pop3d/log

5.2.2. qpopper

Jeśli potrzebujesz demona POP, który pracuje ze skrzynkami w formacie mbox możesz użyć qpopper'a z Qualcomm'u. Qpopper jest dostępny z http://www.eudora.com/qpopper_general/.

5.2.3. SolidPOP

Serwer SolidPOP obsługuje zarówno formaty maildir jak i mbox. Można go ściągnąć z http://solidpop3d.pld.org.pl/

5.2.4. Binc IMAP

Andreas Hanssen napisał serwer Binc IMAP. Binc IMAP używa tego samego systemu autentykacji (checkpassword) co qmail-pop3d, zatem dobrze współpracuje z serwerami qmail. Podobnie jak qmail-pop3d, pracuje jedynie z kontami pocztowymi w formacie Maildir. Zob: http://www.bincimap.org/.

5.2.5. Dovecot

Timo Sirainen napisał Dovecot, serwer IMAP i POP który pracuje zarówno z formatem mbox jak i maildir skrzynek pocztowych. Był projektowany z myślą o bezpieczeństwie. Można go pobrać z http://dovecot.procontrol.fi/.

5.2.6. imap-maildir

David R. Harris dopracował patch który dodaje wsparcie dla formatu maildir do serwera IMPA stworzonego przez University of Washington. Napisał także dokumentację jak go zainstalować. Zob http://www.davideous.com/imap-maildir/.

5.2.7. Courier-IMAP

Sam Varshavchik napisał serwer IMAP, który pracuje jedynie w formacie maildir. Można go ściągnąć z http://www.inter7.com/courierimap/.

5.3. Klienci POP i IMAP

5.3.1. fetchmail

fetchmail jest programem, który pobiera pocztę z serwerów POP i IMAP i przekazuje ją do dostarczenia lokalnego. Nie ma on większych problemów ze ściąganiem poczty z serwerów qmail'owych jest jednak kilka sztuczek, których zastosowanie polepszy ich współpracę.

Oto przykładowy plik .fetchmailrc dla użytkownika w systemie z qmail'em:

poll mail.example.net proto pop3 nodns
    user dsill with password flubgart is dave here
    fetchall forcecr

Instruuje on fetchmail'a do połączenia się z mail.example.net poprzez POP3, zalogowania się jako dsill, podania hasła flubgart, ściągnięcia wszystkich wiadomości i dostarczenia ich do dave@localhost. Polecenie forcecr powoduje, że fetchmail będzie kończył każdą linię znakiem karetki w momencie przekazywania wiadomości do qmail'a pracującego na lokalnym hoście. qmail wymaga tego.

5.3.2. getmail

getmail jest programem, który ściąga pocztę z serwera POP i dostarcza ją do skrzynki w postaci maildir. Jest to skrypt napisany w Python'ie zatem musisz zainstalować jego interpreter w celu używania getmail'a.

Jego autorem jest Charles Cazabon, a stroną domową http://www.qcc.sk.ca/~charlesc/software/getmail-3.0/.

5.4. Dostarczanie wiadomości do kilku użytkowników na raz czy dostarczanie tylko jednej na raz.

Powiedzmy, że jesteś MTA, i jeden z twoich użytkowników wysyła wiadomość do trzech osób na hostx.example.com. Jest kilka możliwości w jaki sposób dostarczyć tą wiadomość.

  1. Możesz otworzyć połącznie poprzez SMTP do hostx, wysłać wiadomość do pierwszego użytkownika, wysłać wiadomość do drugiego, do trzeciego i zamknąć połączenie.
  2. Możesz uruchomić trzy procesu, z których każdy otworzy połączenie z hostx, wyśle kopie wiadomości do jednego z użytkowników i następnie zamknie połączenie.
  3. Możesz nawiązać połączenie z hostem, wysłać kopię wiadomości zaadresowaną do wszystkich trzech użytkowników i zamknąć połączenie.

Pierwsza metoda jest wyraźnie gorsza od pozostałych. Nawet jeśli wiadomość jest mała zajmie to przynajmniej tyle samo czasu co w pozostałych metodach. A jeśli wiadomość jest długa zajmie to znacznie więcej czasu *i* wygeneruje znacznie więcej ruchu w sieci.

Zatem pomińmy pierwszą.

Druga i trzecia są bardziej interesujące.

Trzecia otwiera tylko jedno połączenie i tylko raz przesyła wiadomość. W ten sposób generowana jest mała ilość ruchu.

Druga metoda używa kilku połączeń i przesyła kilka kopii wiadomości. W ten sposób generuje dużo ruchu, ale jednocześnie traci mniej czasu na nawiązywanie połączeń zatem jest szybsza od metody trzeciej. Jest od niej także prostsza, więc także proces kodowania MTA jest łatwiejszy. Ostatnim argumentem jest to, że ponieważ każdy użytkownik dostaje własną kopię wiadomości MTA może używać VERP (opis w kolejnym rozdziale).

qmail zawsze używa metody drugiej (pojedyńczy odbiorca). Nie ma patchy które umożliwiałyby mu zaimplementowanie metody trzeciej (wielu odbiorców) - wymagałoby to wiele pracy.

Mimo, że w bardzo rzadkich przypadkach możliwe jest żeby metoda trzecia była szybsza od drugiej, to jednak prostota i VERP powodują że rozwiązanie drugie jest lepsze.

Dostarczanie poczty do pojedyńczego odbiorcy generuje większy ruch, jednak jest go mniej niż się zwykle sądzi. Większość wiadomości, które są skierowane do kilku odbiorców nie może wykorzystać z metody trzeciej, gdyż odbiorcy ci znajdują się na różnych hostach. Nawet na serwerze grup dyskusyjnych gdzie teoretycznie mógłby być sens zastosować tą metodę zyski sa niewielkie, gdyż większość ruchu w sieci generowana jest przez HTTP, natomiast SMTP zużywa jego małą część.

Przykładowo, jeśli do 10% procent łącza wykorzystywane jest na SMTP i zużycie łącza na SMTP mogłoby być zredukowane o 25 % przez zastosowanie przesyłania wiadomości do kilku odbiorców na raz, spowoduje to że SMTP będzie nadal zużywać 7,5 % łącza.

5.5. VERP

Jeśli wiadomość nie może zostać dostarczona MTA powinien zwrócić bounce do adresu zwrotnego z jej nagłówka (ERP). Wiadomość ta powinna zawierać pierwotny adres odbiorcy, powód niedostarczenia oraz informację czy problem jest chwilowy czy stały. Mimo to niektóre MTA nie robią tego poprawnie. Mogą odesłać odbitą wiadomość na podstawie pola From z nagłówka albo wiadomość odbita może nie zawierać adresu pierwotnego odbiorcy.

Dla większości wiadomości przesyłanych pomiędzy użytkownikami nie jest to wielki problem. Są oni zwykle w stanie określić dlaczego wiadomość nie doszła na podstawie zawartości wiadomości odbitej. Jednakże w przypadku list dyskusyjnych problem jest znacznie bardziej poważny. Subskrybenci przenoszą się, forwardują pocztę do swego nowego adresu. Jeśli nowy adres zacznie stwarzać problemy może okazać się że jest niemożliwe określenie który z subskrybentów ma problem jeśli wiadomość odbita zawiera tylko nowy adres.

Dave Bernstein stworzył coś o nazwie VERP (zmienny adres zwrotna). Używając VERP każda wiadomość wysłana do każdego z subskrybentów listy dyskusyjnej ma unikalny adres zwrotny. Pozwala to na łatwe zidentyfikowanie subskrybenta który ma problem ze skrzynką.

Przykładowo typowa lista nieużywająca VERP ma adres zwrotny postaci listname-owner@domain. Natomiast dla listy używającej VERP jest on taki listname-owner-subscriber=sdomain@ldomain, gdzie adres subskrybenta subscriber@sdomain zawarty jest pomiędzy "owner" i "@". ("@" w adresie subskrybenta zastąpiona jest znakiem "=").

ezmlm jest programem do obsługi list dyskusyjnych, który automatycznie obsługuje wiadomości niedostarczone. Jest on nawet w stanie zapamiętać których wiadomości użytkownik z chwilowymi problemami z pocztą nie przeczytał, tak by w przyslości mógł je znależć w archiwum.

Russell Nelson napisał program zajmujący się obsługą wiadomości niedostarczonych dla Majordomo pracującego z qmail'em jednak nie pracuje on już nad nim. Można go znaleźć pod adresem http://www.qmail.org/bounceman-0.4.shar

5.6. Rozwiązywanie problemów

5.6.1. Procesy

Prawidłowo pracująca, kompletna, minimalna instalacja qmail'a powinna zawsze mieć uruchomione poniższe cztery procesy:

W zależności od tego jakiej wersji UNIXa używasz jedna z dwóch poniższych komend powinna pokazać wszystkie te procesy i być może jeszcze inne:

    ps -ef | grep qmail
    ps waux | grep qmail

[dave@sparge dave]$ ps waux|grep qmail
dave      2222  0.0  0.8   836   348  p4 S    10:25   0:00 grep qmail
qmaild     351  0.0  1.0   840   400  ?  S N  12:43   0:00 /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 49491 -g 31314 0 smtp /var/qmail/bin/qmail-smtpd-
qmaild    2220  0.0  1.0   844   420  ?  S N  10:25   0:00 /usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 49491 -g 31314 0 smtp /var/qmail/bin/qmail-smtpd-
qmaill     365  0.0  0.8   748   344  ?  S N  12:43   0:00 splogger qmail
qmailq     368  0.0  0.7   736   292  ?  S N  12:43   0:00 qmail-clean
qmailr     367  0.0  0.6   732   272  ?  S N  12:43   0:00 qmail-rspawn
qmails     350  0.0  0.8   776   336  ?  S N  12:43   0:00 qmail-send
root       340  0.0  0.6   724   252  ?  S N  12:43   0:00 /usr/local/sbin/supervise /var/supervise/qmail-send /var/qmail/rc
root       341  0.0  0.6   724   252  ?  S N  12:43   0:00 /usr/local/sbin/supervise /var/supervise/tcpserver-qmail /usr/local/bin/tcpserver -v -x /etc/tcp.smtp
root       366  0.0  0.7   736   276  ?  S N  12:43   0:00 qmail-lspawn ./Mailbox
[dave@sparge dave]$

Jeśli w twoim systemie qmail lub qmail-smtpd pracuje pod supervise powinieneś zobaczyć te procesy także. A jeśli qmail-smtpd pracuje pod t