[svn/pld-doc]: rev 207 - pld-doc/book/pl_book__uslugi
ciesiel w svn.pld-dc.org
ciesiel w svn.pld-dc.org
Sob, 10 Sty 2004, 21:39:53 CET
Author: ciesiel
Date: 2004-01-10 21:39:53 +0100 (Sat, 10 Jan 2004)
New Revision: 207
Removed:
pld-doc/book/pl_book__uslugi/pl_uslugi__exim.sec
Log:
- changed name
Deleted: pld-doc/book/pl_book__uslugi/pl_uslugi__exim.sec
===================================================================
--- pld-doc/book/pl_book__uslugi/pl_uslugi__exim.sec 2004-01-10 14:51:06 UTC (rev 206)
+++ pld-doc/book/pl_book__uslugi/pl_uslugi__exim.sec 2004-01-10 20:39:53 UTC (rev 207)
@@ -1,471 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-2"?>
-<section>
- <title>Exim - Program do transportu poczty elektronicznej (MTA) - autor. Baseciq</title>
- <para>Usługa MTA (ang. message transfer agent) jest odpowiedzialna za
- przesył m.in e-mail między serwerami. Najpopularnieszymi
- przedstawicielami tego typu usług są: Sendmail, Postfix czy
- opisany przez nas Exim. Oto zalety jakie przemawiają za
- wybraniem Exima jako naszego MTA:
- </para>
- <itemizedlist>
- <listitem><para>Bo sendmail jest dziwny :)</para></listitem>
- <listitem><para>Bo qmail nie jest prawdziwym MTA</para></listitem>
- <listitem><para>Bo z postfiksem mam traumatyczne doświadczenia</para></listitem>
- <listitem><para>Autoryzacja w Eximie jest domyślna</para></listitem>
- <listitem><para>Przystosowany jest do kombinacji alpejskich i
- slalomów gigantów</para></listitem>
- <listitem><para>W PLD jest ładnie przygotowana paczka :-)</para></listitem>
- <listitem><para>Umie gadać z MySQL'em z Postgresem, a także
- zwykłymi plikami tekstowymi</para></listitem>
- <listitem><para>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</para></listitem>
- <listitem><para>Za to Tomasz Kojm napisał zaj***sty program
- antywirusowy: Clam AntiVirus - darmowy, w
- dodatku rewelacyjnie współpracujący z
- Exiscanem</para></listitem>
- </itemizedlist>
- <para>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 ;-)</para>
- <section>
- <title>Exim: Instalacja</title>
- <para>Instalacja pakietu jest prosta. Uruchamiamy program
- <command>poldek</command> i wykonujemy:</para>
- <screen>poldek> install exim
-Przetwarzanie zależności...
-exim-4.30-2 zostanie zastąpiony przez exim-4.30-2
-Zaznaczono 1 pakiet do instalacji:
-I exim-4.30-2
-
-Uruchamianie sudo /bin/rpm --upgrade -vh --root / --noorder...
-Przygotowywanie...
-########################################### [100%]
-1:exim
-19 entries written
-Run "/etc/rc.d/init.d/exim start" to start exim daemon.
-poldek></screen>
- <para>Oczywiście zanim wykonamy zalecenie startu demona powinniśmy
- dokonać kofiguracji, którą opisuje następny rozdział.</para>
- </section>
- <section>
- <title>Exim: Konfiguracja</title>
- <para>Wszelkich zmian w konfiguracji Exima dokonujemy w katalogu
- <command>/etc/mail/</command>. Edytujemy plik
- <command>exim.conf</command></para>
- <para>
- Domeny lokalne, to takie które Exim ma traktować jako
- 'swoje' domeny. Mail zadresowany @jakas.domena.lokalna
- który dotrze do Exim'a zostanie dostarczony lokalnie.
- Domeny takie definuje w dyrektywie <command>domainlist
- local_domains</command>. Standardowo, przyjmowana jest poczta
- wysyłana do domeny identycznej jak hostname serwera:
- </para>
- <screen>domainlist local_domains = @</screen>
- <para>
- Znak <command>@</command> oznacza właśnie 'moja
- nazwa'. Aby dopisać kolejne domeny wystarczy dodać je
- do tej listy rodzielając je dwukropkami:
- </para>
- <screen>domainlist local_domains = @ : domena.pl : baseciq.org : /etc/mail/local_domains</screen>
- <para>
- Poza domena.pl, baseciq.org, Exim będzie teraz także
- akceptował domeny wypisane w pliku
- <command>/etc/mail/local_domains</command>. Domeny tam należy wpisywać w
- oddzielnych linijkach. Exim o tyle fajnie działa, że
- po dopisaniu ścieżki do pliku, wystarczy go raz
- zrestartować. Jakiekolwiek kombinacje w
- <command>/etc/mail/local_domains</command> nie będą wymagały restartu.
- Tak więc najwygodniej będzie dopisać do pliku
- konfiguracyjnego:
- </para>
- <screen>domainlist local_domains = @ : /etc/mail/local_domains</screen>
- <para>
- I poprostu powpisywać wszystkie domeny do
- <command>/etc/mail/local_domains</command>.
- </para>
- <para>
- Domeny dla których mamy być zapasowym MX'em tworzy się
- bardzo łatwo. Linijkę pod <command>domainlist
- local_domains</command> jest
- <command>domainlist relay_to_domain</command>. Działa to w taki
- sam sposób jak konfiguracja domen lokalnych, czyli,
- piszemy:
- </para>
- <screen>domainlist relay_to_domains = /etc/mail/relay_to_domains</screen>
- <para>
- Od teraz, Exim będzie akceptował każdą pocztę
- zaadresowaną do domen zawartych w pliku
- <command>/etc/mail/relay_to_domains</command>. A co z nią zrobi? Jak
- wiadomo, jeżeli domena ma kilka MX'ów, to Exim będzie
- starał się ją dostarczyć do serwera o najniższym
- priorytecie MX. Chyba że on ma najniższy, to
- wygeneruje błąd.
- </para>
- <para>Relaying, czyli określenie kto może przez nasz serwer
- wysyłać pocztę. I tutaj, listę adresów i hostów buduje
- się w podobny sposób do local_domains i
- relay_to_domains. Wystarczy stworzyć listę o nazwie
- <command>relay_from_hosts</command>:
- </para>
- <screen>hostlist relay_from_hosts = 127.0.0.1 : 192.168.0.0/16</screen>
- <para>
- Na chwile przystopujemy i wyjaśnimy jak zorganizowany
- jest plik konfiguracyjny Exima. Wygląda to mniej
- więcej tak:
- </para>
- <screen># głowna sekcja ...
-
-opcje i dyrektywy sekcji głównej
-
-begin sekcja1
-
-opcje i dyrketywy sekcji1
-
-begin sekcja3
-
-...</screen>
- <para>
- Tak więc plik ten jest zbudowany z sekcji, które rozpoczynają się
- słowem <command>begin nazwa</command>, z wyjątkiem sekcji głównej, która jest
- na samym początku pliku i nie posiada swojego begina. Sekcje
- również nie mają żadnych słów kluczowych które by je zamykały
- - poprostu początek (begin) nowej sekcji oznacza zakończenie
- poprzedniej. I tak, standardowo mamy następujące sekcje:
- </para>
- <itemizedlist>
- <listitem><para>główna - odpowiedzialna za podstawowe
- ustawienia Exim'a</para></listitem>
- <listitem><para>acl - listy kontroli dostępu,
- filtrowania, odrzucania i akceptowania
- poczty</para></listitem>
- <listitem><para>routers - hm, najprościej jest to
- przetłumaczyć jako routery, czyli
- reguły kierowania wiadomości do
- odpowiednich transporterów</para></listitem>
- <listitem><para>transports - tutaj tworzymy sposoby
- doręczenia poczty</para></listitem>
- <listitem><para>retry - ustawienia ponowień</para></listitem>
- <listitem><para>rewrite - reguły do przepisywania
- nagłówków</para></listitem>
- <listitem><para>authenticators - reguły do autoryzacji</para></listitem>
- </itemizedlist>
- <para>Co to są te całe 'transportery' i 'routery'? Właściwie
- to serce Exima. Jeżeli Exim dostaje jakiegoś maila to
- najpierw puszcza go przez routery, które można porównać do
- reguł ipchains/iptables - jeżeli mail załapie się na jakąś
- regułę (router) to jest przekazywany do transportu określonego
- przez ten router. Inaczej mówiąc router w Eximie kieruje maila do
- odpowiedniego transportera. Transporter natomiast robi już z mailem co
- należy - doręcza go lokalnie, albo przekierowywuje gdzieś indziej albo odsyła
- do innego serwera. Wiem że w tym momencie może wydawać się to skomplikowane,
- ale nie przejmujcie się, to tylko wiedza teoretyczna która na początku nie
- będzie wam potrzebna. Musiałem natomiast wam wytłumaczyć że są sekcje i że
- musicie nauczyć się tego że jak napiszę 'dopisać w sekcji głównej' to należy
- coś dopisać na początku pliku.
- </para>
- <para>Czasami (czytaj: gdy mamy sieczę w
- <command>/etc/hosts</command>) Exim
- zgłasza się nie jako
- <command>serwer.domena.pl</command> a jako sam
- 'serwer'. Jeżeli zmiana wpisów w
- <command>/etc/hosts</command> nie
- pomaga, albo gdy chcemy aby nasze MTA przedstawiało
- się inaczej niż hostname maszyny na którym stoi
- wystarczy ustawić (bądź dodać gdy jej nie ma) opcję
- <command>primary_hostname</command> w głównej sekcji:</para>
- <screen>primary_hostname = serwer.domena.pl</screen>
- <para>
- W czasach zabawy z sendmailem podawałem także sposób
- na ograniczenie bannera który się pojawiał po telnecie
- na port 25. W Eximie nie jest to skomplikowane i służy
- do tego opcja <command>smtp_banner</command> w sekcji głównej:
- </para>
- <screen>smtp_banner = $primary_hostname ESMTP $tod_full</screen>
- <para>
- Spowoduje to wyświetlanie następującego tekstu jako
- bannera:
- </para>
- <screen>220 serwer.domena.pl ESMTP Wed, 23 Jul 2003 15:18:04
- +0200</screen>
- <para>
- Chyba nie muszę tłumaczyć że aby usunąć datę, należy
- wywalić <command>$tod_full</command>?
- </para>
- <para>Teraz zajmiemy się aliasami. Plik z aliasami powinnien
- znajdować się w <command>/etc/mail/aliases</command>.
- Jest to czysty plik tekstowy, tak więc zmiany w nim
- wprowadzone nie wymagają żadnego
- <command>newaliases</command> czy
- restartu demona. Jeżeli jednak nie macie pewności czy
- tam powinien być plik z aliasami, w sekcji routers
- odszukajcie ciągu <command>system_aliases:</command> - jest definicja
- routera odpowiedzialnego za rozwiązywanie aliasów. Tam
- też, w linijce data widać ścieżkę do pliku z aliasami:
- </para>
- <screen>system_aliases:
- driver = redirect
- allow_fail
- allow_defer
- data = ${lookup{$local_part}lsearch{/etc/mail/aliases}}
- file_transport = address_file
- pipe_transport = address_pipe</screen>
- <para>
- Jeżeli z naszego SMTP korzystają użytkownicy mobilni
- (dial-up'y) przyda nam się autoryzacja. Sprawa w Eximie jest dosyć zawiła.
- Otóż Exim zbyt wcześnie zrzuca uprawnienia root'a, tak że opisywany
- na wielu stronach opis zrobienia autoryzacji via PAM
- najczęściej nie działa. Z pomocą przyjdzie nam pakiet
- cyrus-sasl, a dokładniej pwcheck daemon (w PLD
- cyrus-sasl-saslauthd, W sekcji
- <command>AUTHENTICATORS</command> wpisujemy
- następujące linijki (lub kasujemy komentarze
- <command>#</command> :
- </para>
- <screen>plain:
- driver = plaintext
- public_name = PLAIN
- server_condition = ${if saslauthd{{$1}{$3}}{1}{0}}
- # powyższy wpis zadziała przy saslauthd -a shadow, jeżeli
- # uruchomicie saslauthd -a pam (np. PLD) wpiszcie wtedy:
- # server_condition = ${if saslauthd{{$1}{$3}{smtp}}{1}{0}}
- server_set_id = $2
-
-login:
- driver = plaintext
- public_name = LOGIN
- server_prompts = "Username:: : Password::"
- server_condition = ${if saslauthd{{$1}{$2}}{1}{0}}
- # powyższy wpis zadziała przy saslauthd -a shadow, jeżeli
- # uruchomicie saslauthd -a pam (np. PLD) wpiszcie wtedy:
- # server_condition = ${if saslauthd{{$1}{$2}{smtp}}{1}{0}}
- server_set_id = $1</screen>
- <para>Ostatnią rzeczą przy saslauthd (odpalonym z -a pam) jaką trzeba
- stworzyć (lub sprawdzić czy jest) to plik
- <command>/etc/pam.d/smtp</command>:
- </para>
- <screen>#%PAM-1.0
-#
-# example PAM file for saslauthd - place it as /etc/pam.d/
-# (e.g. /etc/pam.d/smtp if you want to use saslauthd for SMTP
-# AUTH)
-#
-auth required /lib/security/pam_listfile.so
-item=user sense=deny file=/etc/security/blacklist
-onerr=succeed
-auth required /lib/security/pam_unix.so
-auth required /lib/security/pam_tally.so
-file=/var/log/faillog onerr=succeed no_magic_root
-auth required /lib/security/pam_nologin.so
-account required /lib/security/pam_tally.so deny=0
-file=/var/log/faillog onerr=succeed no_magic_root
-account required /lib/security/pam_unix.so
-session required /lib/security/pam_unix.so</screen>
- <para>Pozostaje mi tylko wam przypomnieć, że przed
- sprawdzaniem autoryzacji należy także odpalić
- pwcheck/saslauthd
- </para>
- <para>
- Exim sobie bardzo dobrze radzi sobie z połączeniami
- szyfrowanymi przy użyciu protokołu SSL (wspiera metodę
- STARTTLS). Wystarczy wygenerować odpowiednie certyfikaty:
- </para>
- <screen>[baseciq w viper baseciq]$ openssl genrsa -out /etc/mail/exim.key 1024
-Generating RSA private key, 1024 bit long modulus
-.......++++++
-..............................++++++
-e is 65537 (0x10001)
-[baseciq w viper baseciq]$ openssl req -new -x509 -days 365 -key /etc/mail/exim.key -out /etc/mail/exim.crt
-Using configuration from /var/lib/openssl/openssl.cnf
-You are about to be asked to enter information that will be
-incorporated
-into your certificate request.
-What you are about to enter is what is called a Distinguished Name or a DN.
-There are quite a few fields but you can leave some blank
-For some fields there will be a default value,
-If you enter '.', the field will be left blank.
------
-Country Name (2 letter code) [AU]:PL
-State or Province Name (full name) [Some-State]:Mazowsze
-Locality Name (eg, city) []:Warsaw
-Organization Name (eg, company) [Internet Widgits Pty Ltd]:Baseciq Ltd.
-Organizational Unit Name (eg, section) []:Baseciq's Mail Server
-Common Name (eg, YOUR name) []:viper.baseciq.org
-Email Address []:baseciq w baseciq.org</screen>
- <para>
- Oczywiście na pytania odpowiadajcie podając swoje
- dane... Po takim zabiegu do sekcji głównej Exim'a
- dopiszcie:
- </para>
- <screen>tls_certificate = /etc/mail/exim.crt
-tls_privatekey = /etc/mail/exim.key
-tls_advertise_hosts = *</screen>
- <para>Po tym zabiegu i restarcie Exim powinien bez problemu
- komunikować się po SSL, co zresztą widać w logach:
- </para>
- <screen>2003-09-07 01:48:36 19vmnC-0006EG-27 <= bensonzow w beer.com H=plug.atn.pl
-[217.8.186.28] U=exim P=esmtp X=TLSv1:DES-CBC3-SHA:168 S=2909
-id=ebb601c374e2$80dace00$cab00a12 w fv</screen>
- <para>
- Warto by było, żeby także pop3d obsługiwał SSL'a
- natywnie ssl'a (bez jakichś stunneli i innych
- wynalazków). Ja osobiście polecam opisany w rozdziale
- Exim: MySQL demonik tpop3d, którego konfiguracja jest
- bardzo prosta. Wystarczy że standardowe
- 'listen-address' na takie:
- </para>
- <screen>listen-address: 0.0.0.0;tls=stls,/etc/mail/exim.crt,/etc/mail/exim.key \
- 0.0.0.0;tls=immediate,/etc/mail/exim.crt,/etc/mail/exim.key</screen>
- <para>
- Od teraz tpop3d na porcie 110 będzie obsługiwał SSL po
- wykonaniu komendy <command>STLS</command> (np. TheBat potrafi tak
- zacząć sesję SSL) a na porcie 995 będzie od razu używał
- SSL'a (TheBat, Outlook Express). Za pomoc w tpop3d+ssl
- chciałbym w tym miejscu podziękować Arkadiuszowi
- Miśkiewiczowi ;-) Dzięki Arek! :)
- </para>
- <para>Exima i SSL na porcie 465 można osiągnąć jedynie przy
- użyciu inetd (normalny Exim jako daemon, Exim po SSLu
- z inetd). Oto przykładowe konfiguracje dla poszczególnych
- inetd:</para>
- <para><command>rlinetd</command>:</para>
- <screen>service "exim-ssl" {
- protocol tcp;
- port "465";
- user "root";
- tcpd { exit; }
- exec "/usr/bin/exim -bs -tls-on-connect";
- }</screen>
- <para><command>xinetd</command>:</para>
- <screen>service exim-ssl
-{
- socket_type= stream
- protocol = tcp
- port = 465
- user = root
- server = /usr/bin/exim
- server_args = -bs -tls-on-connect
- wait = no
- }</screen>
- <para><command>inetd</command> (sprawdzone przez kflis'a - dzięki!):</para>
- <screen>465 stream tcp nowait root /usr/sbin/tcpd /usr/bin/exim -bs -tls-on-connect</screen>
- <para><command>rc-inetd (PLD)</command> (należy utworzyć plik
- /etc/sysconfig/rc-inetd/smtps i wstawić tam to co
- poniżej):</para>
- <screen>SERVICE_NAME=exim-ssl
-SOCK_TYPE=stream
-PROTOCOL=tcp
-PORT=465
-FLAGS=nowait
-USER=root
-SERVER=tcpd
-DAEMON=/usr/bin/exim
-DAEMONARGS="-bs -tls-on-connect"</screen>
- <para>
- Generalnie nie ma sensu męczyć kernela i filesystemu
- żeby pilnował quoty na pocztę. Szczególnie gdy MTA
- samo sobie może z tym poradzić. Służy do tego parametr
- <command>quota</command> w konfiguracji transportów. I tak, w
- najprostszy sposób można lokalną quotę per user
- ustawić w konfiguracji transportu
- <command>local_delivery</command>
- (odpowiedzialnego za lokalne dostarczanie poczty):
- </para>
- <screen>local_delivery:
- driver = appendfile
- file = /var/mail/$local_part
- delivery_date_add
- envelope_to_add
- return_path_add
- # A tutaj dodajemy quotę w wysokości 20MB:
- quota = 20M</screen>
- <para>
- Proste, prawda? Tak naprawdę ma to zastosowanie w
- systemach poczty wirtualnej gdzie możemy w bazie
- danych przechowywać quotę użytkownika i można
- skonstruować zapytanie SQL do odpytania ile miejsca ma
- dany użytkownik. Ale jeżeli nie możecie sobie poradzić
- z quotą systemową, możecie zamiast <command>quota = 20M</command>
- dopisać coś takiego:
- </para>
- <screen>quota = ${lookup{$local_part}lsearch{/etc/mail/quota.conf}{$value}{0M}}</screen>
- <para>
- Od tego momentu w pliku
- <command>/etc/mail/quota.conf</command> możesz
- trzymać wielkości skrzynek dla poszczególnych
- użytkowników. Jeżeli ktoś nie zostanie tam wymieniony,
- to nie będzie miał żadnych limitów na swoją skrzynkę
- pocztową. Plik taki powinien wyglądać mniej-więcej
- tak:
- </para>
- <screen>lukasz: 100M
-kflis: 5M
-ania: 20M</screen>
- <para>I tak oto ja mam 100mb na pocztę, kubuś tylko 5, a
- siostra 20 MB ;) Podobnym parametrem każdego
- transportera jest <command>message_size_limit</command>. Wystarczy
- wpisać:
- </para>
- <screen>message_size_limit = 10M</screen>
- <para>
- Podobnie jak powyżej, można zrobić to na bazie pliku -
- wystarczy zamiast
- <command>/etc/mail/quota.conf</command> użyć np.
- <command>/etc/mail/size_limits.conf</command> ;-) BTW. na końcu linijki z
- quotą, gdzie mamy '0M' możemy wstawić np. '20M'.
- Wtedy, osoby nie dopisane do
- <command>/etc/mail/quota.conf</command> będą
- miały 20MB limitu (limit domyślny).
- </para>
- <para>
- Oczywiście jak na Exim'a przystało, od quoty jest
- więcej bajerków. Chyba najbardziej pożądanym
- 'gwizdkiem' będzie opcja
- <command>quota_warn_message</command>. Jest to
- nic innego jak mail ostrzegający usera o tym że
- skrzynka jest zapchana po same brzegi. Zanim jednak
- polecisz to wdrażać, zainteresuj się jak to działa.
- Otóż po dostarczeniu każdego maila Exim będzie
- sprawdzał czy został przekroczony konkretny próg
- (podany w megabajtach, lub w procentowo). Jeżeli tak,
- wygeneruje on odpowiednią wiadomość. I tak, dodajemy
- do molestowanego przez nas
- <command>local_delivery</command>
- następujące opcje:
- </para>
- <screen>quota_warn_message = "\
-Content-Type: text/plain; charset=ISO-8859-2\n\
-To: $local_part@$domain\n\
-Reply-to: Administratorzy sieci
-<admins w twojadomena.pl>\n\
-Subject: Informacja o Twoim koncie pocztowym\n\
-\n\
-*** Ta wiadomość została wygenerowana automatycznie ***\n\
-\n\
-Uprzejmie informujemy, iż Twoja skrzynka pocztowa została zapełniona w 90%\n\
-swojej pojemności. W momencie zapełnienia jej w 100% nie będą dostarczane\n\
-do Ciebie nowe wiadomości. Opróżnij swoją skrzynkę pocztową ze starych\n\
-wiadomości.\n"
- quota_warn_threshold = 90%</screen>
- </section>
- <section>
- <title>Exim: Dodanie możliwości antywirusowych</title>
- <para></para>
- </section>
- <section>
- <title>Exim: Współpraca z MySQL</title>
- <para></para>
- </section>
-</section>
Więcej informacji o liście dyskusyjnej pld-doc