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 :
- manipulowania plikami/katalogami pod UNIX'em
- obsługę przeglądarki internetowej i klienta ftp
- przeczytasz uważnie ten tekst
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
- Automatyczne wykrywanie wersji unixa - nie ma potrzeby ręcznego dokonywania poprawek w plikach konfiguracyjnych
- Automatyczna konfiguracja na danym hoście
- Szybka instalacja - nie ma długiej listy pytań
1.5.2. Bezpieczeństwo
- Czytelne rozróżnianie pomiędzy adresami, plikami i programami
- Minimalizacja ilości kodu wykonywanego jako root
- Minimalizacja ilości kodu setuid
- Pieciokierunkowy podzial zaufania
- Opcjonalne logowanie nagłówków lub zawartości całych wiadomości, itd. (zob. Co to jest QUEUE_EXTRA? w załączniku E.)
1.5.3. Konstrukcja wiadomości
- Zgodność z RFC 822 i RFC 1123
- Pełna obsługa grup adresów
- Automatyczna konwersja list adresów starego typu do postaci zgodnej z RFC 822
- Polecenie sendmail'a w celu zachowania kompatybilności z programami pocztowymi jak pine, mutt
- Długość nagłówka jest ograniczona jedynie przez ilość pamięci
- Host masquerading (zob. defaulthost)
- User masquerading (zob. MAILUSER i MAILHOST)
- Automatyczne tworzenie Mail-Followup-To (zob. QMAILMFTFILE)
1.5.4. Usługi SMTP
- Zgodność z RFC 821, RFC 1123, RFC 1651, RFC 1652 i RFC 1854
- poczta transmitowana jest z wykorzystaniem wszystkich 8 bitów
- RFC 931/1413/ident/TAP callback - pomaga śledzić spammerów oraz osoby podszywające się pod innych użytkowników
- Kontrola nad relayowaniem poczty - zapobiega nieupoważnionemu przesyłaniu poczty przez osoby z zewnątrz
- Nie ma konfliktów pomiedzy kontrolą relayowania a aliasami
- Automatyczne rozpoznawanie lokalnych adresów IP
- inny timeout dla bufora input oraz output w qmail-smtpd
- Hop counting - sprawdzanie ilości pól Received w wiadomości
- Limit liczby wiadomości przesyłanych równolegle (poprzez ucspi-tcp)
- Odmowa połączenia ze znanymi serwerami spammerami (poprzez ucspi-tcp)
- Przesyłanie poczty oraz zmienianie pól nagłówka dla upoważnionych klientów
- Opcjonalne wsparcie RBL/ORBS (poprzez rblsmtpd)
1.5.5. Obsługa kolejki wiadomości oczekujących na wysłanie
- Natychmiastowa obsługa wiadomości dodanych do kolejki
- Limit wiadomości przesyłanych równolegle
- Kolejka znajduje sie w kilku katalogach - nie ma spowolnienia gdy urasta ona do dużych rozmiarów
- Wiadomości dostarczane są na podstawie harmonogramu (zob. zał. E), im starsze tym rzadziej
- Każda niedostarczona wiadomość ma swój własny harmonogram prób ponownych dostarczeń
- Bezpieczna obsługa kolejki - poczta nie jest tracona w przypadku awarii systemu
- Automatyczne sprawdzenie czy istnieje odbiorca wiadomości
- Automatyczne czyszczenie kolejki
- Przeglądanie zawartości kolejki (zob. qmail-qread)
- Dokładne statystyki dostarczeń poczty (zob. qmailanalog)
1.5.6. Maile informujące o niedostarczeniu wiadomości (bounces)
- bounces są zgodne z QSBMF - czytelne zarówno dla człowieka jak i dla maszyny
- obsług HCMSSC - niezależne od języka kody błędów zdefiniowane w RFC 1893
- bounce, który także nie może zostać dostarczony kierowany jest do postmastera
1.5.7. Routing na podstawie domen
- Dowolna liczba nazw lokalnych hostów (zob. locals)
- Dowolna liczba wirtualnych domen (zob. domeny wirtualne)
- Domain wildcards (zob. domeny wirtualne)
- Wsparcie "percent hack" (zob. percenthack)
- UUCP hook
1.5.8. Dostarczanie poczty
- Zgodność z RFC 821, RFC 974, i RFC 1123
- poczta transmitowana jest z wykorzystaniem wszystkich 8 bitów
- Transmisja jest wstrzymywana jeśli host nie odpowiada / nie chce z nami rozmawiać
- Ręczna konfiguracja routingu (artifical routing) - smarthost, localnet, mailertable (zob. smtproutes)
- oddzielny timeout dla bufora input i output w qmail-smtpd
- pasywna kolejka SMTP - wykorzystywana przez SLIP/PPP (poprzez serialmail)
- wparcie AutoTURN (poprzez serialmail)
1.5.9. Forwarding poczty i grupy dyskusyjne
- Kompatybilność z .forward Sendmail'a (poprzez dot-forward)
- Hashed forwarding databases (poprzez fastforward)
- Kompatybilność z /etc/aliases Sendmail'a (poprzez fastforward))
- Adresy rozszerzone (poprzez .qmail-default)
- Właściciele grup dyskusyjnych - automatycznie przekierowuje bounces i wiadomości wakacyjne
- VERP - automatyczna identyfikacja odbiorcy w przypadku bounces wiadomości z grup dyskusyjnych
- Delivered-To - zapobieganie możliwości zapętlenia się poczty, także pomiędzy różnymi hostami
1.5.10. Dostarczenia lokalne
- Hierarchia adresów kontrolowana przez użytkownika -- fred kontroluje adresy postaci fred-cokolwiek
- Wiarygodne dostarczanie pod NFS (zob. maildir)
- Użytkownik decyduje który program dostarcza pocztę: procmail itp. (zob. qmail-command)
- Opcjonalna informacja o nadejściu nowej poczty (zob. qbiff)
- Możliwość wysyłania listu do nadawcy informującego go o poprawnym dostarczeniu jego wiadomości (zob. qreceipt)
- Warunkowe filtrowanie (zob. condredirect and bouncesaying)
1.5.11. Usługa POP3
- Zgodność z RFC 1939
- Obsługa UIDL
- Obsługa TOP
- APOP hook
- Modularne sprawdzanie haseł (poprzez checkpassword)
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.
- dot-forward--dodatek umożliwiający kompatybilność z Sendmail'owym .forward
- fastforward--umożliwia kompatybilność z Sendmail'ową bazą danych aliasów
- ucspi-tcp--zastępuje inetd
- daemontools--zbiór narzędzi obsługujących demony i logowanie
- qmailanalog--narzędzia do analizy logów qmail'a
- serialmail--narzędzia do obsługi poczty poprzez wolne łącza
- mess822--narzędzia do analizy Internetowych wiadomości pocztowych
- ezmlm--program zajmjący się obsługą list pocztowych pod 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ą :
- FAQ: Najczęściej Zadawane Pytania, i odpowiedzi
- INSTALL*: dokumentacja procesu instalacji
- PIC.*: Opis w jaki sposób qmail wykonuje pewne zadania. Zajrzyj do dodatku Architektura w celu uzyskania większej ilości informacji
- różne inne dokumenty związane z instalacją
Te dokumentu są także dostępne on-line:
1.10.3. Dokumenty FAQ
Oto dwa oficjalne FAQ (Najczęściej Zadawane Pytania, i odpowiedzi):
- /var/qmail/doc/FAQ, wersja tekstowa
- FAQ jako strona html, http://cr.yp.to/qmail/faq.html.
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
- http://cr.yp.to/qmail.html: oficjalna strona qmail'a.
- http://www.qmail.org: nieoficjalna strona qmail'a. Zawiera wiele informacji o dodatkach i patchach, a także linki do wielu innych dobrych stron o qmail'u.
- http://www.flounder.net/qmail/qmail-howto.html: HOWTO napisane przez Adam'a McKenne'a
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:
- listname@list.cr.yp.to: adres listy. Wiadomości przysyłane tutaj są rozsyłane do wszystkich jej członków. Proszę nie przysyłać próśb o zapisanie sie, czy o wypisanie się na ten adres. Nie zadziałają, a mogą zdenerwować uczestników.
- listname-help@list.cr.yp.to: adres pod którym można uzyskać pomoc. Po wysłaniu maila na ten adres otrzymasz spis poleceń i ogólną informację jak ich używać.
- listname-subscribe: wyślij pusty mail tutaj w celu zapisania się na listę.
- listname-unsubscribe: wyślij pusty mail tutaj w cely wypisania się z listy.
W celu podania innego adresu na który ma przychodzić korespondencja z listy dyskusyjnej, przykładowo na joe@example.com, wyślij list postaci:
- listname-subscribe-joe=example.com@list.cr.yp.to.
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:
- Co zrobiłeś? Jaka jest twoja konfiguracja? Załącz wynik polecenia qmail-showctl jeśli nie jesteś pewien co jest istotne. Jakie zadanie próbowałeś wykonać? Jeśli to świeża instalacja qmail'a opisz jak go instalowałeś.
- Jakiego wyniku oczekiwałeś? Co się miało wydarzyć? Nie oczekuj, że każdy domyśli się.
- Co się wydarzyło? Opisz rezultat. Załącz fragmenty logów i kopie wiadomości wraz z nagłówkami.
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 :
- Jeśli jest to możliwe zainstaluj go na "próbnym" komputerze. Nawet jeśli popełnisz błędy nie zaowocuje to utratą poczty, czy uniemożliwieniem korzystania z poczty dla twoich użytkowników.
- Jeśli nie masz wolnego komputera, a poczta w twoim systemie dostarczana jest przy użyciu Sendmail'a, smail'a czy innego MTA możesz zainstalować i przetestować poszczególne części qmail'a bez zakłócania pracy istniejącego oprogramowania.
- Jeśli zmieniasz oprogramowanie obługujące pocztę w twym systemie z jakiegoś innego MTA na qmail'a, nawet jeśli masz trochę doświadczenia w pracy z qmail'em, dobrze jest sformułować plan.
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:
- Posiadania około 10 mb w trakcie procesu kompilacji. Po jej zakończeniu niezbędne minimum to 4 mb. Pozostałą ilość możesz zwolnić poprzez usunięcie plików objektowych.
- Kompletne i działające oprogramowanie składające do tworzeniu programów w C składające się z kompilatora, plików nagłówkowych i bibliotek. Jeśli nie jesteś pewien pomoc znajdziesz we wskazówkach opisujących kompilowanie źródła.
- Kilka megabajtów dla bibliotek, dokumentacji i plików konfiguracyjnych.
- Bezpieczny system plików dla składowania w nim kolejki poczty (poczty będącej w trakcie dostarczania). qmail działa wiarygodnie pod warunkiem, że kolejka poczty obsługiwana jest przez system plików z tradycyjną semantyką BSD FFS. Większość współczesnych lokalnych systemów plików pracuje zgodnie z nią, z jednym istotnym wyjątkiem: funkcja systemowa link() jest zwykle asynchroniczna, co oznacza ze rezultaty wywołania link() mogą nie zostać zapisane na dysk już w chwili powrotu z tego wywołania systemowego. Możesz użyć biblioteki syncdir Bruce'a Guenter'a w celu rozwiązania tego problemu. Zobacz syncdir w dodatku Pakiety Dodatkowe.
- Wystarczająca ilość pamięci na dysku dla kolejki poczty. Mały system dla pojedyńczego użytkownika będzie potrzebował kilka megabajtów. Duży serwer może potrzebować kilka gigabajtów.
- System operacyjny kompatybilny z UNIX'em. Większość odmian UNIX'a jest akceptowalna. Zobacz README w katalogu źródłowym w celu odnalezienia spisu systemów pod którymi działa qmail.
- Dostęp do serwera nazw domen (DNS) jest praktycznie niezbędny. Bez niego qmail może jedynie wysyłać pocztę do tych zewnętrznych systemów, które są skonfigurowane w pliku smtproutes.
- Dobry dostęp do sieci. qmail został zaprojektowany dla systemów posiadających taki dostęp zatem prawdopodobnie nie ma sensu próbować używać go jako serwer listy dyskusyjnej posiadając łącze o prędkości 28.8 kb/s poprzez diul-up. Pakiet serialmail ma za zadanie ułatwić pracę qmail'a w systemie z kiepskim dostępem do sieci. Zobacz rozdział serialmail w załączniku Dodatkowe Pakiety w celu zdobycia większej ilości informacji na ten temat.
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
- qmail, http://www.qmail.org/netqmail-1.05.tar.gz
- ucspi-tcp, ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
- daemontools, ftp://cr.yp.to/daemontools/daemontools-0.76.tar.gz
Ś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.
- W linii poleceń wpisz cc i wciśnij Enter:
$ cc
cc: No input files specified
$
- Jeśli uzyskałeś podobny rezultat oznacza to, że masz kompilator C dostępny w swojej ścieżce dostępu. Jeśli nie, nie musi to wcale oznaczać że nie posiadasz zainstalowanego kompilatora. Być może jest on zainstalowany, ale w innym katalogu, który nie znajduje się w twej ścieżce dostępu. Spróbuj:
- /usr/bin/cc
- /usr/bin/gcc
- /usr/local/bin/cc
- /usr/local/bin/gcc
- /usr/ccs/bin/cc
- Jeśli żadne z powyższych nie zadziałało wybierz działanie w zależności od tego jaki masz system operacyjny:
- Red Hat Linux: rpm -qa | grep gcc or rpm -qa | grep egcs
- FreeBSD: posiada gcc zainstalowany domyślnie
- Jeśli nie masz zainstalowanego kompilatora będziesz musiał poszukać go i zainstalować. Skontaktuj się z producentem twego systemu operacyjnego lub z działem pomocy innego UNIX'a.
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:
- rcpthosts, który każe qmail-smtpd akceptować pocztę adresowaną do tych hostów,
- locals, który mówi qmail-send że adresy dotyczące tych hostów powinny być traktowane jako lokalne.
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.
- include: użytkownicy których należy konwertować
- exclude: użytkownicy których nie należy konwertować
- mailnames: alternatywne adresy pocztowe dla użytkowników
- subusers: dodatkowe adresy obsługiwane przez użytkownika z opcjonalnym rozszerzeniem .qmail
- append: różne przypisania
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:
- przekazanie wiadomości do MTA, lub
- kod błędu jest zwracany do MUA
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:
- /usr/lib/sendmail
- /usr/bin/sendmail
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) |
| 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:
- qmail-popup pobiera nazwę użytkownika i hasło
- checkpassword zajmuje się autentykacją użytkownik/hasło
- qmail-pop3d demon POP
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ść.
- 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.
- 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.
- 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:
- qmail-send pracujący jako użytkownik qmails
- qmail-clean pracujący jako użytkownik qmailq
- qmail-rspawn pracujący jako użytkownik qmailr
- qmail-lspawn pracujący jako użytkownik root
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 tcpserver'em powinieneś zobaczyć proces rodzica tcpserver oraz dodatkowo jeden proces tcpserver dla każdego z aktywnych nadchodzących połączeń SMTP.
Jeśli używasz splogger'a (lub multilog'a lub cyclog'a) do logowania zobaczysz procesy splogger'a (lub multilog'a lub cyclog'a) pracujące jako użytkownik qmaill.
Ponadto, jeśli qmail jest zajęty dostarczaniem wiadomości lokalnie albo na zewnątrz zobaczysz procesy qmail-local lub qmail-remote.
5.6.2. Logi
5.6.2.1. multilog
multilog jest częścią pakietu daemontools, loguje komunikaty do plików znajdujących sie w określonym katalogu.
Katalog docelowy podaje się w linii poleceń multilog'a, więc możesz go znaleźć przeglądając plik uruchomieniowy qmail'a.
Ilość plików w katalogu oraz ich wielkość uzależnione są od opcji przekazanych do multilog'a. Nazwy plików sa znacznikami czasu w formacie TAI (Temps Atomique International) i oznaczaja moment w którym dany plik został założony. Polecenie tai64nlocal, także z pakietu daemontools, konwertuje znacznik TAI do postaci czytelnej dla człowieka.
Zwykle wpis multilog'a wygląda tak:
@4000000038c3eeb104a6ecf4 delivery 153: success: did_1+0+0/
"@4000000038c3eeb104a6ecf4" jest opcjonalnym ale zalecanym znacznikiem czasu TAI "delivery 153: success: did_1+0+0/" jest treścią wiadomości
5.6.2.2. splogger
splogger używa syslog'a w celu określenia czasu danego wpisu i następnie przesyła taki wpis do demona syslog. Syslog konfigurowany jest w /etc/syslog.conf. Komunikaty wysyłane do syslog'a mają typ i priorytet. Wpisy w /etc/syslog.conf filtrują komunikaty na podstawie typu i priorytetu w celu skierowania ich do odpowiednich plików logów, innego hostu lub konsoli. splogger domyślnie przypisuje komunikatom typ 'mail' zatem po przejrzeniu syslog.conf i znalezieniu w nim dyspozycji dla 'mail' powinniśmy wiedzieć gdzie trafiają logi z qmail'a.
Zwykle są to :
- /var/log/syslog
- /var/adm/SYSLOG
- /var/log/maillog
Standardowy wpis dokonany przez syslog'a:
Jun 3 11:35:23 sparge qmail: 928424123.963558 delivery 153: success: did_1+0+0 /
"Jun 3 11:35:23" jest określeniem czasu dodanym przez syslog'a
"sparge" jest nazwą systemu który wysłał komunikat
"qmail:" tą nazwę dopisuje splogger zawsze na początku logów generowanych przez qmail'a
"928424123.963558" jest opcjonalnym oznaczeniem czasu (zob. w następnym rozdziale)
"delivery 153: success: did_1+0+0/" treść komunikatu
5.6.2.3. Logowane komunikaty
Oto typowa sekwencja komunikatów w przypadku wysyłania wiadomości do odległego hostu z systemu lokalnego:
1 @4000000038c3eeb027f41c7c new msg 93869 2 @4000000038c3eeb027f6b0a4 info msg 93869: bytes 2343 from <dave@sill.org> qp 18695 uid 49491 3 @4000000038c3eeb02877ee94 starting delivery 2392: msg 93869 to remote lwq@w3.to 4 @4000000038c3eeb0287b55ac status: local 0/10 remote 1/20 5 @4000000038c3eeb104a13804 delivery 2392: success: 209.85.127.177_accepted_message. /Remote_host_said:_250_CAA01516_Message_accepted_for_delivery/ 6 @4000000038c3eeb104a4492c status: local 0/10 remote 0/20 7 @4000000038c3eeb104a6ecf4 end msg 93869
Linia 1 oznacza, że qmail otrzymał nową wiadomość, a jej numer w kolejce wynosi 93869. Numer ten określa numer i-nodu w którym znajduje się plik /var/qmail/queue/mess/NN/ zawierający wiadomość. Numer ten jest unikalny tak długo jak długo wiadomość przebywa w kolejce.
Linia 2 mówi, że wiadomość jest od dave@sparge.sill i że ma rozmiar 2343 bajtów.
Linia 3 mówi, że qmail-remote zaczyna dostarczać wiadomość do lwq@w3.to oraz, że proces dostarczania otrzymał numer 2392.
Linia 4 mówi, że obecnie trwa dostarczanie 0 wiadomości lokalnie i 1 wiadomości na zewnątrz.
Linia 5 mówi, że dostarczanie wiadomości na zewnątrz o numerze 2392 zostało zakończone sukcesem, zwraca odpowiedź tamtego serwera, która często pomaga administratorowi zewnętrznego serwera w sprawdzeniu dalszych losów tej wiadomości. W tym przypadku "CAA01516" jest nazwą jaką otrzymała ta wiadomość na systemie zewnętrznym.
Linia 6 mówi, że obecnie odbywa się dostarczanie 0 wiadomości lokalnie i 0 na zewnątrz, czyli że dostarczanie zakończyło się.
Linia 7 mówi, że wiadomość została dostarczona i usunięta z kolejki. W tym momencie numer 93869 został zwolniony i może zostać użyty do dostarczania innej wiadomości.
5.7. Duże serwery
zob. także qmail-ldap
5.7.1. Przetwarzanie równoległe
Użyj szybkiego serwera plików NFS na którym będziesz przechowywał katalogi użytkowników. Skonfiguruj kilka serwerów SMTP o identycznym priorytecie dostarczania poczty. Serwery te będą dostarczać pocztę do formatu maildir na serwerze plików.
5.8. Przejście z Sendmail'a do qmail'a
Zajrzyj na stronę Dan'a Bernstein'a Sendmail->qmail http://cr.yp.to/qmail/sendmail.html
5.9. Menadżerowie list dyskusysyjnych (MLM)
MLM są programami które pomagają prowadzić listy dyskusyjne. Spełniają one dwa zadania: prowadzą spis subskrybentów oraz zajmują się rozsyłaniem wiadomości do wszystkich subskrybentów.
Większość (wszystkich?) menadżerów list można skonfigurować by współpracowały z qmail'em.
5.9.1. ezmlm
ezmlm został napisany przez Dan'a Bernstein'a autora qmail'a. Jest on specjalnie skonfigurowany by pracować z qmail'em i wykorzystuje kilka jego cech. Przede wszystkim używa VERP po to by wiarygodnie obsługiwać wiadomości niedostarczone. Cechą odróżniającą ezmlm od innych MLM jest to, że nie wykonuje on komend zawartych w treści wiadomości, w jego przypadku komendy zawarte są w adresie listy. Przykład, by zapisać się na listę "foo@list.example.net" należy wysłać wiadomość na adres "foo-subscribe@list.example.net".
W celu uzyskania większej ilości informacji o ezmlm zajrzyj na stronę http://www.ezmlm.org, nieoficjalną stronę ezmlm'a, a oficjalną stronę ezmlm-idx, bardzo przyjemnego dodatku, który rozszerza jego możliwości o wiele nowych cech.
5.9.2. Majordomo
Majordomo jest najpopularniejszym MLM pod UNIXem. Pracuje bardzo dobrze z qmail'em pod warunkiem spatchowania go pod tym kątem. Russ Allbery napisał FAQ o qmail/Majordomo dostępne pod adresem http://www.eyrie.org/~eagle/faqs/mjqmail.html
5.10. Patche
Kody źródłowe różnych patch'y dostępne są dla qmail'a. By spatchować qmail'a ściągnij patcha, przejdź do katalogu ze źródłami qmail'a i zastosuj go używając komendy patch.
cd /usr/local/src/qmail/qmail-1.03
patch -p0 </tmp/patchfile
Uwaga: Przeczytaj stronę manuala dla polecenia patch man by dowiedzieć się więcej. To jest tylko przykład. Może być także wymagane byś używał najnowszej wersji polecenia GNU patch by zaaplikować niektóre patch'e. Zob. http://www.gnu.org/software/patch/patch.html.
Zatrzymaj qmail'a zabijając qmail-send lub jeśli zainstalowałeś skrypt z rozdziału Instalacja wykonaj:
qmailctl stop
Następnie przekompiluj i zainstaluj zmienione źródła:
make setup check
Zrestartuj qmail'a:
qmailctl start
Wreszcie przetestuj qmail'a a zwłaszcza to co patchowałeś.
Uwaga: Chociaż http://www.qmail.org/ zawiera wiele patchy dla qmail'a, żaden z nich nie został zatwierdzony przez autora qmail'a. Mogą one wprowadzać problemy związane z bezpieczeństwem, wiarygodnością, wydajnościa i funkcjonalnościa które nie były obecne w qmail'u. Większość istalacji qmail'a nie wymaga instalowania żadnych patchy. Nie powinieneś instalować nic czego wyraźnie nie potrzebujesz.
5.10.1. Zalecane patche
Na stronie qmail.org znajduje się sekcja "Recommended Patches": http://qmail.org/top.html#patches. Naprawiają one tych kilka błędów które zostały znalezione w qmailu
Uwaga: Wszystkie spośród Rekomendowanych Patchy zostały zawarte w dystrybucji netqmail. Zob. http://www.qmail.org/netqmail/.
5.10.1.1. errno.h patch
Ten patch naprawia problem brakującego errno.h. Zob. http://news.gmane.org/article.php?id=13960&group=gmane.mail.qmail.general by znaleźć dokładne wyjaśnienia i sam patch.
Mate Wierdl napisał patche związane z errno.h dla całości oprogramowania Dana Bernsteina w tym qmail'a, daemontools i ucspi-tcp. Patche te można pobrać z: ftp://moni.csi.hu/pub/glibc-2.3.1/.
5.10.1.2. qmail-local TAB patch
Ten patch naprawia drobny błąd w przetwarzaniu plików .qmail zaczynających się od znaku TAB. http://www.ornl.gov/its/archives/mailing-lists/qmail/2000/10/msg00696.html
5.10.1.3. IP 0.0.0.0 patch
Patch ten powoduje, że adres IP 0.0.0.0 rozpoznawany jest jako lokalny. http://www.suspectclass.com/~sgifford/qmail/qmail-0.0.0.0.patch
5.10.2. DNS
Z powodów historycznych odpowiedzi DNS'a były ograniczone do 512 bajtów. Niektóre duże instytucje zaczęły używać odpowiedzi MX dłuższych od tego ograniczenia. qmail i wiele innych programów ma problem z zapytaniami do DNS, które zwracają bardzo duże odpowiedzi. Są trzy możliwe sposoby naprawienia tego:
5.10.1.1. Korzystaj z dnscache który wchodzi w skład pakietu djbdns
dnscache jest, jak to wynika z nazwy serwerem cachującym DNS. Potrafi poradzić sobie z długimi odpowiedziami DNS, poza tym jest szybki. Nie wymaga także patchowania qmail'a, zatem jest to zdecydowanie najlepsze rozwiązanie. Zob. djbdns w Dodatkowe pakiety by dowiedzieć się więcej.
5.10.1.2. Zwiększenie rozmiaru bufora do 65536
Działa z najnowszymi wersjami resolvwera BIND'a, który automatycznie wykonują zapytanie poprzez TCP, jeśli odpowiedź wraca z ustawionym bitem truncation (obcięcie). Jest to najprostsza poprawka, mimo to potencjalnie można w ten sposób marnować wiele pamięci, w zależności od tego jak twój system ją przydziela. By zastosować ten sposób po prostu zamień PACKETSZ na 65536 w dns.c i przekompiluj qmail'a.
5.10.1.3. Patch Christopher'a K. Davis'a http://www.ckdhr.com/ckd/qmail-103.patch
Jest to zastosowanie patch'a Chuck'a Foster'a, powinno działać z każdą wersją resolwera nieważne jak starą. Używa specjalnego bajtu by uniknąć bug'a związanego z ilością bajtów znajdujących się w buforze. Realokuje pamięć tylko raz do 65536, a nie do takiej ilości danych jaka nadeszła, zatem jest mniej efektywny pod względem wykorzystania pamięci niż patch Chuck'a. Mimo to podobnie jak tamten patch realokacja jest wykonywana tylko wówczas gdy długość odpowiedzi jest większa niż PACKETSZ, który domyślnie ma wartość 512. Po realokacji wykonuje zapytanie poprzez TCP, zamiast zmuszania resolwera do zrobienia tego (unika w ten sposób dodatkowej komunikacji pomiędzy qmail'em i serwerem nazw, chociaż jeśli znajdują się one na tej samej maszynie lub w tej samej sieci lokalnej nie jest to wielkie zmartwienie).
5.10.2. qmail-ldap
Ten patch napisany przez Andre Oppermann'a implementuje Lightweight Directory Access Protocol (LDAP) w qmail'u. LDAP jest jak książka telefoniczna. Używając qmail-ldap powinno być możliwe obsługiwanie tysięcy użytkowników poprzez serwer POP. zob. http://www.nrg4u.com/
5.11. QMTP
QMTP to Quick Mail Transfer Protocol (szybki protokół przesyłania poczty), zastępuje on STMP. Napisany został przez Dana Bernstein'a. Jego definicję można znaleźć na http://cr.yp.to/proto/qmtp.txt. QMTP jest podobny do SMTP, jednak jest prostszy, szybszy i niekompatybilny z SMTP. qmail zawiera serwer QMTP, qmail-qmtp, który działa podobnie do qmail-smtp. QMTP zwykle używa portu 209.
qmail nie zawiera klienta QMTP, jest on natomiast zawarty w pakiecie serialmail. maildir2qmtp dostarcza wiadomości znajdujące się w skrzynce o formacie maildir do oznaczonego serwera QMTP poprzez QMTP.
QMTP nie działa jak SMTP, zatem nie można go zainstalować zamiast SMTP. Nie jest on także zbyt rozpowszechniony w internecie.
Russ Nelson napisał patch'a dla qmail-remote który uruchamia QMTP. Jest on dostępny z http://www.qmail.org/qmail-1.03-qmtpc.patch. Można go także ściągnąć w postaci spakowanej tar'em do rozpakowania w /service by włączyć usługę QMTP spod adresu http://www.qmail.org/qmtpd-service.tar.gz.
A. Podziękowania
Przede wszystkim chciałbym podziękować Dan'owi Bernstein'owi za napisanie tak dużego i eleganckiego programu. Mimo używania qmail'a przez pięć lat ciągle jestem pod jego wrażeniem.
Chciałbym także podziękować członkom listy poświęconej qmail'owi. Russell Nelson zasługuje na specjalne uznanie jako najbardziej pomocny, cierpliwy, wesoły i obdarzony duża wiedzą jej uczestnik. Jedynym którego cenię więcej jest DJB.
Dziękuję także wszystkim którzy przejrzeli i przyczynili się do powstania tego dokumentu, a w szczególności:
- Vince Vielhaber
- Chris Green
- Christopher K. Davis
- Scott Schwartz
- Fred Lindberg
- Russell P. Sutherland
- Alex Miller
- Tim Hunter
- Frank D. Cringle
- Mahlon Smith
- Rogerio Brito
- Tony Hansmann
- Matthias Andree
- Tillman Hodgson
- Stefan Witzel
- Scott Gifford
- i wielu innym
Specialne podziękowania dla Henninga Brauera za finansowe wsparcie domeny lifewithqmail.org oraz za jej hosting!
Life with qmail zostało napisane przy użyciu Simple Document Format (SDF), bardzo wygodnego opartego na perlu języka "markup "który generuje HTML, zwykły tekst, PostScript, POD i inne formaty. Znacznie ułatił mi pracę. Zajrzyj na strone http://search.cpan.org/author/IANC/sdf-2.001/
B. Dodatkowe pakiety
B.1. dot-forward
Sendmail używa plików .forward, co wymawia się jako dot forward, by umożliwić użytkownikom kontrolę nad dostarczaniem wiadomości która otrzymali. qmail używa podobnego mechanizmu: plików .qmail. Pakiet dot-forward pozwala qmail'owi na używanie plików .forward. Systemy na których używano Sendmail'a albo innego MTA, który używa plików .forward mogą zastosować ten pakiet po to by nie trzeba było konwertować wszystkich istniejących plików .forward do ich qmailowego odpowiednika .qmail. W ten sposób przejście na qmail'a może być mniej bolesne dla użytkowników.
dot-forward jest małym pakietem, łatwym do instalacji i konfiguracji. Źródła są dostępne pod adresem ftp://cr.yp.to/software/dot-forward-0.71.tar.gz
Jego autorem jest Dan Bernstein, który prowadzi stronę www na jego temat http://cr.yp.to/dot-forward.html
B.2. fastforward
Jest to kolejny dodatek umożliwiający współpracę z plikami konfiguracyjnymi Sendmail'a. Sendmail używa centralnej bazy aliasów trzymanej w pojedyńczym pliku zwykle jest nim /etc/aliases. qmail używa wielu plików dot-qmail w /var/qmail/alias, jeden plik jest jednym aliasem. Jeśli zmieniasz MTA na qmail'a i masz aliasy w postaci Sendmail'owej których nie chcesz konwertować wówczas możesz użyć fastforward by nadal z nich korzystać.
Źródła są dostępne z ftp://cr.yp.to/software/fastforward-0.51.tar.gz
Autorem jest Dan Bernstein, który prowadzi także stronę na jego temat http://cr.yp.to/fastforward.html
B.3. ucspi-tcp
Serwer SMTP qmail'a nie pracuje jako niezależny demon. Korzysta on z pomocy takich programów inetd, xinetd lub tcpserver które są uruchamiane jako demony. Gdy taki demon otrzymuje połączenie na porcie 25, porcie SMTP, wówczas uruchamia kopię qmail-smtpd.
Inetd jest standardowym serwerem sieci "super-serwerem". Można go skonfigurować używając pliku /etc/inetd.conf tak by uruchamiał qmail-smtpd jednak programem zalecanym jest tcpserver, który jest częścią pakietu ucspi-tcp. ucspi-tcp jest akronimem UNIX Client-Server Program Interface for TCP, a wymawia się go jako ooks-pie tee see pee.
tcpserver jest lepszy od inetd gdyż:
- pozwala administratorowi na ustalenie limitu jednoczesnych połączeń z daną usługą. Inetd ma natomiast mechanizm chwilowego wyłączania usług które są zbyt zajęte.
- tcpserver może być skonfigurowany tak by odmawiać dostępu niektórym hostom lub by rozpoznawać hosty lokalne i oznaczać je po to by qmail-smtpd mógł traktować je inaczej.
- tcpserver jest jedynym serwerem wspieranym przez autora qmail'a
Źródła można pozyskać z ftp://cr.yp.to/ucspi-tcp/ucspi-tcp-0.88.tar.gz
Gerrit Pape przygotował dokumentację dla ucspi-tcp w postaci stron man na http://smarden.org/pape/djb/.
ucspi-tcp został napisany przez Dan'a Bernstein'a który prowadzi na jego http://cr.yp.to/ucspi-tcp.html
B.4. daemontools
Pakiet daemontools zawiera zbiór narzędzi do kontrolowania i monitorowania usług. Nie jest on konieczny, mimo to jest bardzo zalecany, zwłaszcza dla bardzo obciążonych systemów. W jego skład wchodzą:
- supervise, który monitoruje usługi i restartuje je jeśli przestaną działać
- svc, który komunikuje się z supervise i pozwala użytkownikowi na wyłączenie, zatrzymanie lub zrestartowanie usługi
- multilog, który zajmuje się logowaniem komunikatów pochodzących od danej usługi, i jednocześnie prowadzi rotację plików logów tak by nie przekroczyły wyznaczonej wielkości
- setuidgid, który uruchamia programy z UID I GID innym niż root
Źródła daemontools są dostępne z http://cr.yp.to/daemontools/daemontools-0.76.tar.gz
Gerrit Pape przygotował dokumentację dla ucspi-tcp w postaci stron man na http://smarden.org/pape/djb/.
daemontools zostały napisane przez Dana Bernstein'a, który prowadzi na ich temat stronę http://cr.yp.to/daemontools.html
B.5. qmailanalog
qmailanalog przetwarza logi qmail'a w celu stworzenia raportów mówiących jak wiele i jakiego rodzaju pracy wykonuje system. Jeśli potrzebujesz statystyk mówiących jak wiele wiadomości jest wysyłanych lub przysyłanych, jakiej wielkości i jak szybko są one przetwarzane, qmailanalog jest narzędziem dla ciebie.
Dodatkowo program matchup skleja wiele linii qmail'a opisujących wysłanie wiadomości w jedną podobną do tych jakie generuje Sendmail.
Źródła qmailanalog można znaleźć na http://cr.yp.to/software/qmailanalog-0.70.tar.gz
qmailanalog został napisany przez Dana Bernstein'a, a jego stroną domową jest http://cr.yp.to/qmailanalog.html
Uwaga: qmailanalog korzysta ze znaczników czasu znajdujących się w logach w postaci dziesiętnych części sekundy używanych przez accustamp'a. Jeśli chcesz używać go wraz z logami wygenerowanymi przez multilog'a, które są w formacie TAI64N, będziesz potrzebował przetłumaczyć je do starego formatu. Jednym z programów, których możesz użyc jest http://www.qmail.org/tai64nfrac
B.6. rblsmtpd
Jeśli nigdy nie otrzymałeś spamu masz szczęście. Większość użytkowników poczty często go otrzymuje. Zwykle są to reklamy stron poświęconych seksowi, łańcuszki szczęścia itp. Od początku powstania internetu do roku 1998 większość MTA była open relay'ami, czyli przyjmowały pocztę od każdego dla każdego, nawet jeśli ani nadawca, ani odbiorca nie byli użytkownikami lokalnymi. Spammerzy używają open relay'ow, gdyż zacierają one ich ślady, wskazując na "niewinne" serwery open relay oraz oszczędzają im wiele czasu procesora i nie obciążają ich łącza.
Obecnie open relay'e są uznawane za bardzo złe, powstało kilka grup anty-spamowych, które stworzyły mechanizmy identyfikacji open relay'ów i innych źródeł spamu po to by unikać połączeń przychodzących z takich miejsc.
rblsmtpd jest demonem RBL SMTP. Pracuje on pomiędzy tcpserver'em i qmail-smtpd i odrzuca połączenia od systemów znajdujących sie na jednej z tych list.
Przykładowo by uruchomić rblsmtpd pod tcpserver'em, napisz:
#!/bin/sh
QMAILDUID=`id -u qmaild`
NOFILESGID=`id -g qmaild`
MAXSMTPD=`cat /var/qmail/control/concurrencyincoming`
exec /usr/local/bin/softlimit -m 2000000 \
/usr/local/bin/tcpserver -v -R -H -l 0 -x /etc/tcp.smtp.cdb -c "$MAXSMTPD" \
-u "$QMAILDUID" -g "$NOFILESGID" 0 smtp /usr/local/bin/rblsmtpd\
-r relays.ordb.org /var/qmail/bin/qmail-smtpd 2>&1
rblsmtpd był wcześniej dostępny jako osobne narzędzie, jednak obecnie jest rozprowadzany razem z ucspi-tcp.
rblsmtpd został napisany przez Dan'aBernstein'a, który prowadzi stronę na jego temat pod adresem http://cr.yp.to/ucspi-tcp/rblsmtpd.html.
B.7. serialmail
qmail został stworzony dla serwerów mających stałe i szybkie połączenie z internetem. serialmail jest zbiorem narzędzi które dostosowują qmail'a do pracy na wolnym i pracującym z przerwami łączu. Konfiguruje on qmail'a do dostarczania całej poczty wysyłanej na zewnątrz do jednego konta w formacie maildir. W jego skład wchodzi polecenie maildir2smtp używane do rozpoczęcia wysyłania poczty poprzez hub'a ISP w momencie w którym wstaje łącze. Jeśli ISP używa QMTP (zajrzyj do rozdziału poświęconego QMTP) można użyć polecenia maildir2qmtp.
serialmail może być także użyty w celu implementacji AutoTURN: połączenie SMTP od klienta powoduje, że serwer nawiązuje połączenie w drugą stronę w celu przesłania wiadomości znajdujących sie kolejce, a przeznaczonych dla klienta. Jest to podobne do funkcji ETRN w SMTP.
Źródła serialmail są dostępne z http://cr.yp.to/software/serialmail-0.75.tar.gz
serialmail został napisany przez Dana Bernstein'a, a jego stroną jest http://cr.yp.to/serialmail.html
B.8. mess822
mess822 jest biblioteką i zbiorem aplikacji analizujących wiadomości zgodne z RFC 822. W jej skład wchodzą:
- ofmipd: demon który przyjmuje wiadomości od klientów i zmienia pole From na podstawie bazy danych.
- new-inject: zastępuje qmail-inject i umożliwia użytkownikowi na zmienianie nazwy hosta
- iftocc: narzęzie sprawdzające czy wiadomość została wysłana do określonego adresu
- 822header, 822field, 822date, i 822received: służą do wyciągania informacji z wiadomości
- 822print: drukuje wiadomości
Źródła mess822 są dostępne na http://cr.yp.to/software/mess822-0.58.tar.gz
Jego autorem jest Dan Bernstein, który utrzymuje stronę poświęconą temu programowi na http://cr.yp.to/mess822.html
B.9. ezmlm
ezmlm jest wydajnym, łatwym w użyciu menadżerem list dyskusyjnych (MLM) dla qmail'a. Jeśli miałeś styczność z LISTSERV'em lub Majordomo wiesz dobrze czym zajmuje sie MLM. Jeśli nie wiesz zajrzyj do rozdziału poświęconego Menadżerowie list dyskusysyjnych
Źródła ezmlm znajdują się na http://cr.yp.to/software/ezmlm-0.53.tar.gz
Program ten został napisany przez Dana Bernstein'a, adresem jego strony jest http://cr.yp.to/ezmlm.html
Fred Lindberg i Fred B. Ringel stworzyli rozszerzenie dla ezmlm nazwane ezmlm-idx. Ma ono wiele dodatkowych cech i jest bardzo zalecane. Można je pobrać z http://www.ezmlm.org/.
B.10. safecat
safecat wiarygodnie zapisuje plik do skrzynki pocztowej w formacie maildir. Jest użyteczny zwłaszcza jeśli używasz procmail'a. Przykładowo poniższe linie zapisują wszystkie wiadomości do Maildir:
:0w |safecat Maildir/tmp Maildir/new
Autorem safecat jest Len Budney, a jego stroną domową http://www.pobox.com/~lbudney/linux/software/safecat.html.
B.11. djbdns
djbdns jest serwerem DNS napisanym przez autora qmail'a. W jego skład wchodzi tinydns, serwer nazw DNS oraz dnscache, cachujący serwer DNS.
Oficjalną stroną djbdns jest http://cr.yp.to/djbdns.html.
B.12. maildrop
maildrop jest filtrem pocztowym podobnym do procmail'a.
Autorem maildrop jest Sam Varshavchik, adres strony to http://www.flounder.net/~mrsam/maildrop
B.13. syncdir
syncdir jest małą bliblioteką która wykonuje synchronicznie wywołania systemowe link(). Jest ona przydatna gdy używasz qmail'a z kolejka przechowywaną w systemie plików który nie wykonuje link() synchronicznie czyli przykładowo w ext2fs, Reiserfs, XFS w SGI i FFS z softupdates w BSD.
syncdir został napisany przez Bruce'a Guenter'a i jest do ściągnięcia z http://untroubled.org/syncdir/. Instalacja opisana jest na http://www.ornl.gov/its/archives/mailing-lists/qmail/2001/12/msg00949.html.
C. Jak działa poczta w internecie
C.1. W jaki sposób wiadomość jest przekazywana z punktu A do B
Jeśli użytkownik z jednego hostu wysyła wiadomość do użytkownika znajdującego się na innym hoście wydarza się wiele rzeczy z których być może nie zdajesz sobie sprawy.
Powiedzmy, że Alice, alice@alpha.example.com, chce wysłać wiadomość do Bob'a bob@beta.example.com. Oto co się dzieje:
1. Alice tworzy wiadomość przy użyciu jej programu pocztowego (MUA), czegoś podobnego do pine'a lub mutt'a. Podaje odbiorcę w polu To, temat w polu Subject oraz wpisuje treść wiadomości. Wygląda to mniej więcej tak:
To: bob@beta
Subject: lunch
Może zjemy pizzę ?
2. Gdy już zakończyła pisanie maila, wydaje polecenie MUA by ją wysłał.
3. W tym momencie MUA może dodać dodatkowe pola jak Date i Message-Id a także zmodyfikować niektóre z wartości które Alice wpisała, np. zamienić bob@beta na "Bob <bob@beta.example.com>". Następnie MUA wprowadza wiadomość do systemu pocztowego. Są dwa możliwe sposoby których może użyć: może uruchomić program znajdujący się w systemie pocztowym przeznaczony do tego celu, lub może nawiązać połączenie do portu SMTP do serwera lokalnego lub zewnętrznego. W tym przykładzie przyjmijmy, że MUA użył pierwszego z tych sposobów, by przesłać wiadomość do MTA. W zależności od MTA wprowadzanie wiadomości może się nieco różnić ale na systemach UNIX'owych standardem jest metoda Sendmail'owa. W tej metodzie MUA zapisuje do jednego pliku nagłówek oraz treść wiadomości oddzielając je pustą linią, i przekazuje ten plik do Sendmail'a.
4. Jeśli wprowadzanie wiadomości zakończy się sukcesem - wiadomość okazała się składniowo poprawna, a Sendmail został poprawnie wywołany - od tego momentu za wiadomość odpowiada MTA. Szczegóły są w dużej mierze uzależnione od MTA, ale generalnie MTA na alpha sprawdza nagłówek by dowiedzieć się gdzie wysłać wiadomość, nawiązuje połączenie SMTP do beta i przesyła wiadomość do MTA na beta. W trakcie przekazywania wiadomości poprzez SMTP wysyłana jest ona w dwóch częściach: koperta, która określa adres odbiorcy (bob@beta.example.com) i adres zwrotny (alice@alpha.example.com), a następnie samą wiadomość, która składa się z nagłówka i treści.5. Jeśli MTA na beta odrzuci wiadomość, chociażby dlatego że nie ma na tym systemie użytkownika o nazwie bob, wówczas MTA na alpha wysyła bounce do adresu zwrotnego, alice@alpha, by zawiadomić ją o problemie.
6. Jeśli MTA na beta zaakceptuje wiadomość, sprawdza adres odbiorcy, by ocenić czy jest to użytkownik lokalny. W naszym przykładzie jest to prawda zatem MTA sam zajmuje się dostarczeniem wiadomości lub przekazuje ją do MDA - programu dostarczającego pocztę - takiego jak /bin/mail lub procmail.
7. Jeśli proces dostarczania zakończy się niepowodzeniem, gdyż Bob mógł np. przekroczyć wielkość swojej skrzynki pocztowej, wówczas beta wysyła bounce do adresu zwrotnego z koperty alice@alpha.
8. Jeśli dostarczanie zakończy się sukcesem, wiadomość czeka w skrzynce pocztowej Boba, aż jego MUA przeczyta ją i wyświetli.
C.2. Więcej informacji
By dowiedzieć się bardziej szczegółowo jak działa poczta w Internecie, skorzystaj z jednego z poniższych źródeł:
- Internet mail, autora qmail'a. qmail. http://cr.yp.to/im.html
- SMTP, autora qmail'a. qmail. http://cr.yp.to/smtp.html
- Internet mail message header format, autora qmail'a. qmail. http://cr.yp.to/immhf.html
C.2.1. Internetowe RFC
RFC (internetowe prośby o komentarze) są oficjalną dokumentacją Internetu. Większość z nich to znacznie więcej niż zwykłe komentarze, gdyż opisuje protokoły używane w Internecie takie jak TCP, FTP, Telnet oraz różne standardy poczty i protokoły.
- RFC 821, Simple Mail Transfer Protocol. http://www.ietf.org/rfc/rfc0821.txt
- RFC 822, Standard for the Format of ARPA Internet Text Messages. http://www.ietf.org/rfc/rfc0822.txt
- RFC 931, Authentication Server. http://www.ietf.org/rfc/rfc0931.txt
- RFC 974, Mail Routing and the Domain System. http://www.ietf.org/rfc/rfc0974.txt
- RFC 1123, Requirements for Internet Hosts -- Application and Support. http://www.ietf.org/rfc/rfc1123.txt
- RFC 1413, Identification Protocol. http://www.ietf.org/rfc/rfc1413.txt
- RFC 1423, Privacy Enhancement for Internet Electronic Mail: Part III: Algorithms, Modes, and Identifiers. http://www.ietf.org/rfc/rfc1423.txt
- RFC 1651, SMTP Service Extensions. http://www.ietf.org/rfc/rfc1651.txt
- RFC 1652, SMTP Service Extension for 8bit-MIMEtransport. http://www.ietf.org/rfc/rfc1652.txt
- RFC 1806, Content disposition. header. http://www.ietf.org/rfc/rfc1806.txt
- RFC 1854, SMTP Service Extension for Command Pipelining. http://www.ietf.org/rfc/rfc1854.txt
- RFC 1891, SMTP Service Extension for Delivery Status Notifications. http://www.ietf.org/rfc/rfc1891.txt
- RFC 1892, The Multipart/Report Content Type for the Reporting of Mail System Administrative
- RFC 1893, Enhanced mail system status codes. http://www.ietf.org/rfc/rfc1893.txt
- RFC 1894, An Extensible Message Format for Delivery Status Notifications. http://www.ietf.org/rfc/rfc1894.txt
- RFC 1939, Post Office Protocol - Version 3. http://www.ietf.org/rfc/rfc1939.txt
- RFC 1985, SMTP Service Extension for Remote Message Queue Starting (ETRN). http://www.ietf.org/rfc/rfc1985.txt
- RFC 1991, PGP Message Exchange Formats. http://www.ietf.org/rfc/rfc1991.txt
- RFC 2015, MIME Security with Pretty Good Privacy. (PGP). http://www.ietf.org/rfc/rfc2015.txt
- RFC 2045, MIME Internet message bodies. http://www.ietf.org/rfc/rfc2045.txt
- RFC 2046, MIME Media Types. http://www.ietf.org/rfc/rfc2046.txt
- RFC 2047, MIME Headers. http://www.ietf.org/rfc/rfc2047.txt
- RFC 2048, MIME Registration Procedures. http://www.ietf.org/rfc/rfc2048.txt
- RFC 2049, MIME Conformance Criteria. http://www.ietf.org/rfc/rfc2049.txt
- RFC 2142, Mailbox names for common services. http://www.ietf.org/rfc/rfc2142.txt
- RFC 2183, Content Disposition header. http://www.ietf.org/rfc/rfc2183.txt
- RFC 2821, Simple Mail Transfer Protocol. http://www.ietf.org/rfc/rfc2821.txt
- RFC 2822, Internet Message Format http://www.ietf.org/rfc/rfc2822.txt
Wyczerpująca lista RFC związanych z pocztą jest dostępna na stronie Internet Mail Consortium, http://www.imc.org/mail-standards.html
D. Architektura
D.1. Modularna architektura systemu
Internetowe MTA wykonują różne zadania. Wcześniejsze z tych programów jak Sendmail czy smail mają budowę monolityczną. Innymi słowy, zbudowane są z jednego, wielkiego programu, który spełnia wszystkie funkcje: jest serwerem MTA, klientem MTA, dostarcza wiadomości lokalnie, obsługuje kolejkę itp.
qmail ma budowę modularną. Każda z tych funkcji wykonywana jest przez oddzielny program. W efekcie programy są mniejsze, prostsze i jest mniej prawdopodobne, że będą zawierały błędy funkcjonalne lub związane z bezpieczeństwem. By jeszcze bardziej zwiększyć bezpieczeństwo moduły qmail'a pracują z różnymi uprawnieniami, "nie ufają" sobie wzajemnie: nie zakładają że inne moduły robią tylko to do czego zostały przeznaczone.
Najważniejsze moduły:
| Nazwa | Funkcja |
| qmail-smtpd | akceptuje/odrzuca wiadomości poprzez SMTP |
| qmail-inject | pobiera wiadomości lokalne do dostarczenia |
| qmail-rspawn/qmail-remote | dostarcza wiadomości na zewnątrz |
| qmail-lspawn/qmail-local | dostarcza wiadomości lokalnie |
| qmail-send | przetwarza kolejkę |
| qmail-clean | czyści kolejkę |
Są także pewne minusy związane z budową modularną. Inaczej niż w przypadku monolitycznych MTA, kontakty pomiędzy modułami są dobrze zdefiniowane, a moduły wymieniają między sobą tylko minimum potrzebnych informacji. Generalnie jest to Dobra Rzecz, ale czasami utrudnia życie. Przykładowo flaga "-v" w Sendailu powoduje, że wypisuje on na wyjście standardowe informacje o swoim działaniu co może ułatwić wyszukiwanie błędów. Ponieważ jeden program robi wszystko, więc z łatwością może on informować o podejmowanych przez siebie działaniach w celu dostarczenia wiadomości. qmail nie ma podobnych możliwości, w celu ich dodania należałoby dokonać sporych zmian w kodzie, by poinformowac moduły że obecnie jesteśmy w trybie debuggowania.
D.2. Struktura plików
/var/qmail jest głównym katalogiem qmail'a. Można to zmienić w momencie kompilacji qmail'a, jednakże najlepiej pozostawić go bez zmian, wówczas inni administratorzy będą wiedzieli gdzie szukać jakich plików. Jeśli bardzo zależy ci na zmianie niektórych jego katalogów najlepiej zrobić to przy użyciu symbolicznych linków. Zobacz do podrozdziału Zakladanie katalogów w rozdziale poświęconym Instalacji.
Podkatalogi głównego katalogu:
| Katalog | Zawartość |
| alias | pliki .qmail aliasów systemowych |
| bin | binaria i skrypty |
| boot | skrypty startowe |
| control | pliki konfiguracyjne |
| doc | dokumentacja (oprócz stron man) |
| man | strony man |
| queue | kolejka nie wysłanych wiadomości |
| users | pliki bazy danych qmail-users |
D.3. Struktura kolejki
Plik INTERNALS w katalogu w którym znajdują się pliki źródłowe qmail'a opisuje szczegółowo proces kolejkowania. Można tam znaleźć na ten temat więcej informacji.
| Podkatalog | Zawartość |
| bounce | trwałe błędy w dostarczaniu |
| info* | adres nadawcy z koperty |
| intd | koperta w trakcie tworzenia przez qmail-queue |
| local* | adresy odbiorców z kopert lokalnych |
| lock | pliki blokady (lock files) |
| mess* | pliki z wiadomościami |
| pid | używane przez qmail-queue by uzyskać numer i-nodu |
| remote* | adresy nadawców z kopert zewnętrznych |
| todo | kompletne koperty |
Uwaga: katalogi oznaczone "*" zawierają wiele podkatalogów o nazwach "0", "1", ..., aż do (conf-split-1), gdzie conf-split jest zmienną ustawianą w trakcie kompilacji zawartą w pliku conf-split w katalogu ze źródłami qmail'a. Domyślnie jest to 23. Celem podzielenia tego katalogu na podkatalogi jest zmniejszenie liczby plików znajdujących się w pojedyńczym katalogu na bardzo zatłoczonych serwerach.
Pliki w katalogu mess nazwane są na podstawie numeru i-node. Oznacza to, że nie możesz ręcznie ich przenosić używając standardowych narzędzi UNIXa takich jak mv, dump/restore, i tar. Istnieje kilka narzędzi napisanych przez użytkowników qmail'a na http://www.qmail.org które potrafią prawdidłowo zmieniać nazwy plików w kolejce.
Uwaga: nie jest bezpiecznie modyfikować pliki z kolejki jesli qmail pracuje. Jeśli chcesz zmodyfikować kolejkę, najpierw zatrzymaj qmail'a, ostrożnie wprowadź zmiany, a następnie go uruchom.
D.4. Szkice
W katalogu /var/qmail/doc znajdują się pliki o nazwach zaczynających się na PIC. Są to tekstowe "obrazy" różnych sytuacji występujących w trakcie działania qmail'a. Pokazują w jaki sposób kontaktują się ze sobą poszczególne moduły i są bardzo pomocne w trakcie debuggowania oraz tworzenia złożonych konfiguracji.
| Nazwa pliku | Zawartość |
| PIC.local2alias | wiadomości wprowadzone lokalnie dostarczane do lokalnego aliasa |
| PIC.local2ext | wiadomości wprowadzone lokalnie dostarczane do adresu rozszerzonego |
| PIC.local2local | wiadomości wprowadzone lokalnie dostarczane do użytkownika lokalnego |
| PIC.local2rem | wiadomości wprowadzone lokalnie dostarczane do adresu zewnętrznego |
| PIC.local2virt | wiadomości wprowadzone lokalnie dostarczane do adresu w lokalnej domenie wirtualnej |
| PIC.nullclient | wiadomości wprowadzone lokalnie on a null client |
| PIC.relaybad | nieudana próba wykorzystania hostu lokalnego jako relay'a |
| PIC.relaygood | udana próba wykorzystania hostu lokalnego jako relay'a |
| PIC.rem2local | wiadomość dostarczona poprzez SMTP dla użytkownika lokalnego |
Pliki te są dostępne także on-line:
Jeśli chcesz zobaczyć prawdziwe obrazki qmail'a sprawdź "wielki obraz qmaila" Andre Opperman'a na http://www.nrg4u.com/
E. Nieczęsto zadawane pytania
Poniższe pytania nie kwalifikują się do często (FAQ) zadawanych, ale są ważne i odpowiedzi na nie nie należą do prostych.
E.1. Jak często qmail próbuje wysłać oczekującą wiadomość ?
Każda wiadomość ma swój harmonogram prób dostarczenia. Im dłużej wiadomość nie jest dostarczona, tym rzadziej qmail próbuje ją wysłać. Nie można zmienić harmonogramu dostarczania. Poniższa tabela pokazuje kiedy qmail próbuje wysłać wiadomość na zewnątrz aż do momentu gdy uzna ją za niedostarczoną. Wartości dla dostarczeń lokalnych są podobne, tyle że próby występują częściej.
| proba dostarczenia | sekundy | dzień-godz:min:sek |
| 1 | 0 | 0-00:00:00 |
| 2 | 400 | 0-00:06:40 |
| 3 | 1600 | 0-00:26:40 |
| 4 | 3600 | 0-01:00:00 |
| 5 | 6400 | 0-01:46:40 |
| 6 | 10000 | 0-02:46:40 |
| 7 | 14400 | 0-04:00:00 |
| 8 | 19600 | 0-05:26:40 |
| 9 | 25600 | 0-07:06:40 |
| 10 | 32400 | 0-09:00:00 |
| 11 | 40000 | 0-11:06:40 |
| 12 | 48400 | 0-13:26:40 |
| 13 | 57600 | 0-16:00:00 |
| 14 | 67600 | 0-18:46:40 |
| 15 | 78400 | 0-21:46:40 |
| 16 | 90000 | 1-01:00:00 |
| 17 | 102400 | 1-04:26:40 |
| 18 | 115600 | 1-08:06:40 |
| 19 | 129600 | 1-12:00:00 |
| 20 | 144400 | 1-16:06:40 |
| 21 | 160000 | 1-20:26:40 |
| 22 | 176400 | 2-01:00:00 |
| 23 | 193600 | 2-05:46:40 |
| 24 | 211600 | 2-10:46:40 |
| 25 | 230400 | 2-16:00:00 |
| 26 | 250000 | 2-21:26:40 |
| 27 | 270400 | 3-03:06:40 |
| 28 | 291600 | 3-09:00:00 |
| 29 | 313600 | 3-15:06:40 |
| 30 | 336400 | 3-21:26:40 |
| 31 | 360000 | 4-04:00:00 |
| 32 | 384400 | 4-10:46:40 |
| 33 | 409600 | 4-17:46:40 |
| 34 | 435600 | 5-01:00:00 |
| 35 | 462400 | 5-08:26:40 |
| 36 | 490000 | 5-16:06:40 |
| 37 | 518400 | 6-00:00:00 |
| 38 | 547600 | 6-08:06:40 |
| 39 | 577600 | 6-16:26:40 |
| 40 | 608400 | 7-01:00:00 |
E.2. Dlaczego nie mogę wysłać poczty do dużej instytucji z wieloma MX ?
Jeśli otrzymujesz:
deferral: CNAME_lookup_failed_temporarily._(#4.4.3)/
Problem może być związany z tym, że qmail nie potrafi obsługiwać długich odpowiedzi od serwera nazw. Rozwiązaniem tego problemu jest zainstalowanie djbdns. Sprawdź w rozdziale Patche.
Pojawiają się także pytania dlaczego niektórze serwery nie mają tego problemu. Po prostu, w zależności od czasu i kolejności zapytań do twego lokalnego serwera nazw, rozmiar odpowiedzi na zapytanie ANY do "aol.com"może być większy od limitu 512 bajtów w pakiecie UDP albo i nie.
"Albo i nie" najprawdopodobniej nastąpi jeśli rekordy A i MX przeterminują się, a rekordy NS nie. Ponieważ serwery .COM ustawiają 2 dniowy TTL, a serwery AOL 1 godzinny, zwykle może to wystąpić na mniej obciążonych serwerach nazw. W przypadku serwerów bardziej obciążonych jest większa szansa, że będą one miały te rekordy w swoim cache'u uniemożliwiając niespatchowanemu qmail'owi uzyskanie informacji o CNAME.
Lepszym testem jest wysłanie mail'a do nosuchuser@large-mx.ckdhr.com; jeśli opuści kolejkę i powróci w wiadomości odbitej będzie to świadczyło że twoj MTA potrafi wysyłać pocztę do hostów, których lista MX jest dłuższa od 512 bajtów. (Używając pojedyńczego RRset, z pojedyńczym TTL, który przekracza 512 bajtów, problem ten może być zaobserwowany bez zdawania się na czas i kolejność zapytań).
E.3. Czym jest QUEUE_EXTRA?
QUEUE_EXTRA jest zmienną ustawianą w trakcie kompilacji, która określa dodatkowego odbiorcę każdej z dostarczanych wiadomości. Zwykle jest to używane w celu logowania. W FAQ podany jest przykład jak zastosować QUEUE_EXTRA by przechowywać kopie wszystkich wysłanych i odebranych wiadomości.
By użyc QUEUE_EXTRA, dokonaj edycji extra.h i podaj dodatkowego odbiorcę postaci "Trecipient\0", oraz długość stringu QUEUE_EXTRA w QUEUE_EXTRALEN ("\0" liczy się jako jeden znak). Przykład:
#define QUEUE_EXTRA "Tlog\0"
#define QUEUE_EXTRALEN 5
Zatrzymaj qmail'a jeśli pracuje. Jeśli zainstalowałeś skrypt qmailctl z rozdziału Instalacja, możesz to zrobić poprzez:
qmailctl stop
Jeśli nie masz tego skryptu, powinieneś użyć twojego własnego skryptu albo wysłać sygnał TERM do qmail-send.
Następnie przekompiluj qmail'a poprzez:
make setup check
Wpisz do ~alias/.qmail-log komendy, które będą logowały to co chcesz. Na przykład by logować Message-ID:
| awk '/^$/ { exit } /^[mM][eE][sS][sS][aA][gG][eE]-/ { print }'
I na końcu zrestartuj qmail'a.
F. Komunikaty o błędach.
Komunikaty o błędach qmail'a i co one znaczą.
Zajrzyj także do RFC 1893 w celu wyjaśnienia znaczenia kodów błędów z nawiasów.
Ten dodatek nie jest kompletny.
G. Błędy popełniane przez początkujących
Poniższe rzeczy zwykle sprawiają problemy nowym użytkownikom qmail'a
G.1. qmail nie dostarcza poczty do superużytkownika
By uniemożliwić sytuację w której qmail-local uruchamiałby komendy jako użytkownik uprzywilejowany, qmail ignoruje wszystkich użytkowników którzy mają UID równy 0. Jest to opisane na stronie man qmail-getpw.
Nie oznacza to, że qmail nie dostarczy poczty do root'a, oznacza tylko że takie dostarczenie musi nastąpić do użytkownika nieuprzywilejowanego. Zwykle należy stworzyć alias dla użytkownika root poprzez utworzenie pliku ~alias/.qmail-root.
G.2. qmail nie dostarcza wiadomości do użytkowników którzy nie są właścicielami swoich katalogów domowych
Kolejna cecha związana z bezpieczeństwem. Jest to udokumentowane w stronie man qmail-getpw.
G.3. qmail nie dostarcza poczty do użytkowników którzy mają w nazwie wielkie litery
qmail konwertuje wszystko co znajduje się w "części lokalnej" - wszystko na lewo od znaku "@" w adresie, do małych liter. Nie ma strony man która by to opisywała ale jest to opisane w kodzie źródłowym. Natomiast fakt ignorowania użytkowników pisanych wielkimi literami opisany jest w stronie man qmail-getpw.
G.4. qmail zastępuje kropki (.) w adresach rozszerzonych dwukropkami (:).
Kolejna cecha zwiększająca bezpieczeństwo. Celem jest zapobieżenie wędrówce po drzewie katalogów przy użyciu "..". Poprzez zastąpienie kropek dwukropkami qmail upewnia się, że wszystkie pliki .qmail znajdują się w katalogach domowych użytkowników. Udaokumentowane na stronie man qmail-local.
G.5. qmail konwertuje duże litery w adresach rozszerzonych do małych liter
Jest to wynikiem faktu, że qmail dokonuje konwersji całej lokalnej części adresu. Udaokumentowane na stronie man qmail-local.
G.6. qmail nie używa /etc/hosts.
qmail nigdy nie używa /etc/hosts by określić adres IP na podstawie nazwy hosta. Jeśli używasz nazw w plikach kontrolnych, qmail musi mieć dostęp do serwera nazw.
Możliwe jest uruchomienie qmail'a w systemie bez dostępu do serwera nazw. Hosty w plikach kontrolnych (control files) powinny być określone przez adresy IP zawarte w nawiasach kwadratowych ([]), np:
[10.1.2.219]
W chwili obecnej nawiasy kwadratowe nie zawsze są konieczne, jednakże może się to zmienić w przyszłości więc lepiej ich używać.
G.7. qmail nie loguje aktywności SMTP
Z wielu powodów qmail nie loguje połączeń SMTP, odrzuceń, błędnych poleceń ani poprawnych poleceń. tcpserver może być użyty by logować połączenia, a recordio by logować cały ruch STMP. recordio jest częścią pakietu ucspi-tcp. Procedura ta jest udokumentowana w FAQ na http://cr.yp.to/qmail/faq/servers.html#recordio
G.8. qmail nie generuje informacji o opóźnieniach
Jeśli Sendmail nie jest w stanie dostarczyć wiadomości w czasie kilku godzin, zwykle czterech, wysyła informację do nadawcy. Te zawiadomienia wyglądają jak bounce, jednakże nie oznaczają że dostarczenie na pewno się nie powiedzie.
qmail nie wysyła takich ostrzeźeń. Wiadomości niedostarczone wrócą do nadawcy dopiero po spędzeniu czasu równego queuelifetime w kolejce.
G.9. qmail działa powoli jeśli /var/qmail/queue/lock/trigger jest skasowany / ma źle ustawione uprawnienia / jest regularnym plikiem.
qmail-queue i qmail-send komunikują się poprzez nazwany potok o nazwie /var/qmail/queue/lock/trigger. Jeśli coś stanie się z tym potokiem qmail-send nie będzie widział nowych wiadomości przez okres około pół godziny.
Najlepszym sposobem by upewnić się że jest on poprawnie ustawiony jest uruchomienie "make check" z katalogu źródłowego. Jeśli nie jest to możliwe upewnij się że wygląda tak:
# ls -l /var/qmail/queue/lock/trigger prw--w--w- 1 qmails qmail 0 Jul 5 21:25 /var/qmail/queue/lock/trigger
Zwróć szczególną uwagę na "p" na początku linii (oznacza ono, że jest to nazwany potok), tryb (zwłaszcza world writable) oraz właściciela i grupę.
G.10. zapytania DNS lub IDENT mogą spowolniać SMTP
Jeśli qmail-smtpd wolno odpowiada na połączenia problem jest prawdopodobnie spowodowany z powodu odwrotnych zapytań DNS lub zapytań IDENT. Jeśli uruchamiasz qmail-smtpd spod tcpserver'a,usuń opcje "-h", "-p", i "-r" a dodaj "-H", "-P", "-R" i "-l hostname".
Przejrzyj dokumentację tcpserver'a na http://cr.yp.to/ucspi-tcp/tcpserver.html by zapoznać sie ze znaczeniem tych opcji.
G.11. Linie zakończone (CRLF) nie działają
qmail-inject i inne lokalne mechanizmy wprowadzania wiadomości jak sendmail nie działają gdy wprowadzana wiadomośc ma DOS-owe zakończenia linii (CRLF). Inaczej niż Sendmail, qmail wymaga od wiadomości wprowadzanych lokalnie by używały unixowych zakończeń linii (tylko CR). Jest to częsty problem występujący ze skryptami PHP.
G.12. qmail-send lub tcpserver przestają pracować gdy nie mogą generować logów
Jeśli logujesz do logów zarządzanych przez supervise, jak to opisano w rozdziale 2 i logi przestają się zapisywać z jakiegoś powodu: przepełnienie dysku, literówka w skrypcie run script, źle założony katalog z logami itp, potok przepełni się i może spowodować, że usługa zablokuje się lub zawiesi. Napraw ten problem (zob. Rozwiązywanie problemów) a wszystko wróci do normy.
G.13. qmail-smtpd nie sprawdza lokalnej części adresu.
Jeśli example.com jest umieszczone w control/rcpthosts, mail do cokolwiek@example.com zostanie zaakceptowany podczas sesji SMTP. Jeśli cokolwiek jest nieprawidłowa nazwą użytkownika lub aliasu qmail wyśle bounce do nadawcy maila.
Niektóre uproszczone testy relayowania zakładają, że jeśli wiadomość została zaakceptowana to będzie dostarczona. To błąd. Jeśli ktoś twierdzi, że twój system to open relay zarządaj pokazania ci wiadomości która została przez niego przesłana w tym pełny nagłówek, zwłaszcza pole Received a potem porównaj to ze swoimi logami.
G.14. Firewalle mogą blokować dostęp z zewnątrz do twojego serwera SMTP/POP3/IMAP.
Jeśli zainstalowałeś serwer SMTP, POP3 lub IMAP i możesz połączyć się z nim z hosta lokalnego lub hosta w sieci lokalnej ale nie udaje sie to z zewnątrz przyczyna może być firewall.
Pierwszym miejscem gdzie należy popatrzeć jest sam host. Przykładowo Red Hat Linux blokuje SMTP w domyślnej konfiguracji przy użyciu iptables. Inne mechanizmy filtrowania pakietów jak ipchains mogą także to powodować.
Jest także możliwe, ze twój Internet Service Provider (ISP) blokuje określone porty w celu zatrzymania spamu lub innym. Skontaktuj się z ich działem pomocy technicznej po stwierdzeniu, że przyczyna nie leży po stronie twojego firewalla.
G.15. qmail-inject ustawia pole From field do anonymous jeśli USER i LOGNAME nie są ustawione.
Jeśli wiadomość słana poprzez qmail-inject nie zawiera pola From qmail-inject sprawdza zmienne środowiskowe by dowiedzieć się który użytkownik wysyła wiadomość. Sprawdza kolejno: QMAILUSER, MAILUSER, USER i LOGNAME.
Użytkownicy którzy są zalogowani w normalny sposób maja zwykle ustawione USER i/lub LOGNAME ale niektóre skrypty uruchamiane w inny sposób np. z cron'a mogą nie ustawiać żadnej z nich.
By spowodować żeby cron ustawiał w sposób prawidłowy pole From ustaw jedna z opisanych powyżej zmiennych środowiskowych przed wysłaniem wiadomości.
G.16. qmail-send nie zawsze kończy działanie natychmiast po zostaniu zabitym.
Sygnał KILL nie powoduje, że qmail-send kończy działanie natychmiast jeśli jakies wiadomości są w trakcie dostarczania. qmail-send poczeka aż wszystkie procesy qmail-local i qmail-remote zakończą działanie zanim sam przestanie działać tak by móc zapisać rezultaty tych dostarczeń. Z tego powodu "qmailctl restart" lub "qmailctl stop" mogą pokazywać, że qmail-send został zatrzymany nawet jeśli on nadal działa. Zawsze uruchom "qmailctl stat" by sprawdzić czy polecenia stop or restart zostały zakończone.
H. FAQ Life with qmail
H.1. Jaka jest aktualna wersja Life with qmail?
Ta wersja nosi numer 2004-01-26.
H.2. Kto jest wlaścicielem Life with qmail?
Life with qmail is Copyright 1999-2004 David E. Sill
http://Web.InfoAve.Net/~dsill/dave.html
H.3. Na jakiej licencji Life with qmail jest opublikowane ?
Podlega ono OpenContent License w wersji 1.0. Można ją znaleźć na http://www.opencontent.org/opl.shtml. W skrócie: można kopiować, rozdawać lub modyfikować ten tekst pod warunkiem, że jeśli będziesz chciał rozpowszechniać zmodyfikowaną wersję to ona także musi podlegać OpenContent License.
H.4. Czy mogę być zawiadamiany jeśli ukażą się nowe wersje ?
Zapisz się na listę lwq-announce wysyłając wiadomość na adres lwq-announce-subscribe@sws1.ctd.ornl.gov
H.5. Czy można gdzieś rozmawiać na temat LWQ ?
Zapisz się na listę lwq wysyłając maila na adres lwq-subscribe@sws1.ctd.ornl.gov
H.6. Czy Life with qmail zostało przetłumaczone na język?
Być może. LWQ zostało przetłumaczone na kilka jezyków. Zob. http://lifewithqmail.org/trans.html by dowiedzieć się o jego tłumaczeniach.
H.7. Czy Life with qmail jest dostępne w formacie PostScript, PDF, plain text oraz w innych poza HTML'em ?
Tak, różne inne formaty można znaleźć na http://lifewithqmail.org/.
H.8. Używałem Life with qmail i zawiesiło mój komputer / skasowało mój dysk twardy / posiwiałem z jego powodu / zabiło mojego psa / itd.
Przepraszam, naprawdę przepraszam ale Life with qmail nie ma żadnej gwarancji. Zajrzyj do OpenContent License o której już była mowa. Nie dostałem za nie żadnych pieniędzy, napisałem je po to by zrobić coś pożytecznego dla społeczności qmail'owej.
Prawdę mówiąc to pytanie nie jest często zadawane. Mam nadzieję, że nigdy nie będę musiał na nie odpowiedzieć.
H.9. W jaki sposób mogę coś wnieść do LWQ ?
Proszę nadsyłać poprawki, sugestie, krytykę itp do lwq@sill.org.
Jeśli chciałbyś wnieść coś więcej jak np. napisać nowy rozdział lub załącznik swietnie! Skontaktuj się ze mną by dowiedzieć się czy temat o którym chcesz pisać jest czymś co dodam do LWQ, a także że nikt inny już nad tym nie pracuje.
Jeśli chciałbyś zapłacić mi za pracę którą wykonuję także bardzo się cieszę. :) Skontaktuj się ze mną by ustalić szczegóły lub użyj elektronicznego systemu płatniczego PayPal. Przy jego użyciu możesz przesłać na mój adres paypal@dave.sill.org kwoty począwszy od $0.01 i ani ty ani ja nie ponosiemy przy tym żadnych kosztów nawet jeśli będziesz używał karty kredytowej.
Innym sposobem wspierania LWQ bez ponoszenia żadnych kosztów są zakupy w amazon.com przy użyciu tego linku: http://www.amazon.com/exec/obidos/redirect-home/davesill
Dziękuję za wsparcie!
