JustPaste.it

Konfiguracja systemu pocztowego we FreeBSD na bazie qmaila

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/qmail
$/usr/ports/mail/qmail> make install clean
Pamię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ć):
$/etc/mail> cat mailer.conf

# 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
Jak zainstalować qmaila w Slackware Linux można przeczytać tutaj: http://www.linuxstar.pl/qmail.htm

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.conf
# 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.
To ustawienie gwarantuje nieuruchamianie żadnego z procesów sendmaila.

Skrypty startowe

Utworzymy skrypty startowe qmail' w /usr/local/etc/rc.d poprzez podlinkowanie symboliczne:
$/usr/local/etc/rc.d> ls -l | grep qmail

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 &
qmail 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.

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.pl

@ 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
;
W 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.

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 -l
-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
Omówienie ważniejszych plików

  • 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ę
Relaying

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.smtp

127.:allow,RELAYCLIENT=""
192.168.100.1-255:allow,RELAYCLIENT=""
10.1.0.:allow,RELAYCLIENT=""
Następnie konwertujemy go do bazy cdb z której korzysta tcpserver:
$/etc> tcprules /etc/tcp.smtp.cdb /etc/tcp.smtp.tmp < /etc/tcp.smtp 
Teraz 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

Maildir

Natywnym 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 jkowalski

Disk quotas for user jkowalski (uid 9999):
Filesystem usage quota limit grace files quota limit grace
/home 24 20000 20000 14 1000 1000
Założenie skrzynki

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:
$> umask
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:
Szablon

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 Maildir
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:
Wpis do bazy skrzynek pocztowych

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