Exim - konfiguracja
"To co mam do powiedzenia na temat Twoich migracji (slack->pld, epic->irssi, sendmail->exim) nie nadaje się do publikacji."
Jakub Flis
A dnia 16 września roku pańskiego 2003, kflis rzekł:
Baseciq słuchaj, ale będzie poważny kłopot, będziesz musiał zmienić motto przewodnie artykułu, przynajmniej w części o eximie. ;) - czyli następny zadowolony konserwatysta.
Dlaczego Exim?
Bo zupa była za słona. A na poważnie rzecz biorąc:
- bo sendmail jest dziwny;
- bo qmail nie jest MTA;
- bo z postfiksem mam traumatyczne doświadczenia;
- autoryzacja to w nim jest domyślna;
- przystosowany jest do kombinacji alpejskich i slalomów gigantów;
- w PLD jest ładnie przygotowana paczka :-);
- umie gadać z MySQL’em;
- z Postgres’em zresztą też;
- i w dodatku standardowymi plikami tekstowymi też nie pogardzi;
- Tom Kistner napisał do Exim’a zaj***stą łatkę, rozbudowywującą Exim’a o obsługę programów antywirusowych, daemona SpamAssasin (skanera antyspamowego) oraz wykrywania błędów MIME - dzięki temu nie potrzebujemy wielkich i zasobożernych syfów w perlu;
- Za to Tomasz Kojm napisał zaj***sty program antywirusowy: Clam AntiVirus - darmowy, w dodatku rewelacyjnie współpracujący z Exiscanem;
Podsumowywując - Exim jest rewelacyjnym MTA. Jego możliwości konfiguracji pozwoliły mi na zbudowanie dosyć rozbudowanego serwera poczty obsługującego zarówno konta lokalne jak i konta zapisane w bazie danych MySQL. Dodatkowe ‘gwizdki’ to np. przeszukiwanie plików konfiguracyjnych serwera cvs w poszukiwaniu adresów docelowych dla aliasów w domenie cvs.rulez.pl. O rzeczach takich jak klasyfikowanie maili czy są spamem czy nie już nawet nie wspomnę. W dodatku Exim jest całkiem bezpiecznym MTA (wersja 4.x wg. securityfocus jak narazie dorobiła się jednego błędu - w końcu jakaś cena musi być za te wodotryski). Zresztą konstrukcja omawianego MTA na początku doprowadzała mnie do szału, gdyż Exim za cholerę nie może sobie poradzić z smtp-auth via PAM z racji braku uruchamiania autoryzacji z własnego uid/gid zamiast root’a ;-).
Jak to coś zainstalować?
Jako że w momencie gdy piszę te słowa nie mam jeszcze zabardzo gdzie zacząć budować Exim’a, pozwolę sobie opisać jak to zrobić w PLD. Zacznijmy od przygotowania miejsca na budowę paczek (jeżeli masz potworzone odpowiednie katalogi to możesz przejść akapit niżej):
[lukasz@serv lukasz]$ rpm --install-build-tree [lukasz@serv lukasz]$ cd rpm/ [lukasz@serv rpm]$ export CVSROOT=":pserver:cvs@cvs.pld-linux.org:/cvsroot" [lukasz@serv rpm]$ cvs -z9 get SPECS/builder SOURCES/kernel-i386.config U SPECS/builder U SOURCES/kernel-i386.config
Ci bardziej obeznani z CVS’em wiedzę po co ściągamy SOURCES/kernel-i386.config (musimy zainicjować lokalne repozytorium w katalogu SOURCES). Teraz wchodzimy do katalogu rpm/SPECS/ w naszym $HOME i działamy. Tutaj mała uwaga - przy ./builder parametr ‘-r RA-branch_general’ dodajemy tylko w wypadku gdy budujemy dla PLD-1.0 Ra. RA-branch_general jest branchem utworzonym specjalnie na potrzeby tego, by Exim budował się bezproblemowo pod Ra:
[lukasz@serv lukasz]$ cd ~/rpm/SPECS/ [lukasz@serv SPECS]$ ./builder -r RA-branch_general exim.spec U exim.spec # $Revision: 1.2 $, $Date: 2006-05-11 19:25:18 $
O ile mamy wszystkie potrzebne biblioteki do budowy za kilka(naście) minut powinniśmy ujrzeć radosne:
Zapisano: /home/users/lukasz/rpm/SRPMS/exim-4.32-1.src.rpm Zapisano: /home/users/lukasz/rpm/RPMS/exim-4.32-1.i686.rpm Zapisano: /home/users/lukasz/rpm/RPMS/exim-X11-4.32-1.i686.rpm
Pozostaje nam tylko zainstalować zbudowane paczki i przejść dalej.
No dobrze. A teraz przećwiczmy ze źródeł ;-)
Na początku musisz przemyśleć czy chcesz mieć exiscana czy nie. Pragnę Cię poinformować, iż połatanie Exim’a aby obsługiwał antywirusy wcale nie jest trudne i wcale nie jesteśmy zmuszeni do korzystania z antywirusa po połataniu. Oki. Kompilację z racji braku systemu pod ręką odpowiedniego przeprowadzałem na Debianie 3.0 uaktualnionym do unstable (tak, sam się dziwię że to działa). Zacznijmy od pobrania Exim’a. Jeżeli zdecydowałeś się na exiscana, pobierz także i jego. Po ściągnięciu rozpakowywujemy Exim’a, wchodzimy do jego katalogu i (opcjonalnie, przy czym w najnowszych wersjach ta łatka nie jest już potrzebna!) nakładamy łatkę od exiscana:
wget ftp://ftp.csx.cam.ac.uk/pub/software/email/exim/exim4/exim-4.34.tar.gz wget http://duncanthrax.net/exiscan-acl/exiscan-acl-4.34-22.patch tar -xzf exim-4.34.tar.gz cd exim-4.34 patch -p1 < ../exiscan-acl-4.34-22.patch
Teraz należy przygotować Exim’a do budowy. Kopiujemy plik src/EDITME do Local/Makefile oraz exim_monitor/EDITME Local/eximon.conf:
cp src/EDITME Local/Makefile cp exim_monitor/EDITME Local/eximon.conf
I teraz możemy się wziąść za jego ‘tuning’ ;-). Otwieramy Local/Makefile w ulubionym edytorze i zmieniamy:
- Odnajdujemy ‘BIN_DIRECTORY=/usr/exim/bin’ i zmieniamy na ‘BIN_DIRECTORY=/usr/bin’.
- Odnajdujemy ‘CONFIGURE_FILE=/usr/exim/configure’ i zmieniamy na ‘CONFIGURE_FILE=/etc/mail/exim.conf’ (nie jest to konieczne, ale jeżeli zmienisz tutaj ścieżkę dostępu do tego pliku będziesz musiał o tym pamiętać).
- Odnajdujemy ‘EXIM_USER=’, usuwamy ją i wpisujemy kolejno (w oddzielnych linijkach) ‘EXIM_UID=79′ i ‘EXIM_GID=79′. Nie zapomnijcie dodać później tego użytkownika i grupy w systemie:
groupadd -g 79 exim useradd -g 79 -u 79 exim
- Usuwamy komentarz (znak ‘#’) przed linijką ‘TRANSPORT_LMTP=yes’.
- Usuwamy komentarze przed linijkami: ‘SUPPORT_MAILDIR=yes’, ‘SUPPORT_MAILSTORE=yes’ i ‘SUPPORT_MBX=yes’.
- Usuwamy komentarze przed linijkami: ‘LOOKUP_CDB=yes’ i ‘LOOKUP_WILDLSEARCH=yes’.
- Jeżeli chcemy mieć support do autoryzacji SMTP usuwamy komentarze przed linijkami: ‘AUTH_CRAM_MD5=yes’ i ‘AUTH_PLAINTEXT=yes’.
- Jeżeli chcemy mieć support do OpenSSL (do połączeń szyfrowanych) i mamy poprawnie zainstalowane biblioteki OpenSSL usuwamy komentarze przed linijkami ‘SUPPORT_TLS=yes’ i ‘TLS_LIBS=-lssl -lcrypto’.
- Odnajdujemy linijkę ‘# LOG_FILE_PATH=/var/log/exim_%slog’ i zmieniamy na ‘LOG_FILE_PATH=/var/log/exim/%s.log’ - w ten oto sposób exim będzie trzymał swoje logi w katalogu /var/log/exim/. Oczywiście, pamiętajmy o zrobieniu tego katalogu i nadaniu mu odpowiednich praw dostępu:
mkdir -p /var/log/exim chown exim.exim /var/log/exim
- Jeżeli nasz system wspomaga PAM usuwamy komentarz przed linijką ‘SUPPORT_PAM=yes’ i niżej dopisujemy EXTRALIBS=-lpam -ldl. Jeżeli nie mamy obsługi PAM będziemy musieli dodać EXTRALIBS=-ldl.
- Aby móc prawidłowo obsługiwać autoryzację będziemy potrzebować pwcheck - demona autoryzacj z pakietu cyrus-sasl (W Debianie paczka sasl-bin, uruchamia się go /etc/init.d/pwcheck start, w PLD cyrus-sasl-saslauthd). Exim bardzo dobrze umie dzięki niemu sprawdzać autoryzację. Aby to działało, należy odnaleźć linijkę ‘CYRUS_PWCHECK_SOCKET=/var/pwcheck/pwcheck’ (CYRUS_SASLAUTHD_SOCKET jeżeli używamy saslauthd z pakietu Cyrus-2.x) usunąć komentarz z jej początku, oraz wpisać poprawną ścieżkę do socketu pwcheck’a (W Debianie jest to /var/state/pwcheck/pwcheck, w PLD jest /var/lib/sasl/mux, w innych dystrybucjach nie mam zielonego pojęcia, natomiast w slackware i tak będziesz musiał cyrus-sasl zbudować samemu więc pewnie nie będzie dla Ciebie problemem skąd wziąść socket).
- Odnajdujemy ‘SYSTEM_ALIASES_FILE=/etc/aliases’ na ‘SYSTEM_ALIASES_FILE=/etc/mail/aliases’.
- W linijkach zawierących ‘COMPRESS_COMMAND’ i ‘ZCAT_COMMAND’ zmieniamy ścieżki dostępu do programów zcat i gzip na te odpowiadające naszemu systemowi.
- Usuwamy komentarz w linijce zawierającej ‘EXIM_PERL=perl.o’.
- Usuwamy komentarz w linijce zawierającej ‘SUPPORT_MOVE_FROZEN_MESSAGES=yes’.
- Na koniec usuwamy tylko znaki komentarza z linijek ‘# PID_FILE_PATH=/var/lock/exim.pid’ oraz ‘# SPOOL_MODE=0640′ i możemy męczyć się dalej.
- Odnajdujemy ‘HEADERS_CHARSET’ i ustawiamy mu ‘ISO-8859-2′
- Komentujemy linijkę zawierającą ‘EXIM_MONITOR’ jeżeli nie chcemy pracującego pod X-Window monitora do Exim’a
- Jeżeli chcemy aby nasz Exim umiał dogadać się z MySQL’em, usuwamy komentarz przed linijką ‘LOOKUP_MYSQL=yes’, odnajdujemy linijkę zawierającą ‘LOOKUP_INCLUDE’ i zmieniamy ją by wyglądała: ‘LOOKUP_INCLUDE=-I /usr/include/mysql’. Poniżej znajduje się linijka ‘LOOKUP_LIBS’, którą modyfikujemy tak by miała wyglądała tak: ‘LOOKUP_LIBS=-lmysqlclient’. Uwaga! Ścieżka /usr/include/mysql może być zupełnie inna w Twoim systemie. Skontaktuj się z najbliższym powiatowym magikiem od Linuksa jeżeli nie będziesz mógł jej sam odgadnąć ;-)
Uff. Teraz klepiemy ‘make’ i czekamy. Jeżeli nic się nie wywaliło, to mamy szczęście. Jeżeli natomiast budowani się niepowiedzie proponowałbym zacząć od zmiany LOOKUP_INCLUDE w Local/Makefile. Pamiętać należy że po modyfikacji Local/Makefile należy wykonać ‘make makefile’.
Po skończeniu kompilacji oczywiście można wykonać make install i przejść do przyjemniejszej części zabawy, czyli konfiguracji naszego nowego lśniącego MTA ;-)
Uruchamianie i tym podobne.
Exima odpala się dosyć standardowo - ‘exim -bd -q15m’ - czyli praktycznie tak samo jak sendmaila. Komenda ‘mailq’ również zadziała. Aby wymusić opróżnienie kolejki uruchamiamy ‘exim -qf’ (lub -qf -d - wtedy zobaczymy debug) a pojedyńczego maila popychamy przy pomocy ‘exim -M <id>’, gdzie ID możemy wyczytać z komendy ‘mailq’.