Qmail – istalace a konfigurace

wersja oryginalnawersja oryginalna

http://www.debianusers.pl/print.php?aid=29

 

Instalacja i konfiguracja qmaila (ze źródeł)

Sendmail

Od redakcji

Zdecydowaliśmy się opublikować ten tekst, choć proponowane w nim rozwiązania nie są do końca zgodne z filozofią Debiana i mogą wyrabiać niewłaściwe nawyki zwłaszcza wśród jego początkujących użytkowników. Nie mamy jednak zamiaru cenzurować rozwiązań, które nie są „jedynie słusznymi“. Prawo wyboru pozostawiamy użytkownikom systemu. Uważamy, że artykuł ten poszerza tematykę poruszoną w artykule Qmail + maildir + maildrop + courier-imap (courier-pop) i może być interesujący również dla bardziej „ortodoksyjnych“ debianowców.

Wstęp

W artykule tym chciałbym pokazać w jaki sposób zainstalować qmaila ze źródeł, a nie z gotowej już paczki. Dlaczego robię to na przekór filozofii systemu? Moim zdaniem taka instalacja pomaga zrozumieć jego architekturę i jeśli qmail z jakiś powodow nie robi tego, co powinien, to łatwiej jest znaleźć błąd w trakcie instalowania niż potem w binariach. Proces instalacji jest także dokładnie omówiony w dołączonej do źródeł obszernej dokumentacji. Poza tym w trakcie konfiguracji ze źródeł program sprawdza nasz komputer i kompiluje się tylko z potrzebnymi opcjami, natomiast w przypadku binarnego pakietu dostajemy program skompilowany na innej maszynie niż nasza, z włączonymi wszystkimi opcjami, które nie zawsze są nam potrzebne.

Spis treści

1. O qmailu

Qmail jest jednym z najbezpieczniejszych (o ile nie najbezpieczniejszym) serwerem SMTP. Jest on przeznaczony głównie dla użytkowników sendmaila, znanego z dużej ilości błędów. Więcej o historii i zaletach qmaila możesz przeczytać w dokumencie Life with qmail.

2. Instalacja

2.1. Przed instalacją

Najpierw musisz zobaczyć jaki serwer pocztowy MTA (ang. Mail Transport Agent) jest zainstalowany w Twoim systemie. W Debianie domyślnie jest nim exim. Należy go więc zmienić na sendmaila, gdyż qmail został właśnie stworzony by zastępić znanengo z wielu „dziur“ sendmaila i powinno się go na nim instalować. Można oczywiście odinstalować wszystkie serwery MTA i zainstalować qmaila, ale z doświadczenia wiem, że dpkg będzie chciał usunąć niektóre pakiety związane z poczta i będą tworzyć się konflikty…

Aby usunąć exima wystarczy zainstalować sendmaila, gdyż pakiet ten powoduje konflikt (?) z eximem i system sam zaproponuje jego usunięcie. Najprościej to zrobić korzystając oczywiście z APT-a:

apt-get install sendmail

UWAGA: sprawdź również czy w Twoim pliku /etc/services znajduje się poniższa linijka:

smtp            25/tcp          mail

Jeśli jej nie ma, to należy ją dopisać samemu.

2.2. Instalowanie źródeł

Najpierw pobieramy źródła qmaila. Możemy je ściągnąć stąd. Następnie rozpakowujemy je za pomocą komendy tar xzvf qmail-1.0.3.tar.gz i tworzymy katalog /var/qmail. Potem tworzymy grupy i użytkowników potrzebnych do prawidłowego skompilowania i działania programu:

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

Teraz przy pomocy polecenia cd qmail-1.0.3 wchodzimy do źródeł i wydajemy komendę make setup check. Po jej pomyślnym zakończeniu wydajemy polecenie ./config, gdy korzystamy z serwera DNS lub ./config-fast pełna.nazwa.hosta, gdy …wpp (co to jest wpp?). Więcej szczegółów na ten temat znaleźć można w pliku INSTALL.ctl.

