Postfix'i arhitektuuri kirjeldus ja kasutamise keerulisemad võimalused
Postfixi arhitektuur
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
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
Postfix seadistamine
Postfix tööd juhivad kaks peamist seadistusfaili
- master.conf
- main.conf
master.conf faili sisu on vaikimisi selline
Keerulisemal juhul nt sisaldab sellist osa
# cat /etc/postfix/master.cf ... 25 inet n - - - 1 postscreen -o syslog_name=postfix/postscreen smtpd pass - - - - 100 smtpd -o content_filter=scan:127.0.0.1:10024 -o receive_override_options=no_address_mappings -o smtpd_discard_ehlo_keywords=silent-discard,dsn -o mynetworks=127.0.0.0/8,10.0.0.44 scan unix - - n - 31 lmtp -o lmtp_send_xforward_command=yes -o lmtp_connection_cache_on_demand=no -o disable_dns_lookups=yes 26 inet n - - - 100 smtpd -o smtpd_tls_dh1024_param_file=${config_directory}/dh1024.pem -o content_filter=scan:127.0.0.1:10023 -o smtpd_sasl_auth_enable=yes -o smtpd_tls_security_level=may -o smtpd_sasl_auth_enable=yes -o smtpd_sasl_type=dovecot -o smtpd_sasl_path=inet:192.168.1.252:12345 -o smtpd_sasl_security_options=noanonymous -o smtpd_sasl_local_domain=$myhostname -o smtpd_recipient_restrictions=permit_mynetworks,permit_sasl_authenticated,reject_unauth_destination -o smtpd_helo_restrictions= -o smtpd_client_restrictions= -o smtpd_sender_restrictions= ...
kus
- interneti otsal ('inet') istub port 25 ('smtp') peal postscreen protsess
# find /usr/ -name postscreen /usr/lib/postfix/sbin/postscreen
- postfix postscreen manual õpetab, et
- postscreen annab kirja edasi postfix 'smptd' nimelisele sektsioonile mis on 'pass' tüüpi ja andmed saadetakse programmi smtpd sisendisse
/usr/lib/postfix/sbin/smtpd
- smtpd programm rakendab -o suvanditega kirjeldatud kontrollid ning pöördub 'scan' nimelisi 'unix' tüüpi sektsiooni poole, täpsustades pöördumist '127.0.0.1:10024' mida kasutab lmtp programm edasi pöördumisel
/usr/lib/postfix/sbin/lmtp
- lmtp programm pöördub arvutis töötava postfix välise komponendi poole aadressile 127.0.0.1:10024
- arvutis töötav 127.0.0.1:10024 komponent töötleb sisendi ja tõenäoliselt pöördub tagasi postfix poole pordile 26 vms
- sarnaselt võib kiri tiirutada veel omajagu postfixi sisemiste komponentide vahel + postfixi väliste juures käies vahepeal
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
Mail forwarding töötab praktiliselt nii nagu nö tavaline alises, kuid
- sissetulevaid kirju saab käsitleda arvestades @domeeninime ja selle alusel neid eristada (erinevalt tavalisest aliasest, mis võtab vastu kõik mydestination domeenide posti)
- kirju saab edasi saata suvalisele eposti aadressile, mis esitatakse tavalisel kasutaja@domeeninimi kujul (erinevalt tavalisest aliasest, mille abil saab teha ainult local delivery mydestination domeeninimedele)
Seadistusfailis /etc/postfix/main.cf sobib kasutada selliseid ridu
# cat mail.cf: ... virtual_alias_domains = zoopark.tartu.ee loomaaed.tartu.ee virtual_alias_maps = hash:/etc/postfix/virtual_alias_map
Failis /etc/postfix/virtual_alias_map sobib kasutada selliseid ridu
# cat virtual_alias_map root@zoopart.tartu.ee zoopark-postmaster@gmail.com root@loomaaed.tartu.ee loomaaed-postmaster@gmail.com ...
Kasutamiseks tuleb teisendada antud juhul (hash:/) tekstifail Berkeley andmebaasiks öeldes
# postmap /etc/postfix/virtual_alias_map
Tulemusena tekib fail /etc/postfix/virtual_alias_map.db
# file /etc/postfix/virtual_alias_map.db /etc/postfix/virtual_alias_map.db: Berkeley DB (Hash, version 9, native byte-order)
Sellise faili sisu saab esitada öeldes
# postmap -s /etc/postfix/virtual_alias_map
Kasulikud lisamaterjalid
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
- järjekorras oleva kirja sisu esitamine nö inimloetaval kujul
# postcat -q C558C4DC80
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
Väljuva kirja ümbriku mail from aadressi muutmine
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 on oma domeenidele kirjeldanud spf kirjed või spf 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
Aliases andmebaas
Postfix kasutab aliases andmebaasina Berkeley formaadis faili, mida hallatakse programmiga postalias.
- andmebaasi genereerimiseks peab olema ettevalmistatud nt sellise seisuga tekstifail
# cat /etc/aliases priit: priit@loomaaed.tartu.ee
ja sobib ütelda
# postalias /etc/aliases
mille tulemusena moodustatakse fail /etc/aliases.db
- andmebaasist sissekande pärimiseks sobib ütelda
# postalias -q priit /etc/aliases priit@loomaaed.tartu.ee
- kogu andmebaasi sisu esitamiseks sobib öelda
# postalias -s /etc/aliases
- andmebaasist sissekande kustutamiseks sobib öelda
# postalias -d priit /etc/aliases
- andmebaasi sissekande lisamiseks sobib öelda
# echo "mart: mart@loomaaed.tartu.ee" | postalias -i /etc/aliases
Aliases andmebaasi ei tehta tavaliselt muudatusi mitte otse vaid esmalt muudetakse vastavat tekstifaili /etc/aliases ning seejärel genereeritakse kogu andmebaas uuesti mis asub failis /etc/aliases.db.
Subject logimine
Selleks, et mail.log faili logitakse lisaks ka läbi käivate kirjade Subject read, sobib tekitada fail sisuga
/etc/postfix/header_checks /^subject:/ WARN
ning /etc/postfix/main.cf failis kasutada rida
header_checks = regexp:/etc/postfix/header_checks
Kasulikud lisamaterjalid
SendEmail programmi kasutamine
Paigaldamiseks tuleb öelda, kaks viimast on vajalikud tls toe jaoks
# apt-get install sendemail libio-socket-ssl-perl libnet-ssleay-perl
Kirja välja saatmiseks sobib öelda
$ /usr/bin/sendemail -f imre@auul.pri.ee -t imre@auul.pri.ee -u subject -m sisu -s mx1.auul:587 \ -xu imre@auul.pri.ee -xp parool -o tls=yes Dec 31 02:23:38 moraal sendemail[19048]: Email was sent successfully!
Kui Postfix ei kasuta korrektse TLS sertifikaati, siis võib olla tarvis seda õpetada, nt paigutada
/usr/lib/ssl/cert.pem
Kui Debian v. 7 Wheezy keskkonnas öeldakse tls=yes puhul
invalid SSL_version specified at /usr/share/perl5/IO/Socket/SSL.pm line 33
siis tuleb teha muudatus
# diff SSL.pm-orig /usr/share/perl5/IO/Socket/SSL.pm 1490c1490,1492 < m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))$}i --- > m{^(!?)(?:(SSL(?:v2|v3|v23|v2/3))|(TLSv1[12]?))}i
headeri saatmiseks
-o message-header="From: <imre@auul.pri.ee>"
Kasutajate kirjade debugimine
Vahel võib olla abiks saada võimalikult ehedalt kätte kasutaja kirjavahetus, nt sobib selleks kasutada
# cat /etc/postfix/main.cf .. sender_bcc_maps = hash:/etc/postfix/sender_bcc_maps.txt
ja
# cat /etc/postfix/sender_bcc_maps.txt imre.oolberg@moraal.ee imre@localhost
Tulemusena, kui süsteemi siseneb kiri 'mail from' = imre.oolberg@moraal.ee, siis läbib ta süsteemi tavalisel viisil kusjuures koopia temast läheb aadressile imre@localhost. Tõenäoliselt maandub ta lokaalses arvutis faili /var/mail/imre. Sarnaselt toimib recipient_bcc_maps. always_bcc abil saab kogu postimasinat läbiva kirjavahtuse nö kõrvale toimetada
always_bcc = imre@localhost
Kasulikud lisamaterjalid
- http://www.postfix.org/ADDRESS_REWRITING_README.html#auto_bcc
- http://www.sudosu.in/2013/06/create-bcc-of-incoming-and-outgoing_26.html
Ümriku from aadressi asendamine
Olgu ülesanne asendada postimasinat läbi minevate kirjade ümbriku 'mail from' aadress kõigil kirjadel väärtusele forwarder@moraal.ee. Selleks sobib kasutada
# cat /etc/postfix/main.cf canonical_maps = regexp:/etc/postfix/canonical canonical_classes = envelope_sender
ning
// forwarder@moraal.ee
Kasulikud lisamaterjalid
Märkused
- Postimasinas käsurealt kirja saatmiseks sobib öelda nt
$ echo -e "From: priit@loomaaed.tartu.ee\nTo: priit.kask@gmail.com\nSubject: test 17\n\nkirja sisu 17\n" |\ /usr/sbin/sendmail -f priit@loomaaed.tartu.ee priit.kask@gmail.com
/var/spool/postfix alla sobiva sh sobivate omanike-gruppide-loabittidega kataloogistruktuuri moodustamiseks sobib öelda
# mkdir /var/spool/postfix # /etc/init.d/postfix check
- Telnetiga kirja saatmine
imre@haldus:~$ telnet smtp.imool.ee 25 Trying 10.184.32.85... Connected to smtp.imool.ee. Escape character is '^]'. 220 smtp1a.aso.ee ESMTP Postfix (Debian/GNU) helo haldus.imool.ee 250 smtp1a.imool.ee mail from: imre@haldus.imool.ee 250 2.1.0 Ok rcpt to: imre.oolberg@imool.ee 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> test sisu . 250 2.0.0 Ok: queued as AA588B0625 quit 221 2.0.0 Bye Connection closed by foreign host.
Kõigi postimasinasse jõudnud kirjade edasisaatmine välisele catchall aadressile
Tundub, et virtual_maps parameeter on vananenud ja selle asemel soovitatakse kasutada virtual_domain_maps ja virtual_aliases_maps parameetrit, kuid siis ta töötab. /etc/postfix/main.cf failis sobib kasutada rida
# cat /etc/postfix/main.cf ... virtual_maps = regexp:/etc/postfix/virtual-regexp
ning /etc/postfix/virtual-regexp sisaldab nt sellist rida, regexp map failile ei ole vaja postmap öelda
# cat /etc/postfix/virtual-regexp /.+@.+/ priit@loomaaed.tartu.ee
Tulemusena, saates suvalisi kirju läbi selle postimasina, saadetakse nad kõik ühele priit@loomaaed.tartu.ee aadressile.
Postscreen
- TODO
- https://www.heinlein-support.de/sites/default/files/postfix_recent_adoption_of_new_technologies.pdf
- http://www.arschkrebs.de/slides/antispam-handout.pdf
2nd MX
2nd MX ülesanne on võtta kirju vastu ajal, kui primaarne (1nd MX) ei paku teenust. Tavaliselt vaikimisi proovib 2nd MX aegajalt (nt 20 min järel) ja 5 päeva jooksul saata kirju primaarsele edasi. 2nd MX vastutus on, et ta ei võtaks igasugust sodi internetist vastu ja püüaks seda võimalusel 1nd MX peale edasi saata. St parem kui 2nd MX peal töötab vähemalt greylisting, dnsbl ja viirtustõrje. 2nd MX seadistamiseks peab tegema kaks muudatust
- nimesüsteemis näitama madalama prioriteediga teise MX aadressi, nt
# dig imool.org mx | grep ^imool imool.org. 1682 IN MX 10 mx-1.imool.org. imool.org. 1682 IN MX 20 mx-2.imool.org.
- seadistama 2nd MX Postfixi tegelema kõnealuse domeeni imool.org kirjadega; 1nd MX Postfix juures ei ole vaja teha mingeid muudatusi
2n MX Postfix juures peab kasutama /etc/postfix/main.cf failis selliseid ridu, lubama imool.org kirjade releetamise üldiselt
relay_domains = /etc/postfix/relay_domainnames .. relay_recipient_maps = hash:/etc/postfix/relay_recipients_by_domains-txt
kus failide sisu on
# cat /etc/postfix/relay_domainnames imool.org
ning
# cat /etc/postfix/relay_recipients_by_domains-txt @imool.org x
ning viimasele failile tuleb moodustada vastav andmebaas
# postmap /etc/postfix/relay_recipients_by_domains-txt
Muudatuste kehtastamiseks tuleb öelda
# systemctl reload postfix
Toodud juhul võtab 2nd MX vastu kõikvõimalikele @imool.org aadressile saadetud kirjad ja püüab võimalusel need edasi saata 1nd MX peale. Tõenäoliselt on palju olematute aadressidega kirju, mille puhul hakkab 2nd MX saatma internetti tagasi vastuseid kohaletoimetamatuse kohta. Sellise olukorra vältimiseks oleks ideaalne kui on 2nd MX peal on kasutada eksisteerivate aadresside nimekiri. Sel juhul saab seda kasutada '@imool.org x' asemel relay_recipient_maps parameetrina, nt
# cat /etc/postfix/relay_recipients_imool.org-txt priit@imool.org x mart@imool.org x
Return receipt
Tavaliselt kirja saatja saab öelda oma eposti kliendis standardsel viisil, et kirja saaja saadaks teate kirja kättesaamise kohta. Kirja saaja epostkliendis sellise kirja saamisel tavaliselt avaneb automaatsel täiendav aken ja piisab seal vajutada OK. See info kantakse üle kahe sellise päisega
Return-Receipt-To: imre@auul.pri.ee Disposition-Notification-To: imre@auul.pri.ee
Täpne olles ei ole see Postfix ega smtp protokolli teema, vaid kahe eposti kliendi vaheline suhtlemine.
Delivery Status Notification
SMTP protokolli DSN (Delivery Status Notification) komponendi abil saab meiliklient öelda eposti serverile, et ta tagastaks eposti kirja kujul kirja saatmise edu kohta teate (alternatiiv oleks minna lugema eposti serveri logi). Selle töötamiseks peab kirja vastu võttes postimasin toetama DSN komponenti (EHLO vastuses on see kirjas) ja meiliklient ütlema midagi sellist
. ehlo moraal.moraal 250-mail.auul.pri.ee 250-PIPELINING 250-SIZE 20000000 250-VRFY 250-ETRN 250-STARTTLS 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN .. MAIL FROM:<imre@auul.pri.ee> RET=HDRS ... RCPT TO:<imre@moraal.ee> NOTIFY=SUCCESS,FAILURE ....
kus
- TODO
Kui kirja saatja ja lõpp-punkti vahel on mitu smtp serverit, siis teatega vastab viimane DSN komponenti toetav süsteem. Mõnel juhul on see päris sügaval vastuvõtva süsteemi sees töötav postimasin. Kui DSN vastus sisaledab palju infot töötleva süsteemi ja kirja teekonna kohta võib olla hea mõte DSN töötlemine ära lõpetada vastuvõtva süsteemi perimeetril.
Selleks sobib kasutada Postfix seadistuses sellist rida
# cat /etc/postfix/main.cf .. smtpd_discard_ehlo_keyword_address_maps = cidr:/etc/postfix/smtpd_discard_ehlo_keyword_address_maps.txt ...
ja faili /etc/postfix/smtpd_discard_ehlo_keyword_address_maps.txt sisu on
# cat /etc/postfix/smtpd_discard_ehlo_keyword_address_maps.txt sisaldab 10.0.6.0/24 silent-discard 0.0.0.0/0 silent-discard, dsn ::/0 silent-discard, dsn
# postmap /etc/postfix/smtpd_discard_ehlo_keyword_address_maps.txt
kus
- silent-discard on pseudoparameeter, mis tähistab asjaolu, et mitte logida toimuvat
- 10.0.6.0/24 - sellest võrgust tulevate pöördumisele näidatakse DSN komponenti
- muudele pöördumistele ei näidata DSN komponenti
DSN kasutamine Roundcube liidesest paistab välja nii, kirja saatmine
kus
- kiri saadetakse tavalisel viisil + on märgitud DSN (selle tõttu lisab php rakendus SMTP protokolli rääkides RCPT TO aadressi reale 'NOTIFY=SUCCESS,FAILURE'
ning vastuseks tulnud DSN teatega kiri
- vastus on tulnud auul.pri.ee domeeni MX arvutilt, kusjuures vastuses ta räägib millisele oma backendile ta kirja edastas (192.168.1.252); tõenäoliselt ei peaks seda vastuvõtja meilisüsteemi infot nii avalikult jagama; ehk oleks mõistlik, kui DSN tagastab kasutajale tema enda postisüsteem
- see on tavaline nö MAILER DAEMON kiri, tühja mail from ehk return-path aadressiga
Kasulikud lisamaterjalid
msmtp
msmtp http://msmtp.sourceforge.net/ tarkvara paigaldamiseks sobib öelda
# apt-get install msmtp
Kasutamiseks sobib nt selline seadistusfail
$ cat .msmtprc account default host 127.0.0.1 port 25 logfile /tmp/msmtp.log from imre@moraal.ee dsn_notify success,failure
kus
- host - millise smtp serveri kaudu kiri välja saata
- from - milline on mail from ja header from eposti aadress
- dns - lülitatakse sisse dsn notify
kirja saatmiseks
$ echo -e "Subject: Proovi kiri 26\r\n\r\nSee on proovi kirja sisu 26" | msmtp --debug -t imre@auul.pri.ee
sender-dependent-default-transport-maps
TODO
Kasulikud lisamaterjalid
VERP
TODO
Postfixi läbivate kirjade automaatne arhiivimine
TODO
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