Qmail jest kompleksowym, modularnym i bardzo wydajnym narzędziem do transportu poczty elektronicznej, autorstwa prof. Dana J. Bernstein'a. Główną cechą, odróżniającą go od większości MTA (ang. mail transport agent) zbudowanych na wzór sendmail'a jest właśnie modularność oraz prostota, a co za tym idzie -- bezkonkurencyjne bezpieczeństwo całego rozwiązania. Przyjrzyjmy się zatem poszczególnym zaletom takiego rozwiązania.
Bezpieczeństwo. Wydaje się ono głownym powodem, dla którego administratorzy decydują się na używanie qmail'a. Mimo, że ostatnia wersja oprogramowania pochodzi z 1998 r., do tej pory nie odnaleziono w nim żadnego błędu. Tak więc nikt nie odebrał nagrody w wysokości $1000, przeznaczonej dla osoby, która pierwsza odkryje ,,dziurę'' zagrażającą bezpieczeństwu. Niewątpliwie związane jest to z prostotą i przejrzystością projektu, a także nietypowym stylem programowania. Autor nie używa prawie żadnej funkcji oferowanej przez libc, zamiast tego buduje własne biblioteki, korzystające bezpośrednio z wywołań systemowych jądra.
Qmail gwarantuje, że żadna wiadomość nie zaginie; unikalny algorytm zarządzania kolejką poczty zapewnia, że wiadomość nie będzie usunięta z kolejki, dopóki nie zostanie dostarczona. Mechanizm ten jest również odporny na zaniki zasilania podczas doręczania, a w najgorszym wypadku, powstanie duplikat wiadomości. Domyślny mechanizm doręczania poczty do skrzynki-pliku (ang. mailbox) może zostać zastąpiony mechanizmem doręczania do skrzynki-katalogu (ang. maildir), co znacznie podwyższa pewność doręczenia poczty.
Każdy moduł qmail'a działa z prawami oddzielnego użytkownika w systemie. Z prawami superużytkownika działają jedynie części qmail-start oraz qmail-lspawn, a do żadnej z nich użytkownik lokalny ani zdalny nie ma dostępu. Dopisywanie wiadomości do kolejki realizowane jest poprzez moduł qmail-queue, działający z prawami na to pozwalającymi (euid=qmailq). Naruszenie bezpieczeństwa dowolnego z kont, z których działa moduł qmail'a nie oznacza naruszenia bezpieczeństwa całego systemu; moduły nigdy nie ufają sobie wzajemnie.
Domyślnie, qmail nie dopuszcza przesyłania żadnych obcych wiadomości przez
system, w związku z tym uniemożliwa niekontrolowane rozsyłanie spamu. Wyjątki
można tworzyć poprzez ustawienie z poziomu tcpservera zmiennej
$RELAYCLIENT dla wybranych hostów. Poprzez edycję pliku
control/badmailfrom, można wykluczyć odbieranie poczty z
hostów, które nadużywają tej usługi.
Wydajność. Według testów autora, qmail potrafi dostarczyć 9 mln lokalnych wiadomości dziennie na komputerze klasy Pentium 100. Uzyskano to dzięki przemyślanej konstrukcji wszystkich modułów oraz zastosowania ciekawych rozwiązań, takich jak: rezygnacja z systemowych demonów inetd oraz syslogd, na miejscu których działają pakiety daemontools oraz ucspi-tcp. Qmail przetwarza bardzo niewielką ilość prostych plików konfiguracyjnych, natomiast tablice użytkowników wirtualnych trzymane są w haszowanej bazie cdb, wielokrotnie szybszej niż standardowy format Berkeley DB.
InstalacjaPakiet qmail jest dostępny zarówno w postaci źródłowej, jak i skompilowanych paczek rpm i deb. Ściągnąć go można z nieoficjalnej strony pakietu: http://www.qmail.org.
Kompilacja ze źródeł lub instalacja z paczek nie powinna sprawić nikomu większych kłopotów. Po zainstalowaniu pakiet wymaga jednak kilku niewielkich ingerencji w system, zanim zostanie uruchomiony.
Piewszym krokiem jest wyłączenie i dezinstalacja dotychczas używanego MTA; najczęściej domyślnym oprogramowaniem obsługującym pocztę jest pakiet Sendmail. Na jego miejsce powinien trafić wrapper, współdziałający z innymi aplikacjami.
Kolejnym krokiem jest umożliwienie pakietowi odbierania poczty
przychodzącej do systemu. Uczynić to można poprzez dodanie odpowiedniego
wpisu do pliku /etc/inetd.conf oraz przeładowanie demona
inetd, który nie jest niestety rozwiązaniem zapewniającym odpowiednią
wydajność i bezpieczeństwo. Autor pakietu qmail poleca zastosowanie
oprogramowania daemontools oraz ucspi-tcp, stanowiącego
doskonałą platformę do uruchamiania systemowych demonów, zarówno
samodzielnych, jak i zaprojektowanych dla inetd. Obie aplikacje, łącznie
ze z niedużym pakietem qmail-conf, pomagającym bezboleśnie skonfigurować
qmail'a do pracy z daemontools i ucspi-tcp
można znaleźć na stronie http://www.qmail.org.
W tym momencie, pakiet qmail jest już gotowy do uruchomienia. Wystarczy
jedynie przygotować skrypt startowy lub posłużyć się jednym z gotowowych,
znajdujących się w katalogu /var/qmail/boot. Prawdopodobnie
większość administratorów wybierze skrypt home, ponieważ jest
on najbardziej zbliżony do rozwiązań z innych MTA (logi wysyłane do
syslogd, poczta przechowywania w $HOME/Mailbox),
co nie oznacza, że najwydajniejszym. Na moich serwerach, pakiet qmail jest
uruchamiany przez daemontools, a moduł qmail-smtpd poprzez
ucspi-tcp, nadzorowanego również przez daemontools; poczta
jest dostarczana do skrzynek-katalogów w $HOME/Maildir,
udostępniana użytkownikom poprzez qmail-pop3d oraz lokalnie,
pakietem mutt.
Wybrany skrypt startowy kopiujemy do /var/qmail/rc oraz
uruchamiamy go. Teraz należy przeprowadzić testy doręczania lokalnej
i zdalnej poczty.
Gdy wszystko już działa, należy przystąpić do przystosowania używanego
oprogramowania do pracy z qmail'em. Większość klientów poczty (MUA)
bez problemu radzi sobie ze zmianą lokalizacji skrzynki pocztowej -
w tym wypadku wystarczy ustawienie zmiennej $MAIL. Zdarza się
jednak oprgramowanie usilnie szukające poczty w katalogach
/var/mail lub /var/spool/mail. W tym wypadku należy
oczywiście utworzyć dowiązania symboliczne do skrzynek znajdujących się w
katalogach domowych użytkowników. Osobnym problemem jest współpraca ze
skrzynkami pocztowymi w postaci katalogów ($HOME/Maildir),
które -- choć zapewniają dużo większą wydajność i bezpieczeństwo, niż
rozwiązanie natywne, to jednak są obsługiwane przez bardzo nieliczne
oprogramowanie. Przykładem tutaj może być doskonały MUA -- mutt, czy
opisany dalej sqwebmail. W pozostałych przypadkach z pomocą przychodzi
wrapper /var/qmail/bin/maildir2mbox, który w razie potrzeby
konwertuje katalog do pojedynczego pliku, zgodnego z formatem mbox.
Część administratorów stanie teraz przed wyborem demona obsługującego
protokół POP3. Rozwiązanie dostarczone z qmail'em przystowoane
jest wyłącznie do obsługi formatu maildir. Do jego zainstalowania
potrzebny jest dodatkowy program checkpassword dostępny na witrynie
http://www.qmail.org, natomiast
konfiguracja ogranicza się jedynie do dopisania stosownej linijki do pliku
/etc/inetd.conf lub uruchomieniu serwisu z poziomu
daemontools. Rozwiązań obsługujących skrzynki w formacie mbox
jest bardzo wiele. Wszystkie one powinny bezproblemowo współpracować
z qmail'em, a ich instalacja i konfiguracja leży poza zakresem tego
artykułu.
Najczęściej stosowane funkcje związane są z obsługą domen wirtualnych, aliasów pocztowych, a także list wysyłkowych. Wszystkie te funkcje są bezproblemowo obsługiwane przez qmail'a.
Aliasy systemowe dostępne są w katalogu /var/qmail/alias.
Są one pojedynczymi plikami o nazwach w postaci .qmail-nazwa,
zawierającymi
odwołanie do innego konta (ew. listy kont) lub programu. Dostępne
są również aliasy domyślne w postaci plików .qmail-nazwa-default,
przekazujące całą pocztę wysyłaną na adres nazwa-*@host.
Użytkownicy mogą również tworzyć swoje własne aliasy, bez konieczności
ingerencji administratora. Osiągnąć to można poprzez utworzenie pliku
$HOME/.qmail-nazwa, działanie takie sprawi, że docierać do niego
będzie poczta wysłana na adres uzytkownik-nazwa@host. Domyślnym
plikiem, który brany jest podczas doręczania poczty do użytkownika, jest plik
$HOME/.qmail.
Domeny wirtualne realizowane są poprzez dopisanie ich do pliku
/var/qmail/control/rcpthosts i
/var/qmail/control/virtualdomains oraz przeładowanie
modułu qmail-send. Poczta przychodząca na konto w domenie wirtualnej
jest przekierowywana do zdefiniowanego aliasa. W tym wypadku niezwykle
przydatne okazują się opisane wyżej aliasy domyślne.
Niektóre firmy pragną udostępniać pocztę swoim użytkownikom poprzez interfejs na stronie WWW. W chwili obecnej istnieje na rynku mnóstwo różnych rozwiązań, napisanych najczęściej w języku Perl lub PHP i udostępniających pocztę poprzez protokoły HTTP, HTTPS, a nawet WAP (np. Basilix). Z punktu widzenia użytkowników qmail'a, interesujący może być pakiet, umożliwiający wykorzystanie skrzynek w formacie maildir, dlatego zdecydowałem się opisać jedno z takich rozwiązań. Jest nim napisany w języku C program sqwebmail, bardzo wydajny w porównaniu z konkurencyjnymi rozwiązaniami.
Wśród możliwości programu, interesującymi mogą okazać się: obsługa hierarchicznych folderów pocztowych, wirtualne konta, ksiązka adresowa, autoryzacja poprzez LDAP lub vpopmail, obsługa MIME i wiadomości w HTMLu oraz sprawdzanie pisowni poprzez pakiet ispell.
Program można znaleźć na stronie
http://inter7.com/sqwebmail/
w postaci źródłowej, przystosowanej do automatycznej kompilacji przez
rpm. Jego instalacja sprowadza się do przekopiowania skompilowanego
programu do katalogu dla skryptów CGI (najczęściej jest to
/home/httpd/cgi-bin) oraz zezwoleniu na jego wykonywanie.
Od tej pory użytkownicy mogą korzystać z funkcjonalnego, aczkolwiek dość ubogiego interfejsu do poczty elektronicznej. Modularna budowa, z zewnętrznymi dokumentami HTML pozwala na szybką lokalizację i zmianę wyglądu, przykładem może być poniższy wygląd aplikacji.
Interfejs użytkownika jest bardzo prosty w obsłudze, jednocześnie będąc wygodnym. Po otworzeniu strony, zawierającej zainstalowany pakiet sqwebmail, użytkownik jest proszony o zalogowanie się:
Autoryzacja użytkownika jest oparta o PAM (ang. Pluggable Authentication Modules) i prowadzi do uzyskania jednorazowego identyfikatora sesji, używanego później pomiędzy poszczególnymi stronami, a przekazywanego wewnątrz odnośników.
Po udanej autoryzacji, użytkownik otrzymuje dostęp do ekranu głównego, umożliwiającego operacje na folderach i książce adresowej, wysyłanie oraz otrzymywanie wiadomości.
Po wybraniu folderu, ukazuje się jego zawartość, w postaci odnośników do poszczególnych wiadomości. Wybranie odnośnika powoduje wyświetlenie wiadomości oraz zestawu ikonek pozwalających na: przejście do następnej lub poprzedniej wiadomości, skasowanie wiadomości, przeniesienie wiadomości do innego folderu, odpisanie, przesłanie dalej, wyświetlenie pełnych nagłówków oraz wydrukowanie. Oczywiście sqwebmail w pełni obsługuje załączniki do poczty (MIME).
Kompozycja nowego maila jest równie prosta. W menu głównym wystarczy wybrać stosowną opcję, a wyświetlona strona, będzie przypominać okno kompozycji z typowego graficznego mailera.
Nie bez znaczenia jest również możliwość zmiany konfiguracji pakietu. Każdy użytkownik może dostosować wygląd aplikacji do swoich wymagań (sortowanie wiadomości, ilość wiadomości na stronie), dołączać automatycznie podpis oraz zmieniać swoje hasło. Wszystkie te cechy czynią sqwebmaila doskonałą aplikacją dla użytkowników wymagających dostępu do swojej poczty przez WWW.

Wszystkie materiały na mojej stronie dostępne są na licencji Creative Commons Uznanie autorstwa-Użycie niekomercyjne-Na tych samych warunkach 2.5 Polska.