Kolejnym krokiem jest stworzenie aliasów:

cd /var/qmail
(cd ~alias; touch .qmail-postmaster .qmail-mailer-daemon .qmail-root)
chmod 644 ~alias/.qmail

Jeśli do nowo utworzonych plików znajdujących się w katalogu /var/qmail/alias niczego nie wpiszemy, to wszystkie wiadomości przeznaczone do użytkowników, których nazwy są podane w postaci alias/.qmail-użytkownik (gdzie użytkownik to alias, który definiujemy) będa składowane w pliku /var/qmail/alias/Mailbox lub katalogu /var/qmail/alias/Maildir. Aby wiadomości były dostarczane do innego użytkownika (bezpieczniejsza opcja), należy wpisać do pliku .qmail-użytkownik adres użytkownika, do którego mają być one przesyłane. Dla przykładu, jeśli stworzymy plik alias/.qmail-luser i wpiszemy do niego user, to wiadomości przeznaczone dla lusera będą przychodziły na konto user.

Ja osobiście dodałem jeszcze użytkowników webmaster, admin, administrator, postmaster, qmail, sendmail, np.:

touch /var/qmail/alias/.qmail-webmaster
chmod 644 /var/qmail/alias/.qmail-webmaster

Następnie należy usunąć wywołanie sendmaila ze skryptów startowych. W tym celu robimy kopię wykonywalego pliku sendmail:

mv /usr/sbin/sendmail /usr/sbin/sendmail.old

i tworzymy link symboliczny do qmailowej wersji sendmaila:

ln -s /var/qmail/bin/sendmail /usr/sbin/sendmail

3. Konfiguracja

3.1. Metody dostarczania poczty

Teraz zajmiemy się dostarczaniem poczty. Mamy tutaj do wyboru jedną spośród trzech możliwości:

  1. dostarczanie poczty do pliku /var/spool/mail/użytkownik
    Jest to domyślny sposób dostarczania poczty we wszystkich systemach unixowych. Główną wadą tego rozwiązania jest umieszczenie plików wszystkich użytkowników w jednym katalogu, co nie pozostaje bez wpływu na bezpieczeństwo. Mankamentem jest również przechowywanie wszystkich nadchodzących wiadomości w jednym pliku. Może się zdażyć sytuacja, że przy uszkodzeniu jednej przesyłki stracimy całą naszą pocztę. Zaleta jest taka, że jest to najbardziej popularny sposób dostarczania poczty i obsługują go wszystkie klienty pocztowe.
  2. dostarczanie poczty do pliku $HOME/Mailbox
    Poczta dostarczana jest do katalogu domowego użytkownika, więc nie narażamy się w tak dużym stopniu na przeczytanie naszej poczty przez innego użytkownika (aby to zrobić, musi się on dostać się do naszego katalogu domowego). Minusem jest przechowywanie poczty w jednym pliku.
  3. dostarczanie poczty do katalogu $HOME/Maildir/
    Tutaj poczta dostarczana jest do katalogu $HOME/Maildir – każda wiadomość w postaci oddzielnego pliku. Wadą tej metody jest niekompatybilność z niektórymi lokalnymi klientami poczty.

W dalszej części artykułu będziemy rozważali tylko przypadek 2. i 3.

3.1.1. Dostarczanie poczty do pliku $HOME/Mailbox

Aby qmail obsługiwał dostarczanie poczty do katalogu domowego użytkownika należy przekopiować plik /var/qmail/boot/home (lub plik /var/qmail/home+df, gdy chcemy mieć obsługę forwardingu) do pliku /var/qmail/rc:

cp /var/qmail/boot/home /var/qmail/rc

Teraz tworzymy skrypt startowy /etc/init.d/qmail-start o takiej treści:

csh -cf '/var/qmail/rc &'

i nadajemy mu prawa wykonywania chmod 755 /etc/init.d/qmail-start oraz tworzymy link symboliczny ln -s /etc/init.d/qmail-start /etc/rc.boot/qmail-start.

