Erinevus lehekülje "Postfix'i arhitektuuri kirjeldus ja kasutamise keerulisemad võimalused" redaktsioonide vahel
(→Eposti kirja ja kirja edastamise protokollid) |
(→Eposti kirja ja kirja edastamise protokollid) |
||
1. rida: | 1. rida: | ||
+ | ===Postfixi arhitektuur=== | ||
+ | |||
+ | Abstraktsel tasemel võiks Postfixi tööd iseloomustada sellise skeemiga | ||
+ | |||
+ | kohalikult genereeritud kirjad | ||
+ | võrgust saabunud kirjad --------> järjekorrahaldur --------> smtp, relay, lmtp | ||
+ | kohapeal tekitatud edasisuunamised queue manager local, virtual, pipe | ||
+ | kohapeal moodustatud teated | ||
+ | |||
===Eposti kirja ja kirja edastamise protokollid=== | ===Eposti kirja ja kirja edastamise protokollid=== | ||
Redaktsioon: 23. august 2009, kell 19:38
Sisukord
- 1 Postfixi arhitektuur
- 2 Eposti kirja ja kirja edastamise protokollid
- 3 Aadressiklassid
- 4 Mail forwarding domains
- 5 Postisüsteemi testimine
- 6 Logi ja debugimine
- 7 Piirangute rakendamine töödeldavale epostile
- 8 Kasutamine
- 9 Seadistamine
- 10 Kirjade töötlemine välise programmiga
- 11 SPF - Sender Policy Framework
- 12 Milter
- 13 Postfix delivery tegemine LDAP kataloogi alusel
- 14 Kasulikud lisamaterjalid
Postfixi arhitektuur
Abstraktsel tasemel võiks Postfixi tööd iseloomustada sellise skeemiga
kohalikult genereeritud kirjad võrgust saabunud kirjad --------> järjekorrahaldur --------> smtp, relay, lmtp kohapeal tekitatud edasisuunamised queue manager local, virtual, pipe kohapeal moodustatud teated
Eposti kirja ja kirja edastamise protokollid
Huvitav asjaolu on, et eposti kirja formaat ja eposti kirjade vahetamine on kirjeldatud erinevates RFC (Request for Comments) tekstides, vastavalt
- RFC2822 (Internet Message Format) - http://www.faqs.org/rfcs/rfc2822.html
- RFC2821 (Simple Mail Transfer Protocol) - http://www.faqs.org/rfcs/rfc2821.html
Kui postiprogrammiga, nt Icedove koostada kiri ja see saata, siis iseenesest saadab klient postimasinale nt sellise teksti
Message-ID: <4A90629C.6050100@loomaaed.tartu.ee> Date: Sun, 23 Aug 2009 00:26:52 +0300 From: Priit Kask <priit@loomaaed.tartu.ee> User-Agent: Mozilla-Thunderbird 2.0.0.22 (X11/20090706) MIME-Version: 1.0 To: Mart Kask <mart@loomaaed.tartu.ee> Subject: testkiri Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Tere! Ja siit tuleb üks test kiri. Priit
kus
- read kuni esimese tühja reani moodustavad kirja päised (headers)
- ülejäänud read moodustavad kirja keha (body)
Kui aga kirja kätte saanud kasutaja vaatab kogu kirja, siis paistab talle kiri selline
...
kus kirja algusse seda kirja töötlenud postimasinad lisanud juurde kirjeid
- Received - iga postimasin lisab reeglina ühe sellise rea (see on üks rida kuna protokolli kohaselt rida jätkub kui järgmine rida algab tühikuga (ingl. k. whitespace))
- Return-Path - kohaliku kättetoimetamise (ingl. k. local delivery) teinud postimasin lisab nn ümbriku from aadressi
Kõik juurde lisatud andmed on lisatud SMTP protokolli rääkimise alusel, st need kõik väljendavad kirja teekonna erinevatel etappidel kasutatud ümbriku aadresse.
Aadressiklassid
Aadressiklasside (ingl. k. address classes) http://www.postfix.org/ADDRESS_CLASS_README.html abil otsustab Postfix milliseid kirju vastu võtta ja kuidas neid edasi toimetada. Addressklass on määratletud kolme tunnuse alusel
- klassiga seotud domeenide nimekiri (ingl. k. list of domains that are a member of the class) - nt kõik local_domains, kõik relay_domains
- vaikimisi edasitoimetamise transport (ingl. k. default delivery transport) - nt local, virtual või relay
- kirjasaajate nimekiri (ingl. k. list of valid recipient addresses)
Vaikimisi on 2009 aastal Postfixis kasutusel sellised aadressklassid
- local domain class - canonical domains
- virtual alias domain class - hosted domains
- virtual mailbox domain class - hosted domains
- relay domain class - relay domains
- default domain class
Mail forwarding domains
# cat mail.cf: ... virtual_alias_domains = zoopark.tartu.ee loomaaed.tartu.ee virtual_alias_maps = hash:/etc/postfix/virtual
# cat virtual root@auul.pri.ee postmaster root@loomaaed.tartu.ee postmaster ...
Postisüsteemi testimine
TODO
Jõudlus
TODo
Spam
Aadressil http://spamassassin.apache.org/gtube/ on nö standard spammi, mille nt Spamassassin peaks avastama
XJS*C4JDBQADN1.NSBN3*2IDNEN*GTUBE-STANDARD-ANTI-UBE-TEST-EMAIL*C.34X
Katsetamiseks tuleks see järgnevus sisestada kirja eraldi reane reavahetusega lõpus.
Viirus
Aadressil http://www.eicar.org/anti_virus_test_file.htm on nö standardne viirus, mille nt ClamAV peaks avastama
X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*
Katsetamiseks tuleks see salvestada tekstifaili reavahetusega lõpus ning lisada kirjale.
Logi ja debugimine
Kui mingil põhjusel on tarvis uurida mõnda parasjagu sabas olevat kirja, siis sobib selleks programm postcat. Tavaliselt saab logist või mailq programmi väljundist teada kirja identifikaatori ning selle abil õnnesub sabast kirjale vastav fail üles leida.
# mailq .... C558C4DC80 794 Sat Dec 20 10:18:55 bounce@loomaaed.tartu.ee (connect to smtp-gw.loomaaed.tartu.ee[10.0.2.5]: Connection refused) mart@loomaaed.tartu.ee .. # find /var/spool/postfix -name C558C4DC80 -ls 313873 4 -rw------- 1 postfix postfix 257 Dec 21 23:14 /var/spool/postfix/defer/C/C558C4DC80 318592 4 -rwx------ 1 postfix postfix 1001 Dec 22 00:20 /var/spool/postfix/deferred/C/C558C4DC80 # postcat /var/spool/postfix/deferred/C/C558C4DC80 ... nö inimloetaval kujul formateeritud väljund
Kui on vajadus sabas olev kiri kustutada, siis ei tohiks seda teha niisama failisüsteemist vastavate failide kustutamise teel vaid tuleb kasutada nt programmi postsuper, öeldes
# postsuper -d C558C4DC80
Piirangute rakendamine töödeldavale epostile
Postfix võimaldab üksikasjaliselt kontrollida, millist eposti süsteem töötlema hakkab, st võtab vastu ning saadab edasi või edasisaatmise asemel teeb local delivery. Käesolevas punktis käsitletavad piirangud on nn before-queue piirangud, st need rakendatakse enne kirja sabasse (ingl. k. queue) võtmist.
Selleks, et paremini mõista Postfix poolt pakutavate piirangute seadistamise võimalusi, kordame üle milline järgnevust sooritatakse vastavalt SMTP protokollile kui postimasina poole pöördub SMTP klient; rea lõpus on märgitud millist Postfixi piirangute nimekirja on mingi andmevahetuse etapi juures võimalik rakendada.
smtp-client ---> smtp-klient.auul ühendub Postfix serveri 25/tcp pordile <--- smtpd_client_restrictions smtp-server ---> 220 smtp-server.auul ESMTP Postfix (Debian/GNU) smtp-klient ---> EHLO post-klient.auul <--- smtpd_helo_restrictions smtp-server ---> 250-smtp-server.auul 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN smtp-klient ---> MAIL FROM:<priit@loomaaed.tartu.ee> SIZE=325 <--- smtpd_sender_restrictions RCPT TO:<mart@bmail.com> ORCPT=rfc822;mart@bmail.com <--- smtpd_recipient_restrictions DATA smtp-server ---> 250 2.1.0 Ok 250 2.1.5.Ok 354 End data with <CR><LF>.<CR><LF> smtp-klient ---> saadab kirja osa ...
Piirangute nimekiri võib olla mõnel juhul tühi ja mõnel juhul peab kindlasti sisaldama vähemalt kindlaksmääratud piiranguid. Piirangute kontroll toimub selliselt
- piirangute nimekirjast rakendatakse esimene klappinud piirang, järgmisi selle nimekirja piiranguid ei kontrollita
- rakendatakse esimene tulemusega (REJECT, DEFER või PERMIT) lõppenud piirangute nimekiri
Kontrolli tulemus rakendatakse peale RCPT TO andmete saamist.
Nt võiks kasutada sellist piirangute nimekirja, selline on nimekiri vaikimisi Debiani Lenny puhul ja väljund on esitatud järjestatuna rakendamise järjekorras
# postconf | grep smtpd_ | egrep "(_client_|_helo_|_sender_|_recipient_)" | egrep "restrictions " smtpd_client_restrictions = smtpd_helo_restrictions = smtpd_sender_restrictions = smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
Siinjuures tuleb tähele panna asjaolu, et igas reeglite nimekirjas on lubatud kasutada ainult teatud kontrolle, kusjuures igas järgmises on lubatud kasutada eelmiste nimekirjade kontrolle. Antud juhul ongi smtpd_recipient_restrictions juures kasutatud permit_mynetworks'i, mis on iseenesest smtpd_client_restrictions nimekirja kontroll, vt http://www.postfix.org/postconf.5.html
Esitatud näites esimesena kehtestatav ning ainuke piirangute nimekiri on smtpd_recipients_restrictions ja mis sisaldab kahte kontrolli
- permit_mynetworks - lubada saata posti nendest alamvõrkudest, milles asub postimasin
- reject_unauth_destination - keeldutaks töötlemast posti mida ei ole postimasin seadistatud kas vahendama või millele tegema local deliverit
Mõned allikad soovitavad kõik piirangud seadistada ühe smtpd_recipient_restrictions parameetri abil kuna nii on ehk tagatud parem ülevaatlikkus.
Kasutamine
Aliase olemasolu kontrollimiseks sobib öelda
# postmap -q mart@loomaaed.tartu.ee pgsql:/etc/postfix/pgsql-local.cf
Kirjade sabast ära saatmiseks
# postqueue -f
Seadistamine
Süsteemist väljuva posti ümbriku muutmiseks tuleb kasutada mail.cf failis rida
smtp_generic_maps = hash:/etc/postfix/generic
ning /etc/postfix/generic ise sisaldab näiteks selliseid ridu
www-data@arvuti.sisedomeen www-bounce@valisdomeen.ee root@arvuti.sisedomee www-bounce@valisdomeen.ee
Muudatuste kehtestamiseks tuleb generic'ikile vastav andmebaas moodustada käsuga
# postmap /etc/postfix/generic
ning laadida reload'iga Postfix.
Käskuga postconf estitatakse parasjagu kehtetatud Posfixi seadistused
# postconf
ning lisades võtme -n esitatakse main.cf failis ilmutatult kasutatud parameetrite väärtused
# postconf -n
Konkreetse parameetri väärtust saab küsida nii, nt
# postconf mail_version mail_version = 2.5.5
Kirjade töötlemine välise programmiga
Ühel või teisel põhjusel võib olla vaja sellist asjakorraldus, et kas postisüsteemi kõiki või vaid teatud tunnustele vastavaid kirju saaks töödelda välise programmiga. Ja selliselt, et väline programm saab andmeid oma stdio'sse ning järele mõned argumendid. Üheks võimaluseks seda korraldada on kostümiseeritud transporti kirjeldamise abil.
- /etc/postfix/main.cf faili tuleb lisada rida
transport_maps = hash:/etc/postfix/transport
- /etc/postfix/transport failis peab sisalduma nt rida
loomaaed.tartu.ee pf
ning tuleb öelda
# postmap /etc/postfix/transport
- /etc/postfix/master.cf failis peab sisaldub sektsioon
pf unix - n n - - pipe flags=RDX user=programmikasutaja argv=/bin/pf.pl ${user} ${domain}
ning kui /bin/pf.pl sisaldab nt
#!/usr/bin/perl open (fh, ">>/tmp/pf.log"); print fh "$ARGV[0]\n"; print fh "$ARGV[1]\n\n\n"; @read=<STDIN>; foreach $rida (@read) { print fh $rida; }
Siis selle faili algusse kirjutatakse epostiaadressi @ märgist vasemale ja paremale jääv osa erinevatele ridadele ning kirja sisu kusjuures lisatakse päisele mõned read vastavalt sellele, mida lipud flags järel ütlevad.
SPF - Sender Policy Framework
SPF (Sender Policy Framework - ingl. k. epost saatja kontrollimise raamistik) http://www.openspf.org/Project_Overview võimaldab saavutada sellised eesmärke
- kaitsta eposti vastuvõtjat ümbriku from aadressi võltsijate eest (eeldusel, et võltsitava domeeninime omanikud oma oma domeenidele kirjeldanud spf või sfp sisuga txt kirjed)
- kaitsta domeeninime omanikku ümbriku from aadressi võltsijate tegevuse eest, tulemusena ei saa võltsijad saata kontrollimatult adressaatidele võltsitud eposti
SPF tööpõhimõtte kirjeldus
# apt-get instal spfqtool
Eposti vastuvõtja ettevalmistamine
Postfix sisaldab 'Postfix SMTP access policy delegation' http://www.postfix.org/SMTPD_POLICY_README.html süsteemi, mille abil saab ühendada MTA välise lahendusega, antud juhul SPF'iga, selleks, et teostada täiendavat kontrolli, milliste omadustega kirju saab läbi kõnealuse postisüsteemi saata.
Üheks SPF kasutamise võimaluseks on sama MTA sees pidada Postfixi master deemoni poolt käivitatavat Perli skripti, mida jagatakse postfix-policyd-spf-perl paketina, paigaldamiseks tuleb öelda
# apt-get install postfix-policyd-spf-perl
Nimesüsteemi ettevalmistamine
TODO
Milter
TODO
Postfix delivery tegemine LDAP kataloogi alusel
Valmistada LDAP kliendi seadistused ette /etc/ldap/ldap.conf failis ja Postfixi jaoks põhimõtteliselt midagi sellist
# cat /etc/postfix/ldap.cf server_host = ldaps://ldap.loomaaed.tartu.ee version = 3 search_base = dc=loomaaed,dc=tartu,dc=ee query_filter = mail=%s result_attribute = sn
kontrolliks sobib küsida
# postmap -q mart@loomaaed.tartu.ee ldap:/etc/postfix/ldap.cf Kask
Kasulikud lisamaterjalid
- The book of Postfix: state-of-the-art message transport (Ralf Hildebrandt, Patrick Koetter) - 2009 aasta seisuga tõenäoliselt parim raamat teemal