WSTĘP
Czym jest qmail?qmail to bezpieczny i wydajny serwer poczty internetowej posługujący sie protokołem SMTP. Został zaprojektowany dla typowych serwerów UNIX i charakteryzuje się doskonałą wydajnością w działaniu pod bardzo dużym obciążeniem przy ogromnych ilościach przetwarzanej poczty. Potrafi obsługiwać wirtualne skrzynki pocztowe bez konieczności zakładania tradycyjnych kont. Jego autorem jest profesor D.J.Bernstein. Architektura qmaila (w przeciwieństwie do Sendmaila) została opracowana w oparciu o wiele małych, sprawnych i dedykowanych programów zajmujących sie konkretnymi zadaniami serwera pocztowego. Każdy z nich wykonuje swoje zadania efektywnie i bezpiecznie. Każdy posiada minimalne uprawnienia niezbędne do wykonywania czynności jedynie jemu przeznaczonych i niczego ponadto. W tym artykule opiszę proces przygotowania qmaila do pracy ze skrzynkami pocztowymi w formacie Maildir, które charakteryzują się przechowywaniem każdego emaila w osobnym pliku.
INSTALACJA
W systemie FreeBSD 4.x instalacja qmaila 1.3 jest niezwykle prosta ze względu na mechanizm "/usr/ports". Każdy kto kiedyś "ręcznie" pierwszy raz instalował qmaila bez użycia "ports" ze względu na jego "specyficzną" filozofię zapewne spędził nad dokumentacją wiele godzin ;-). Teraz jednak wystarczy wykonać poniższe czynności a system zostanie po samoczynnym ściągnięciu źródeł z internetu automatycznie skompilowany, wstępnie skonfigurowany i zainstalowany:$/> cd /usr/ports/mail/qmailPamiętajmy że domyślnym MTA we FreeBSD jest "fabrycznie" sendmail tak więc instalacja qmaila zmieni parametry w /etc/mail/mailer.conf na poniższe (co zresztą warto sprawdzić):
$/usr/ports/mail/qmail> make install clean
$/etc/mail> cat mailer.confJak zainstalować qmaila w Slackware Linux można przeczytać tutaj: http://www.linuxstar.pl/qmail.htm
# Configuration for mailwrapper is kept in /etc/mail/mailer.conf.
# Replace that file with this one to enable qmail under a sendmail
# disguise. Very useful.
#
sendmail /var/qmail/bin/sendmail
send-mail /var/qmail/bin/sendmail
mailq /var/qmail/bin/qmail-qread
newaliases /var/qmail/bin/newaliases
Wyłączenie sendmaila
Teraz wyłączamy w /etc/rc.conf automatyczne uruchamianie sendmaila na rzecz qmaila, który będzie startował poprzez skrypty w /usr/local/etc/rc.d gdzie jego start podzielimy na trzy niezależne funkcjonalnie podsystemy:
$/etc>grep sendmail rc.confTo ustawienie gwarantuje nieuruchamianie żadnego z procesów sendmaila.
# autostartowy skrypt MTA (można tu też podpiąć od razu qmaila)
mta_start_script="/etc/rc.sendmail"
# Settings for /etc/rc.sendmail:
sendmail_enable="NONE" # Run the sendmail inbound daemon (YES/NO/NONE).
# If NONE, don't start any sendmail processes.
sendmail_flags="-L sm-mta -bd -q30m" # Flags to sendmail (as a server)
sendmail_submit_enable="NO" # Start a localhost-only MTA for mail submission
sendmail_submit_flags="-L sm-mta -bd -q30m -ODaemonPortOptions=Addr=localhost"
sendmail_outbound_enable="NO" # Dequeue stuck mail (YES/NO).
sendmail_outbound_flags="-L sm-queue -q30m" # Flags to sendmail (outbound only)
sendmail_msp_queue_enable="NO" # Dequeue stuck clientmqueue mail (YES/NO).
sendmail_msp_queue_flags="-L sm-msp-queue -Ac -q30m" # Flags for sendmail_msp_queue daemon.
Skrypty startowe
Utworzymy skrypty startowe qmail' w /usr/local/etc/rc.d poprzez podlinkowanie symboliczne:
$/usr/local/etc/rc.d> ls -l | grep qmailqmail może być uruchamiany także poprzez inetd (odpowiednie wpisy w /etc/inetd.conf), jednak ja zdecydowałem sie na wykorzystanie pakietu ucspi-tcp tego samego autora. Program tcpserver z tego pakietu umożliwia nam ustawianie wielu specyficznych dla qmaila parametrów startowych. Kompilacja ze źródeł i instalacja tego pakietu jest niezwykle prosta, może być także we FreeBSD wykonana poprzez mechanizm "ports". Dodatkowym pakietem niezbędnym do autoryzacji usługi pop jest pakiet checkpassword tego samego autora. Jego instalacja jest równie banalna jak w poprzednim przypadku.
lrwx------ 1 root wheel 19 14 Wrz 15:32 pop3d.sh -> /var/qmail/pop3d.rc
lrwx------ 1 root wheel 22 14 Wrz 15:32 reciving.sh -> /var/qmail/reciving.rc
lrwx------ 1 root wheel 21 14 Wrz 15:32 sending.sh -> /var/qmail/sending.rc
$/usr/local/etc/rc.d> cd /var/qmail ; ls -l *.rc
-r-xr-xr-x 1 root qmail 385 Aug 24 1999 pop3d.rc
-r-xr-xr-x 1 root qmail 842 Nov 24 1999 reciving.rc
-r-xr-xr-x 1 root qmail 311 Aug 24 1999 sending.rc
$/var/qmail> cat pop3d.rc
#!/bin/sh
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to Maildir format by default
#
# uruchamianie uslugi pop (odbior poczty ze skrzynek)
pathtmp=$PATH
PATH=/var/qmail/bin:$PATH
/usr/local/bin/tcpserver 0 pop3 /var/qmail/bin/qmail-popup twojhost.jakasdomena.pl \
/bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir &
$/var/qmail> cat reciving.rc
#!/bin/sh
#
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to Maildir format by default
#
# uruchamianie uslug smtpd (przyjmowanie poczty przez serwer)
pathtmp=$PATH
PATH=/var/qmail/bin:$PATH
# wywolanie z plikiem adresow relay oraz po wdrozeniu spamcontrol
/usr/local/bin/tcpserver -v -x /etc/tcp.smtp.cdb -u 82 -g 81 0 smtp \
/var/qmail/bin/qmail-smtpd 2>&1 | /var/qmail/bin/splogger smtpd &
$/var/qmail> cat sending.rc
#!/bin/sh
#
# Using splogger to send the log through syslog.
# Using qmail-local to deliver messages to Maildir format by default
#
# uruchamianie procesow wysylki poczty przez serwer
pathtmp=$PATH
PATH=/var/qmail/bin:$PATH
/var/qmail/bin/qmail-start ./Maildir/ splogger qmail &
Tak zainstalowany w podstawowej konfiguracji qmail wraz z dodatkowymi modułami jest już prawie gotowy do działania. Czas dokonać niezbędnych wpisów w DNS oraz w plikach sterujących działaniem qmaila. W przytoczonych powyżej skryptach startowych użyłem dodatkowego modułu spamcontrol którego opis konfiguracji i instalacji przedstawiam w kolejnych rozdziałach. Start serwera automatycznie powoduje uruchomienie skryptów startowych i tym samym rozpoczęcie działania przez qmaila.
Oczywiście możemy także te skrypty uruchomić "ręcznie". Rozdzielenie funkcji na trzy oddzielne skrypty pozwala na "dłubanie" przy qmail'u bez konieczności zatrzymywania całego serwera poczty. Przykładowo zmieniając coś przy części odbiorczej możemy jedynie zatrzymać odbieranie przesyłek podczas gdy wysyłka poczty z kolejki pocztowej nadal działa. Inną metodą jest uruchamianie poprzez tzw. "svc" z pakietu daemontools co opisuje dokumentacja qmaila.
Jeśli oprócz usługi pop3 chcemy także udostępnić możliwość "katalogowego" czytania poczty poprzez usługi imap to możemy zainstalować i skonfigurować pakiet courier-imap, który dedykowany jest właśnie do współpracy ze skrzynkami pocztowymi typu Maildir.
DNS
Działanie serwera pocztowego wymaga ustawienia w opisie strefy dns odpowiednich wpisów zapewniających przyjmowanie i obsługę poczty dla całej domeny. Poniżej przedstawiam taką strefę (przykład dla bind'a) wraz z rekordem MX (Mail eXchanger):$>cd /etc/namedb/s ; head -12 jakasdomena.plW przykładowej strefie domeny vt.pl rekord MX wskazuje, że cała poczta kierowana do tej domeny jest obsługiwana przez serwer voyager.vt.pl i jest to warunek konieczny dla działania wysyłki poczty "po domenie". Nie będę przedstawiać tu szczegółowych opisów konfiguracji serwera usługi dns bowiem nie to jest celem tego artykułu. Zainteresowanych odsyłam do dokumentacji ich serwera dns czy to bind'a czy djb-dns. Pamiętajmy, że każda zmiana w pliku strefy wymaga zwiększenia nr seryjnego i restart dns'a.
@ IN SOA twojhost.jakasdomena.pl. hostmaster.jakasdomena.pl. (
200210081235
8H ; Refresh
2H ; Retry
1W ; Expire
1D ) ; Minimum
;
NS twoj.primary.dns.jakasdomena.pl.
NS twoj.secondary.dns.innadomena.pl.
MX 10 twojhost
;
KONFIGURACJA
Pliki konfiguracyjne qmaila znajdują się w katalogu /var/qmail/control i mają różnoraki wpływ na jego działanie i zachowanie. Poniższy listing przedstawia pliki po wdrożeniu modułu spamcontrol oraz PolSpam:$/var/qmail/control> ls -lOmówienie ważniejszych plików
-rw-rw-r-- 1 root wheel 0 Nov 11 13:14 badmailfrom
-rw-r--r-- 1 root qmail 4 Nov 11 11:47 badmailpatterns
-rw-r--r-- 1 root qmail 4 Nov 11 11:48 badrcptpatterns
-rw-r--r-- 1 root qmail 44 Nov 15 09:17 badrcptto
-rw-r--r-- 1 root qmail 1053293 Nov 17 13:31 blackholedsender
-rw-r--r-- 1 root qmail 0 Nov 11 12:21 databytes
-rw-r--r-- 1 root qmail 6 Nov 11 11:37 defaultdomain
-rw-r--r-- 1 root qmail 6 Aug 19 1999 defaulthost
-rw-r--r-- 1 root qmail 60 Nov 11 11:41 locals
-rw-r--r-- 1 root qmail 0 Nov 11 11:04 maxrecipients
-rw-r--r-- 1 root qmail 14 Nov 11 11:37 me
-rw-r--r-- 1 root qmail 0 Nov 11 11:03 nodnscheck
-rw-r--r-- 1 root qmail 6 Nov 11 11:37 plusdomain
-rw-r--r-- 1 root qmail 50 Nov 11 11:42 rcpthosts
-rw-r--r-- 1 root qmail 0 Nov 11 11:02 relayclients
-rw-r--r-- 1 root qmail 6 Nov 11 11:49 relaydomains
-rw-r--r-- 1 root qmail 11 Nov 11 12:17 relaymailfrom
-rw-r--r-- 1 root qmail 9441280 Nov 17 13:31 spammers.db
-rw-r--r-- 1 root qmail 3 Nov 11 12:32 tarpitcount
-rw-r--r-- 1 root qmail 2 Nov 11 12:03 tarpitdelay
-rw-r--r-- 1 root qmail 277 Nov 11 11:45 uwaga.txt
-rw-r--r-- 1 root qmail 20 Aug 19 1999 virtualdomains
- badmailfrom adresy lub domeny, od których serwer nie przyjmie i zwróci pocztę kierowaną do niego
- badmailpatterns wyrażenia regularne (regexp) ogólnie opisujące wzorzec adresów lub domen nadawcy, od których serwer nie przyjmie i zwróci pocztę kierowaną do niego
- badrcptpatterns wyrażenia regularne (regexp) ogólnie opisujące wzorzec adresów lub domen odbiorcy, do których serwer nie przyjmie i zwróci pocztę kierowaną do niego
- blackholedsender nazwy hostów lub domen, od których przychodzące połączenia do serwera poczty w ogóle nie będą przyjmowane, do tego pliku trafia baza spamerów aktualizowana z serwisu PolSpam
- nodnscheck tu znajdują się nazwy hostów lub domen, z których przy przyjmowaniu poczty serwer nie będzie sprawdzał zgodności z revdns
- rcpthosts nazwy hostów, dla których serwer przyjmuje pocztę
- relaydomains nazwy domen, od których serwer przyjmuje i przetwarza pocztę do dalszej wysyłki
- relaymailfrom adresy email które mają zezwolenie na przyjmowanie poczty do dalszej wysyłki
- maxrecipients maksymalna liczba jednoczesnych odbiorców w pojedynczym mailu
- tarpitcount liczba jednoczesnych odbiorców w pojedynczym mailu po której zostanie aktywowane opóźnienie przyjmowania poczty
- tarpitdelay czas opóźnienia przyjmowania poczty tzw. "tarpiting"
- databytes maksymalny rozmiar (w bajtach) maila
- virtualdomains nazwy domen wirtualnych, dla których serwer przyjmuje pocztę
qmail jest systemem pocztowym, w którym należy określić z jakich adresów IP lub domen lub adresów email dozwolone jest przyjęcie poczty do dalszej wysyłki czyli tzw. relaying. Jest kilka metod na odpowiednie skonfigurowanie tego mechanizmu. Nie wolno otwierać relayowania poczty na cały świat bo bardzo łatwo można trafic do antyspamerskich baz typu ORBs tym samym blokując sobie serwer, bowiem nagle okazuje się że inne serwery poczty nie chcą przyjmować od nas poczty ze względu na naszą otwartość dla spamerów.
Mechanizm ten zapewnia udostępnia nam moduł tcpserver. Odpowienie wywołanie w skrypcie startowym reciving.sh pozwala na korzystanie przez tcpserver z dodatkowego pliku /etc/tcp.smtp.cdb bazy adresów IP, od których dozwolone jest przyjęcie poczty w celu jej relayowania. W tym celu tworzymy tekstowy plik ze spisem tych adresów IP:
$/etc> head -3 tcp.smtpNastępnie konwertujemy go do bazy cdb z której korzysta tcpserver:
127.:allow,RELAYCLIENT=""
192.168.100.1-255:allow,RELAYCLIENT=""
10.1.0.:allow,RELAYCLIENT=""
$/etc> tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtpTeraz do dalszego przekazania zostanie przyjęta jedynie poczta z wyspecyfikowanych adresów IP hostów. Dodatkowo przy wykorzystaniu modułu spamcontrol możemy zezwolić na relayowanie poczty na podstawie domeny czy adresu nadawcy (pliki relaydomains i relaymailfrom).
SKRZYNKI
MaildirNatywnym formatem skrzynek pocztowych qmaila jest format Maildir, który ze względu na przechowywanie przesyłek w odrębnych plikach jest szczególnie odporny na różne rodzaje awarii systemu plików serwera, bowiem w razie np. awarii zasilania (gdy nie mamy ups'a) podczas zapisu poczty do skrzynki, utracić można jedynie jeden email, w przeciwieństwie do formatu mailbox gdzie wszystkie przesyłki są w jednym pliku, co grozi całkowitą utratą całej poczty w tej hipotetycznej sytuacji. Do obsługi poczty w trybie terminalowym polecam program mutt, który potrafi obsłużyć skrzynki pocztowe zarówno typu mailbox jak i Maildir.
Quota
Każdy z użytkowników poczty powinien mieć założoną skrzynkę pocztową. Skrzynki są zakładane w katalogu domowym użytkownika i oczywiście podlegają restrykcji zarówno względem ilości miejsca jak i ilości plików/przesyłek. Dba o to mechanizm quoty i obejmuje w tym przypadku zarówno pocztę jak i pozostałe pliki użytkownika. Poczta jest przechowywana z prawami użytkownika i dlatego można mu limitować jej objętość:
$> quota jkowalskiZałożenie skrzynki
Disk quotas for user jkowalski (uid 9999):
Filesystem usage quota limit grace files quota limit grace
/home 24 20000 20000 14 1000 1000
Jednorazowe założenie skrzynki polega na założeniu określonej struktury katalogów w $HOME (katalogu domowym) użytkownika. Do tego celu służy polecenie maildirmake wywoływane w następujący sposób:
$> umaskSzablon
022
$> cd /home/jkowalski
$/home/jkowalski> maildirmake Maildir
$/home/jkowalski> chown -R jkowalski:jkowalski Maildir ; chmod -R g-rwx,o-rwx Maildir
$/home/jkowalski> ls -lR Maildir
total 3
drwx------ 2 jkowalski jkowalski 512 Mar 31 2000 cur
drwx------ 2 jkowalski jkowalski 512 Oct 25 19:02 new
drwx------ 2 jkowalski jkowalski 512 Oct 25 15:10 tmp
Maildir/cur:
Maildir/new:
Maildir/tmp:
Możemy wymusić automatyczne zakładanie Maildir'a każdemu nowo tworzonemu użytkownikowi poprzez założenie takiej struktury jako szablonu w /usr/share/skel i wtedy gdy zakładamy użytkownika np. poleceniem adduser jkowalski to system automatycznie skopiuje nam także Maildir'a wraz z innymi plikami typu dot.profile itp. Jedyną różnicą jest właściciel i grupa pliku która zostanie automatycznie zmieniona na użytkownika i jego grupe po tej operacji:
$/usr/share/skel> ls -lR MaildirWpis do bazy skrzynek pocztowych
total 3
drwx------ 2 root wheel 512 Jan 9 2002 cur
drwx------ 2 root wheel 512 Jan 9 2002 new
drwx------ 2 root wheel 512 Jan 9 2002 tmp
Maildir/cur:
Maildir/new:
Maildir/tmp:
Czas na dopisanie skrzynki użytkownika do bazy skrzynek qmaila. W celu zwiększenia wydajności qmail używa specjalnych plików baz danych cdb. Tak jak w przypadku bazy hostów relayowanych, dopisanie skrzynki polega na dodaniu odpowiedniego wpisu "ulubionym edytorem" do pliku tekstowego a następnie jego konwersję do pliku bazy cdb. Przykładowy wpis:
$> cd /var/qmail/users
$/var/qmail/users> cat assign
=jan.kowalski:jkowalski:9999:9999:/home/jkowalski:::
Źródło: http://blog.siebab.net/2007/05/konfiguracja-systemu-pocztowego-we.html