Teraz do pliku /etc/profiles dopisujemy następujący kod:

if [ "$SHELL"=="/bin/bash" ]; then
MAIL=$HOME/Mailbox
export MAIL
MAILDROP=$MAIL
export MAILDROP
fi
if [ "$SHELL"=="/bin/csh" ]; then
setenv MAIL $HOME/Mailbox
setenv MAILDIR $MAIL
fi

3.1.2. Dostarczanie poczty do katalogu $HOME/Maildir/

Domyślnie qmail obsługuje dostarczanie poczty do pliku $HOME/Mailbox. Aby nadchodzące wiadomości trafiały do katalogu $HOME/Maildir/ należy przeedytować plik /var/qmail/rc i zmienić wywołanie ./Mailbox na ./Maildir/. Następnie musimy w katalogu domowym każdego użytkownika utworzyć katalog ./Maildir/. Możemy w tym celu posłużyć się poniższym poleceniem:

/var/qmail/bin/maildirmake $HOME/Maildir

Aby przyspieszyć całą procedurę można to zrobić w pliku /etc/skel. Na koniec wpisujemy do pliku /etc/inetd.conf:

smtp stream tcp nowait qmaild /var/qmail/bin/tcp-env \
tcp-env /var/qmail/bin/qmail-smtpd

restartujemy demon inetd:

killall -HUP inetd

i uruchamiamy qmaila poleceniem /etc/rc.boot/qmail-start.

Następnie otwieramy plik /etc/login.defs i zmieniamy w nim opcje dotyczące dostarczania poczty (aby zmiany zadziałały musisz się wylogować i zalogować ponownie).

QMAIL_DIR      Maildir
#MAIL_DIR /var/spool/mail
MAIL_FILE Mailbox

Teraz do pliku /etc/profiles dopisujemy następujący kod:

if [ "$SHELL"=="/bin/bash" ]; then
MAIL=$HOME/Maildir/
export MAIL
MAILDROP=$MAIL
export MAILDROP
fi
if [ "$SHELL"=="/bin/csh" ]; then
setenv MAIL $HOME/Maildir/
setenv MAILDIR $MAIL
fi

3.2. Relayowanie

Relayowanie polega na odbieraniu wiadomości, które nie są przeznaczone dla lokalnego odbiorcy, ani nie pochodzą od lokalnego nadawcy. Jest ono często używane przez spamerów. Aby je wyłączyć należy stworzyć plik /var/qmail/control/rcpthosts i wpisać tam wszystkie adresy z plików konfiguracyjnych locals i virtualdomains. Więcej informacji na temat relayowania można znaleźć w dokumencie Life with qmail.

3.3. Pliki konfiguracyjne

Prawie wszystkie pliki konfiguracyjne qmaila znajdują się w katalogu /var/qmail/control/. Oto najważniejsze z nich:

  • me
    Wpisz tutaj nazwę swojego hosta i swoją domenę, używając formatu NazwaTwojegoHosta.TwojaDomena, np. example.net.
  • bouncefrom
    Wpisz tutaj nazwę nadawcy niedostarczonej wiadomości (domyślnie jest nim MAILER_DAEMON). Możesz również ustawić nazwę nadawcy informacji o niedostarczonej wiadomości, np. Administarator_Systemu.
  • badmailfrom
    Tutaj należy wpisać adresy, które będą odrzucane przez serwer.
  • defaultdomain
    Plik ten powinien zawierać domyślną nazwę domeny. Nazwa ta jest ustawiana przy instalacji qmaila (./config-fast pełna.nazwa.hosta). Jeśli zmieniłeś nazwę domeny, to przeedytuj ten plik.
  • defaulthost

    Plik zawierający domyślną nazwę hosta.

  • locals
    Plik z nazwami domen, do których poczta będzie dostarczana lokalnie.
  • timeoutconnect
    Tutaj wpisz, ile czasu czekać na połączenie SMTPD (w sekundach). Domyślną wartościa jest 60.
  • timeoutremote
    Tutaj wpisz, ile czasu czekać na połączenie z zewnętrznym serwerem (w sekundach). Domyślną wartością jest 1200.
  • timeoutsmtpd
    Tutaj wpisz, jak długo czekać przy odbieraniu poczty (w sekundach). Domyślną wartością jest 1200.
  • virtualdomains
    W tym pliku zdefiniowane są wirtualne domeny i ich użytkownicy. Więcej informacji na temat wirtualnych kontach użytkowników znajdziesz tutaj.

