Postfix'i arhitektuuri kirjeldus ja kasutamise keerulisemad võimalused
Toores. Ehk seda pala võib täiendada.
Sisukord
- 1 Postfixi arhitektuur
- 2 Eposti kirja ja kirja edastamise protokollid
- 3 Aadressiklassid
- 4 Postfixi konfiguratsioon ehk failid main.cf ja master.cf
- 5 Postisüsteemi testimine
- 6 Piirangute rakendamine töödeldavale epostile
- 7 Seadistamine
- 8 TLS krüpteering ja SASL auth
- 9 Kirjade töötlemine välise programmiga
- 10 SPF - Sender Policy Framework
- 11 Logi ja probleemidega tegelemine
- 12 Milter
- 13 Postfixi olulised tööriistad
- 14 Imap deemonid mis sobivad kasutamiseks koos postfixiga
- 15 POstfix delivery tegemine Mysql kataloogi alusel
- 16 Postfix delivery tegemine LDAP kataloogi alusel
- 17 Queue kopeerimine postimasinate vahel
- 18 Kasulikud lisamaterjalid
- 19 Lingid
Postfixi arhitektuur
Postfix on vabavaraline mail transfre agent (MTA), serveritarkvara mis mõeldud emailide vastuvõtmiseks ning saatmiseks. Postfixi kiirus, kergelt administreeritavus ja turvalisus on teinud sellest ühe enimkasutatava mta ja laialdase alternatiivi sendmailile.
Selle kirjutas hollandlane Wietse Venema ja kasutusse võeti esmakordselt 1999.a.
Abstraktsel tasemel võiks Postfixi tööd iseloomustada sellise skeemiga
SISEND VÄLJUND postimasinast saadetud kiri võrgust saabunud kiri --------> järjekorrahaldur --------> smtp, relay, lmtp kohapeal tekitatud edasisuunamine queue manager local, virtual, pipe kohapeal moodustatud teade
kus on üldiselt kujutatud, et Postfixi sisendisse saabuvate kirjadega asub tegelema järjekorrahaldur ning seejärel väljub kiri ühel kuuest näidatud viisil.
Vasakul on loetletud neli erinevat võimalust, kuidas kiri võib jõuda Postfixi töötlemisele
Kitsam pilt MTA'st oleks allolev. Tegemist on hea pildiga n2itamaks ,et postfixi näol ei ole tegemist mingi väikese tarkvaraga. Kokku koosneb postfix kuskil 11'nest põhilisest käsurea utiliidist ja 20nest protsessist/deemonist.
Skeemil suur mull "Master", mille sees kõik teised deemoneid sümboliseerivad kastikesed asuvad, on postfixi nn emadeemon, mis kontrollib kõiki teise protsesse. Tema on postfix aju mis käivitab vajaduse korral erinevaid postfixi ala-deemoneid muude tarvilike tööde jaoks. Nö kubjas
Väiksemad kandilised kastikesed on:
- smtpd - Tegeleb sissetulevate ühendustega
- smtp - haldab väljuvaid ühendusi
- qmgr - controls all messages in the mail queues.
- local - Postfix own local delivery agent. It stores messages in mailboxes.
Järjekordadest jutustades on Posfixil neli põhilist järjekorda: maildrop, incoming, active ja deferred.
Lokaalne meil saadetakse maildropile ja kopeeritakse incoming järjekorda. Incoming järjekord on mailidele mis äsja saabunud ja queue manager pole neid veel ülevaadanud. Mailid mida ei saa edastada tõstetakse defferred järjekorda ,et see ei jääks saabuvatele-saadetavatele kirjadele jalgu.
Kui laiemalt vaadata siis ümbritseb postfixi omakorda veel terve pilv mitmesugustest abitarkvaradest, millega postfix atkiivselt suhtleb nagu spämmitõrje, viirusetõrje jne. Lühidalt oleks ühe tänapäevase viirusetõejga varustatud postiserveri skeem järgnev:
Ehk siis kiri liigutatakse enne postkasti potsatamist veel läbi portide ning socketite mitmesuguse kontrollprogrammistiku kätte.
Pisut detailsemat juttu http://www.linuxjournal.com/article/9454
Paigalduse osas peaks iga vähegi enesest lugupidavam ja suurem operatsioonisüsteem omama mingit oma porti/installipakki postfixist. Postfix on juba paljude operatsioonisüsteemide vaikimisi mta'ks, näiteks ubuntul. Kaasa tuleb installiga ka ohtralt seadistuse näiteid, abifaile ja manuale
Postimasinast endast saadetud kiri
Nt postimasin seest kasutaja enda poolt saadetud /usr/sbin/sendmail käsuga
$ echo "kirja sisu" | sendmail -s subjekt mart@loomaaed.tartu.ee
Kirja
- võrgust saabunud kiri - kõnealune Postfix kuulab arvuti võrguseadme port 25/tcp peal ning üle võrgu pöördub nt teine Postfix
- kohapeal tekitatud edasisuunamine - nt aliaste lahendamisel
- kohapeal moodustatud teade - Postfix genereerib oma töö käigus teated, nt nn bounce kirju kui kiri võeti küll töötlemisele nt võrgust, aga kirja töötlemisel selgus, et kirja ei õnnestu edasi saata
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
Virtuaalsed domeenid
Oletame, et meil on olukord, kus serveri aadressiks on zoo.tartu.ee ja meil on veel sellel serveril kaks domeeni. Esimene domeen on siil.ee ja teine domeen on karu.ee. Nüüd oleks kiusatus kirjutada need domeenid mydestination muutujale aga sellega kaasneb probleeme. Näiteks, kui meil on serveris kasutaja mart, siis töötaksid seejärel automaatselt mailiaadressid mart@siil.ee ja mart@karu.ee, mida me ei pruugi tahta. Olukorra elegantseks lahendamiseks on virtual maps.
mail.cf konfi kirjutame esiteks virtuaalsed domeenid ja defineerime map faili askoha
# cat mail.cf: ... virtual_alias_domains = siil.ee, karu.ee virtual_alias_maps = hash:/etc/postfix/virtual
Seejärel tekitame virtual faili, kus kinnistame domeenid kindlate kasutajatega.
# cat virtual mart@siil.ee mart ants@karu.ee ants
Ja seejärel tekitame virtual faili alusel map faili.
# postmap /etc/postfix/virtual
Ühe domeeni kirjade blokeerimine
Näiteks on teemist meil releeserveriga, mis edastab paljude veebiserverite meili. Või siis ühe hostinguserveri meili, kus on sadu domeene. Üks domeenidest hakkab aga agaralt spammima ja vaja oleks sealt lähtuvad kirjad blokeerida.
Spämmivaks domeeniks on näites hundionu.ee
smtpd_sender_restrictions = check_sender_access hash:/etc/postfix/access permit_mynetworks ...
NB! Järjekord peab kindlasti olema, et permit_mynetworks ja muud lubamised tuleksid peale saatja ligipääsu kontrolli. Nimelt osustatakse esimese reegliga sageli kirja saatus ära ja edasisis reegleid enam ei vaadata.
Seejärel tekitame access faili
# cat /etc/postfix/access hundionu.ee REJECT
Tekitame map faili
# postmap /etc/postfix/access
Testimiseks võime anda käsu:
$ echo test | mail kirja_saaja@zoo.tartu.ee -r kirja_saatja@hundionu.ee
Logis on seejärel näha
Jun 13 11:50:40 re2 postfix/smtpd[4988]: NOQUEUE: reject: RCPT from wwww.zoo.tartu.ee[193.40.0.47]: 554 5.7.1 <jacquelyn_dejesus@hundionu.ee>: Sender address rejected: Access denied; from =<jacquelyn_dejesus@hundionu.ee> to=<kallinson@yahoo.com> proto=ESMTP helo=<www.localdoma
Blokeerida võib ka mitte ainult domeene vaid üksikuid kirju, näiteks kirjutades
ants@hundionu.ee REJECT
Ajutiste kiirete piirangute jaoks on see lahendus hea kuid püsiva spamitabeli teemiseks ilmselt liiga tülikas
Kirjade ümbersuunamine teise serverisse
Abiks on kirjade edasi suunamisel ka transports mis Võimaldab kõiki või teatud domeenide maile suunata edasi teisele aadressile
Kasutamiseks vaja main.cf'is defineerida
transport_maps = hash:/etc/postfix/transport
Ning faili /etc/postfix/transport
*midagi.ee smtp:mail.tartu.ee
postmapi andmebaasi genereerimiseks
postmap /etc/postfix/transport
restart postfix and now every e-mail sent to example.com will relay through your specified e-mail server.
sender_canonical_maps võimaldab saatja aadresse ümber kirjutada, kasutamine
sender_canonical_maps = hash:/etc/postfix/sender_canonical
ja sinna faili kirjutada midagi sellist:
root@localhost root@loomaaed.zoo.edu.ee
Postfixi konfiguratsioon ehk failid main.cf ja master.cf
Postfixi põhilisteks seadistusfailideks on main.cf ja master.cf. Main.cf sisaldab postfixi seadistusparameetreid mis vajalikud mailide liigutamiseks ning master.cf seadistab deemonprotsesse
Kõige lihtsamaks main.cf seadistuseks oleks
smtpd_banner = $myhostname ESMTP $mail_name (no spam please ;) ) myhostname = loomaaed.tartu.ee mydomain = $myhostname myorigin = $mydomain inet_interfaces = all mynetworks = 127.0.0.0/8, 192.168.1.0/24 mydestination = $myhostname, localhost.$mydomain, elva.loomaaed.tartu.ee ../etc/postfix/mydestination unknown_local_recipient_reject_code = 550 alias_maps = hash:/etc/mail/aliases alias_database = hash:/etc/mail/aliases relay_domains = $mydestination, ../relay_domains home_mailbox = mbox smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
See kõik on üldine ja töötab ühtemoodi nii freebsd, solarise kui debiani või kasvõi windowsil (kui postfix sinna kunagi porditakse)
Seejärel tuleb muidugi seadistada ka postfixi septsiifilisem osa, mis varieerub erinevatel operatsioonisüsteemidel omasuudu, näiteks kus asub deemon, kus spool kaust või mis õigustes töötab postfix
Kasutada võib ka muutujaid stiilis config_directory = ../postfix ja kasutada stiilis transport_maps = hash:$config_directory/transport
Seletaks pisut põhilisi ridu lahti
smtpd_banner = $myhostname ESMTP $mail_name (no spam please ;) )
Üldine teade mida näeb kui ühenduda 25 pordi külge, üldiselt täidab pigem ilu ülesannet :)
myhostname = kool.edu.ee
See muutuja võetakse tavaliselt shellist ja sõltub mis on sereri hostnameks määratud, üldiselt võib olla soov seda siiski sageli muuta
mydomain = $myhostname
mydomain võib samuti sageli erineda myhostnamest, üldiselt kui aga ei võib kasutada näiteks muutujat $myhostname
myorigin = $mydomain
is the domain name that locally-posted email appears to have come from and is delivered to.
inet_interfaces = all
Postfix kuulab vaikimisi kõikidel võrguseadmetel mis serveril küljes 25ndat porti ja kust posti ka vastu võetakse
mynetworks = 127.0.0.0/8, 192.168.1.0/24
IP aadressid või võrkude vahemikud mis on turvalised nimetame localhosti ja serveri taguse kontori sisevõrgu. Nendest võrkudest võib saata maile läbi serveri. Kõik katsed saata või relay'da maili teistelt mitte siin defineeritud ip'delt keelatakse
Selleks, et etteantud IP vahemikust mõni aadress ajutiselt välja jätta, näiteks on see arvuti hakanud levitama spammi ning ei soovi, et postimasin pakuks talle relay ehk kirjade edasisaatmise võimalusi saab $mynetworks sisse kirjutada ka kujul !1.2.3.4/32 või !/path/to/file ja viimase sees siis IP numbrid/vahemikud, mis tuleb välja jätta. Töötab ka type:table. Seejuures tuleb tähele panna, et esimene sobivus võidab ehk soovitatav on kirjutada need piirangud enne teisi aadresse.
mydestination = $myhostname, localhost.$mydomain, ../etc/mydestination
Siin võib defineerida veel kõik masina küljes olevad domeenid neid komaga eraldadest, kust server peaks emaile vastuvõtma, lihtustamise huvides võib need kõik mydestination faili lisada ning faili korraga külgevõtta
../etc/mydestination loomaaed.tartu.ee mail.tartu.ee
unknown_local_recipient_reject_code = 550
Viisakas seadistada teiste mailisaatjate jaoks.
alias_maps = hash:/etc/mail/aliases
alias faili, vaikimisi etc all
alias_database = hash:/etc/mail/aliases
Alias faili andmebaas
relay_domains = $mydestination, /etc/postfix/relay_domains
Nimed domeenidest millele mailiserver on teiseks mx'iks. Näiteks lihtsalt loeteluna.
loomaaed.tartu.ee mail.tartu.ee
home_mailbox = mbox
Mailide salvestamise formaadiks mailbox. See on kõige vanem ja lihtsam formaat kuid mitte kõige parem ja tänapäeval oleks tegelikult juba üsnagi mõttekas kasutada maildir'i home_mailbox = Maildir/ võimalik on kogu maili kettale transportimine anda eraldi programmine, näit cyrusele mailbox_transport = cyrus
smtpd_sender_restrictions = permit_mynetworks, reject_unknown_sender_domain
Piirangud läbi mailiserveri saatjale, lubame automaatselt mynetworgist saatmised ning keelame tundmatud
smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
siinpuhul saab seadistada veel
permit_sasl_authenticated, reject_non_fqdn_hostname, reject_non_fqdn_sender, reject_non_fqdn_recipient, reject_unauth_destination, reject_unauth_pipelining, reject_invalid_hostname, reject_rbl_client bl.spamcop.net, reject_rbl_client sbl-xbl.spamhaus.org
Kui on soov suunata väljuv epost läbi mingi kindla serveri tasub kasutada relayhost muutujat, nt
relayhost = mail.hot.ee
Ja veel main.cf'i kasulikke muutujaid töökindluse suurendamiseks
Kõikide muutujate lahtiseletamine ja esiletoomine läheks väga pikaks, nendekohta on üsnagi mahukas ja põhjalik kirjeldus ametlikuls postconf manualis http://www.postfix.org/postconf.5.html aga püüaks veel mõningaid ja põhiliselt spamimise /ddos'imisi piiravaid ja töökindlust suurendavaid parameetreid esiletuua
maximal_queue_lifetime = 3d bounce_queue_lifetime = 3h
Saba elupikkuse reguleerimine, oluline masinates mis näiteks paljudele teistele domeenidele relay'ks
relay_domains = /etc/mail/relay-domains
domeenid milledele näiteks ollakse teiseks mx'iks
Suhtlemiskiiruste limiteerimised
anvil_rate_time_unit = 60s smtpd_client_connection_count_limit = 5 smtpd_client_connection_rate_limit = 100 smtpd_client_message_rate_limit = 100 smtpd_client_recipient_rate_limit = 200 smtpd_client_event_limit_exceptions = $mynetworks, ".ee" smtpd_timeout = 60s
Hea kasutada spammimiste pidurdamisteks
selleks hea näiteks nõuda ka smtpd_helo_required = yes kui korrektset suhtlus pole ei tule ka vastuseid ja määrata veel lisatäiendusi smtpd_helo_restrictions = permit_mynetworks, reject_non_fqdn_hostname, reject_invalid_hostname
Kui on vaja omakorda mingit ip'd või domeeni whitelistida mis on ometigi mitmetes rbl listides sees või ei vasta mingitele tingimustele tuleks see lisada rida check_client_access hash:/etc/postfix/client_access tekitada vastav fail sisuga näiteks 193.40.0.9 OK ning genereerida failile postmapiga andmebaas
Aadresside laiendused
postfixi main.cf'i tuleb lisada
recipient_delimiter = +
See teeb võimalikuks saata kirje aadressitele kasutaja+laiend@loomaaed.zoo.ee
See on hea seepärast, et saaks erinevatesse kohtadesse panna näiliselt erinevad aadressid, samas aliasi defineerimata. Postfix üritab esmalt saata kirja kasutajale 'kasutaja+laiend', kui see ei õnnestu, siis 'kasutaja'.
Nüüd saan panna aadressid nt kasutaja+plesk_admin ja kasutaja+plesk_reseller ja postkastist kirja lugedes saan teada, kellele mingisugune kiri mõeldud oli.
Seda on hea kasutada ka mingitesse foorumitesse jne registreerimisel, kus paned kasutaja+fooruminimi@zoo.ee aadressiks ja kui spämmi tulema hakkab, on kohe teada, kust lekkis (vähemalt saab pahandada ja teisi hoiatada).
Postisüsteemi testimine
Postisüsteemi heaks testimise abivahendiks on ikka telnet muidugi ja telnet port 25 sest kui MX pole masinale määratud siis on talle väga raske maili normaalsete vahenditega saata
Ühendume mailiserveriga
# telnet zoo.loomaaed.ee 25 Trying 193.40.0.17... Connected to zoo.loomaaed.ee. Escape character is '^]'. 220 zoo.loomaaed.ee ESMTP
Ütleme tervituse
HELO zoo.loomaaed.ee 250 zoo.loomaaed.ee
Aadress kellele soovime maili saata
MAIL FROM: kadri@mailiserver.ee 250 2.1.0 Ok
Kirjutame aadressi mis aadressilt saadetakse
RCPT TO: katsetus@zoo.loomaaed.ee 250 2.1.5 Ok
Sisestame andmed
DATA 354 End data with <CR><LF>.<CR><LF> tere
Kui enam midagi lisada ei soovi lõpetame punktiga
. 250 2.0.0 Ok: queued as 95C49F3118
Kirjutatud mail on ülal oleva teksti järgi lisatud järjekorda ning võime väljuda quit käsuga
quit
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.
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.
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
Kui on vaja näha postfixi vaikimisi seatud väärtusi siis tuleb käivitada postconf -d võtmega
TLS krüpteering ja SASL auth
Kasutajate autentimine ja kürpteeritud login
Postiserverite vahelise andmevahetuse krüptimine
Selleks, et server võimaldaks krüptida smtp klientide sissetulevaid ühendusi peavad olema seadistusfailis main.cf read
smtpd_tls_key_file = /etc/postfix/serdid/smtp.loomaaed.tartu.ee.pem smtpd_tls_cert_file = /etc/postfix/serdid/smtp.loomaaed.tartu.ee.crt smtpd_tls_CAfile = /etc/postfix/serdid/loomaaed-ca.crt smtpd_use_tls=yes smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
kus
- smtpd_tls_key_file näitab, millises failis asub sertifikaadile vastav salajane võti
- smtpd_tls_cert_file näitab, millises failis asub sertifikaat
- smtpd_tls_CAfile näitab, millises failis asuvad sertifikaadi allkirjastanud ahela ülemised sertifikaadid
Selleks, et teha kindlaks, kas postiserver toetab SMTP STARTSSL laiendust sobib öelda
$ openssl s_client -starttls smtp -showcerts -connect 192.168.1.251:25
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
Leidub palas Spam
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.
Logi ja probleemidega tegelemine
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
Suuremate mailivoogude ning blokeerumiste korral on hea uurida mis domeenid on probleemiks ja mis järjekordades on need kinni. Mailq pole samuti sageli selles osas eriti ülevaatlik.
# qshape deferred | head T 5 10 20 40 80 160 320 640 1280 1280+ TOTAL 540 0 3 1 2 10 4 14 31 59 416 mingi.edu.ee 320 0 2 1 0 9 3 4 11 51 239 hotmail.org 25 0 0 0 0 1 0 0 0 0 24
Mõne domeeni või saatja kõigi kirjade eemaldamiseks võib kasutada sarnast käsku
# mailq | grep spamidomeen.ee | awk '{ print $1 }' | postsuper -d -
Või
# mailq | grep 'MAILER-DAEMON$' | cut -d ' ' -f 1 | postsuper -d -
Selleks, et eemaldada sabast kõik kirjad siis allolev käsk, soovites mõnda spetsiifilist järjekorda siis lisada sellele käsu lõppu veel näiteks DEFERRED
# postsuper -d ALL
Kirjade sabast ära saatmiseks
# postqueue -f
Peudograafiline mailisaba haldur pfqueue http://pfqueue.sourceforge.net/
Postfixi sabaga töötamist hõlbustav skript
Postfixi queue on kasutamiseks üsnagi halvas formaadis, nimelt esitatakse iga kirja kohta info kolmel real. Selle hõlbustamiseks võiib tekitada nt järgneva bashi skripti.
# cat /usr/local/bin/mailq_filter #!/bin/bash if "$1" == "-l" then LONG='" " err' fi mailq | awk "BEGIN{ RS = \"\n\n\"}; { gsub(/\n/,\" \"); match(\$0, /\(.*\)/); err = substr(\$0, RSTART, RLENGTH); sub(/\(.*\)/, \"->\", \$0); if( \$1 != \"--\") \$2 = \"\"; gsub(/ */, \" \"); print \$0 $LONG }"
See skript väljastab ühel real mail ID kuupäev saatja -> saajad. Kui lisada võti '-l' (nagu long), siis paneb kõige lõppu ka Postfixi veateate, mispärast see deferredis istub.
Nüüd saab näiteks selliseid otsinguid korraldada:
$ mailq_filter | grep "\.com -> .*\.com"
Või kirjutada omakorda selliseid konstruktsioone
$ mailq_filter | grep mingistring-domeen | awk '{ print $1 }' | postsuper -d -
Või koostada pingerida sabas olevatest kirjadest saatja alusel
$ mailq_filter | awk '{ print $6 }' | sort | uniq -c | sort -rn | head
tulemuseks
7 notification+kjdm13h7wupd@facebookmail.com 6 personalikeskus@gmail.com 5 web.office.0100.10@att.net 5 notification+kr4mwb45snxr@facebookmail.com 3 returned@mail2market.net
Milter
TODO
Postfixi olulised tööriistad
Oluliseimad posfixi käsud mida sagedaimini igapäevaelus võib vajaminna on
- postalias - loob aliase andmebaasi
- postcat - võimaldab vaadata järjekorras olevate fialide sisu
- postmap - loob lookup map'e, suur hulk postfixi konfiguratsiooni informatsiooni hoitakse lookup tabelites.
- postconf - postfixi parameetrite/seadistuse vaatamine ja muutmine
konfiguratsiooniooni saab jooksvalt vaadata käsuga postconf -n
Postconf võimaldab kiirelt ja mugavalt muuta mingeid parameetreid main.cf seadistuses ning seda võib kasutada nii hästi skriptimisel näiteks
postconf -e 'readme_directory = no'
Käsuga muudetakse readme_directory väli
- postqueue - võimaldab ligipääsu postfixi järjekorrale
- postsuper - võimaldab järjekorraga manipuleerida, kustutada neid või liigutada ringi, samuti parandada vajaduse korral järjekorra struktuuri
- postdrop -
- postfix
- postkick
- postlock
- postlog
Imap deemonid mis sobivad kasutamiseks koos postfixiga
Imap-uw
Vanem ja lihtsam deemon, suudab vaid mbox formaati jagada. Halvasti konfigureeritav ja ebastabiilsem. Suurtesse süsteemidesse ei soovitaks
Dovecot
Lihtne, töökindel ja äärmiselt hästi konfigureeritav imap klient, loeb nii maildir++ kui mbox formaati. Sobib väiksematesse mailiserveritesse eriti hästi.
Courier
maildir++ formaati hästi lugev töökindel imapideemon, mboxi ei toeta, võimaldab mysqlilt autentimist. Sobib koos mysql ja postfixadminiga ideaalselt keskmiste suurustega süsteemidesse.
Cyrus
Lisaks imap deemonile tegeleb ka ise mailide kettale toimetamisega. Hoiab neid eraldi muudetud maildir++ formaadis ning peab berkeley db andmebaasides infot. Sobib väga suure koormusega süsteemidesse.
POstfix delivery tegemine Mysql kataloogi alusel
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
Queue kopeerimine postimasinate vahel
Kui mitu postimasinat töötavad koostöös, siis võib olla asjakohane nt ühe arvuti hoolduse ajaks sinna sappa kogunenud kirjad paigutada mõnda sobivasse muusse postimasinasse ringi. Selleks peab teine postimasin lubama kõnealuse postimasina kirju ning hooldusse minevas postimasinas tuleb nt relayhost parameetri abil kopeerida kirjad ära.
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
Lingid
http://www.postfix.org/documentation.html Ametlik dokumentatsioon
http://en.wikipedia.org/wiki/Comparison_of_mail_servers Mailiserverite võrdlused
http://dspam.nuclearelephant.com/index.shtml dspam koduleht
http://www.redhat.com/support/resources/howto/RH-postfix-HOWTO/x368.html redhat'i postfixi põhjalikud manualid
http://www.postfix.org/OVERVIEW.html postfixi arhidektuuri täpsem ülevaade
http://www.onlamp.com/pub/a/onlamp/2004/01/22/postfix.html postfixi logimisest
http://www.cyberciti.biz/faq/howto-blacklist-reject-sender-email-address/ blacklist aadressidele
http://www.linuxjournal.com/article/9454 Postfixi anatoomia
http://www.compwrite.com/?p=57
http://www.cyberciti.biz/tips/howto-postfix-flush-mail-queue.html saba puhastamisest