4. Testowanie

W tym momencie możemy już przetestować qmaila:

mail użytkownik

gdzie użytkownik to nazwa lokalnego użytkownika.

W logach qmaila (jak się nazywa plik?) powinna pokazać się informacja podobna do poniższej:

Apr  4 13:21:06 extreme qmail: 1017919266.913601 new msg 129442
Apr 4 13:21:06 extreme qmail: 1017919266.913710 info msg 129442: \
bytes 228 from qp 1316 uid 1000
Apr 4 13:21:06 extreme qmail: 1017919266.915708 starting delivery 3: \
msg 129442 to local luser@192.168.1.1
Apr 4 13:21:06 extreme qmail: 1017919266.915816 status: \
local 1/10 remote 0/20
Apr 4 13:21:06 extreme qmail: 1017919266.938782 delivery 3: \
success: did_1+0+0/
Apr 4 13:21:06 extreme qmail: 1017919266.938891 status: \
local 0/10 remote 0/20
Apr 4 13:21:06 extreme qmail: 1017919266.938913 end msg 129442

Jeśli wiadomość nie doszła, to sprawdź czy zrobiłeś wszystko dobrze i w razie konieczności przejrzyj dokumentacje dołączoną do programu. Jeśli Twoim oczom ukazały się takie komunikaty, to znaczy, że qmail jest już zainstalowany! 🙂

5. Serwery POP3 i IMAP

5.1. Serwer qmail-pop3d

UWAGA: przed instalacja serwera qmail-pop3d sprawdź czy w Twoim pliku /etc/services znajdują się wpisy:

pop3   110/tcp   pop-3
pop3 110/udp pop-3

Jeśli go tam nie ma, to wpisz go samodzielnie.

Wraz z qmailem dostarczany jest także serwer pop3 (qmail-pop3d). Obsługuje on dostarczanie poczty do katalogu ./Maildir/. Do jego poprawnego działania potrzebny jest program checkpassword.

Należy go więc ściągnąć i zainstalować (przy pomocy polecenia make; make install), a następnie zrobić następujący wpis do pliku /etc/inetd.conf (wszystko w jednej linii):

pop3 stream tcp nowait root /var/qmail/bin/qmail-popup qmail-popup \
twój.host /bin/checkpassword /var/qmail/bin/qmail-pop3d Maildir

W miejsce twój.host wpisujemy oczywiście nazwę swojego hosta.

Teraz restartujemy demona inetd poleceniem:

killall -HUP inetd

… i to już wszystko – serwer pop3 działa (a przynajmniej powinien :-)).

5.2. Serwer solid-pop3d

Lepszym rozwiązaniem od serwera qmail-pop3d jest serwer solid-pop3d. Obsługuje on oba standardy dostarczania poczty (Mailbox i Maildir).

Jego instalacja sprowadza się do wydania następujących poleceń:

# Gdy wybieramy ./Mailbox
./configure --enable-Mailbox
 
# Gdy wybieramy ./Maildir/
./configure --enable-Maildir
make
make install

Następnie wpisujemy następującą linijkę do pliku /etc/inetd.conf:

pop3	stream	tcp	nowait	root	/usr/sbin/tcpd \
/usr/local/sbin/spop3d -f /etc/spop3d.conf

Teraz tworzymy plik konfiguracyjny /etc/spop3d.conf. U mnie ma on następującą treść (używam opcji Mailbox):


UnreadExpire never
MailDropName "Mailbox"
MailDropType mailbox
AutoLogoutTime 5s


UnreadExpire never
MailDropName "Mailbox"
MailDropType mailbox
AutoLogoutTime 5s

Dla opcji Maildir wyglądałby on następująco:


UnreadExpire never
MailDropName "Maildir/"
MailDropType maildir
AutoLogoutTime 5s


UnreadExpire never
MailDropName "Maildir/"
MailDropType maildir
AutoLogoutTime 5s

UWAGA: przedstawiony plik konfiguracyjny jest zubożony, aby za bardzo nie komplikować przykładu. Spróbuj przeczytać dokumentację i dodać do niego dodatkowe opcje potrzebne do prawidłowej pracy serwera.

Po utworzeniu pliku konfiguracyjnego restartujemy demona inetd dobrze już znanym poleceniem:

killall -HUP inetd

Serwer pop3 powinien działać.

5.3. Serwer uw-imapd

Z serwerem imap jest taki problem, że standardowy serwer dostępny w Debianie „potato“ o nazwie imap obsługuje tylko opcję Maildir. Jeśli zdecydowałeś się na tą opcję, to zainstaluj go, przeczytaj dokumentację i ciesz się nim 🙂 Jeśli jednak wybrałeś opcję Mailbox, to będziesz musiał ściągnąć program uw-imapd (koniecznie źródła! – ale skąd?). UWAGA: przed instalacją należy sprawdzić czy w Twoim pliku /etc/services znajduje się następująca linia:

imap2   143/tcp

Jeśli jej tam nie ma, to należy ją dopisać samemu.

Instalacja serwera jest banalna. Należy tylko wydać polecenie make slx. Jednak przed tym musimy dokonać jednej poprawki w kodzie źródłowym serwera. Otwórz plik ./src/osdep/unix/env_unix.c, znajdź funkcje char *sysinbox () i zmień linijkę (u mnie w wersji 2001a linijka nr 794) z:

sprintf (tmp,"%s/%s",MAILSPOOL,myusername ());

na

sprintf (tmp,"%s/Mailbox",myhomedir ());

Następnie przekopiuj plik imapd z podkatalogu src/imapd/ do katalogu /usr/local/sbin i zrób następujący wpis do pliku /etc/inetd.conf:

imap2		stream	tcp	nowait	root	/usr/local/sbin/imapd imapd

Na koniec trzeba zrestartować demona inetd (metoda restartu była już wielokrotnie ćwiczona :-)).

Serwer imapd dziala 🙂

Szukanie pomocy

Qmail posiada doskonałą dokumentację. Jeśli natrafisz na jakieś kłopoty, to radzę z niej skorzystać w pierwszej kolejności. Oprócz tego w Sieci dostępnych jest wiele miejsc opisujących qmaila:

Artykuł opisujący integrację RBL z qmailem znajduje się również w kwietniowym (04/2002) numerze LinuxPlusa.

Zakończenie

Mam nadzieję, że mój tekst pomógł zrozumieć Ci instalację qmaila i związanych z nim serwerów imap i pop3. Jest jeszcze wiele kwestii, o których nie wspomniałem. Zachęcam więc do czytania podręczników, dokumentów HOWTO i innych materiałów opisujących qmaila. Przedstawione serwery pop3 i imap sa tylko przykładowe, jeśli z jakiś względów któryś Ci nie odpowiada, to zachęcam do szukania i eksperymentowania z innymi. Zachęcam szczególnie do przetestowania courier-imap, świetnego serwera imap i pop3, ale niestety tylko dla opcji Maildir. Za wszystkie błędy z góry przepraszam i proszę o kontakt ze mną.

Copyleft Odwrotne (C) sendmail. All rights reversed.
Ostatnia modyfikacja: Pt 30.05.2003 16:38:29
Ten artykuł został opublikowany pod adresem
http://www.debianusers.pl/article.php?aid=29.

Pro překlad:

http://www.komsta.net/teksty/qmail.txt