Postfix'i kasutamine Debianiga

Allikas: Kuutõrvaja

Eesmärk

Eesmärgiks on seadistada käima selliste omadustega postiedastusagent (ingl. k. Mail Transfer Agent, MTA) Postfix

  • internetist võetakse vastu domeeni loomaaed.tartu.ee kasutajate epostiaadressidele saadetud kirju aadressil 192.168.0.25
  • vastuvõetud loomaaed.tartu.ee domeeni kirjad salvestatakse postimasina failisüsteemi, st tehakse local delivery
  • postimasina abil saab saata kirju välja internetti teistele kasutajatele alamvõrgus 192.168.0.0/24 asuvatest arvutitest
  • kirjade avalikust võrgust vastuvõtmisel teostatakse saatja ip aadressidele DNSBL kontrolli Spamhaus zen.spamhaus.org nimekirja põhjal
                        internet  
                          ...
                           .
                           v
 
          192.168.96.138  _|_
                         |   | Tulemüür
                         |___|
                           |   192.168.0.254/24
                           |                      192.168.0.0/24 alamvõrk
    -----|---------|-------|--------------|-------------------------------
         |         |                      |
        _|_       _|_                    _|_  192.168.0.25/24
       |   |     |   |                  |   | 
       |___|     |___|                  |___|
      
    Töökohaarvuti A                         Postimasin
 
               Töökohaarvuti B

Kuigi joonisel on kasutatud nö privaatseid aadresse kehtib loogilises mõttes esitus avalike aadresside kasutamise juhu kohta. Punktis Postfix'i_kasutamine_Debianiga#Postimasina kasutamine tulemüüri taga NAT võrgus käsitletakse juhtumit, kui postimasin kasutab privaatset aadressi asudes aadress-teisendava tulemüüri taga.

Püstitatud eesmärki võiks kasutaja edasi arendada

Nimesüsteemi ettevalmistamine

Õigesti seadistatud nimesüsteem on postisüsteemi kasutamise eelduseks.

MX ja A kirje

Selleks, et avalikus internetis saaksid ülidselt teised kasutajad (nt Gmail kasutajad) saata kirju nt aadressil mart@loomaaed.tartu.ee peab olema avalikus nimesüsteemis kirjeldatud domeeni loomaaed.tartu.ee MX (mail exchange, meilivahetuskoht) kirje. Selleks tuleb pöörduda nimeteenuse pakkuja poole ning öelda milline on kasutatav avalik ip aadress ning millist domeeninime soovitakse kasutama asuda, põhimõtteliselt saab tehnilises mõttes sellise soovi alusel avalikus nimesüsteemis vajalikud muudatused teha.

MX kirje näeb välja nt selline

 $ dig @ns.nimeserver.ee loomaaed.tartu.ee mx
 ...
 ;; QUESTION SECTION:
 ;looomaaed.tartu.ee.                  IN      MX
 
 ;; ANSWER SECTION:
 looomaaed.tartu.ee.           300     IN      MX      20 mail.loomaaed.tartu.ee.
 
 ;; AUTHORITY SECTION:
 looomaaed.tartu.ee.           300     IN      NS      ns1.loomaaed.tartu.ee.
 looomaaed.tartu.ee.           300     IN      NS      ns2.loomaaed.tartu.ee.

 ;; ADDITIONAL SECTION:
 mail.loomaaed.tartu.ee.       300     IN      A       192.168.0.24
 ns1.loomaaed.tartu.ee.      86400     IN      A       192.168.193.163
 ns2.loomaaed.tartu.ee.      86400     IN      A       192.168.193.164

Kui kasutaja internetist püüab saata kirja aadressile mart@loomaaed.tartu.ee, siis toimub selline järgnevus

  • kasutaja süsteemi postiedastusagent küsib avalikust nimesüsteemist loomaaed.tartu.ee postimasina nime, saab teada MX kirjest teada, et postimasina nimi on mail.loomaaed.tartu.ee
  • kasutaja süsteemi postiedastusagent saab lisaks A kirjest teada, et mail.loomaaed.tartu.ee postimasin asub aadressil 192.168.0.24
  • kasutaja süsteemi postiedastusagent võtab aadressile mart@loomaaed.tartu.ee kirja saamise asjus ühendust soketil 192.168.0.25:25 töötava postiedastusagendiga

PTR kirje

Tihtipeale on teised internetis töötavad postimasinad seadistatud käima selliselt, et nad konktrollivad, kas MX kirje domeeninimele (mail.loomaaed.tartu.ee) vastava ip aadressi (192.168.0.24) pöördteisendus on olemas, või veel enam, langeb kokku MX domeeninimega. Sellise kontrolli läbimiseks peab olema nimesüsteemis seadistatud korrentne PTR kirje, antud juhul selline

 $ dig -x 192.168.0.24
 
 ;; QUESTION SECTION:
 ;24.0.168.192.in-addr.arpa.    IN      PTR
 
 ;; ANSWER SECTION:
 24.0.168.192.in-addr.arpa. 300 IN      PTR     mail.loomaaed.tartu.ee.
 
 ;; AUTHORITY SECTION:
 0.168.192.in-addr.arpa. 86400  IN      NS      ns1.loomaaed.tartu.ee.
 0.168.192.in-addr.arpa. 86400  IN      NS      ns2.loomaaed.tartu.ee.

Postimasina ettevalmistamine

Postimasinas tuleks esmalt kontrollida, kas arvuti nimi on korrektselt seadistatud. Antud juhul peaks olema failis /etc/hostname kirjas

 # cat /etc/hostname
 mail

ning failis /etc/hosts kirjas

 # cat /etc/hosts
 127.0.0.1       localhost.localdomain localhost
 192.168.96.138  mail.loomaaed.tartu.ee      mail

Kontrollimiseks peab hostname programmile süsteem vastama nii

 # hostname
 mail
 # hostname -f
 mail.loomaaed.tartu.ee

Olgu postimasin ühendatud võrku nii nagu punktis Eesmärk on esitatud, kusjuures

  • tulemüürist peab saama pöörduda postimasina pordile 25/tcp
  • postimasin peab saama pöörduda internetti pordile 25/tcp
  • postimasin peab saama nimesid lahendada

Lisaks võiks postimasinas olla seadistatud selline tarkvara

  • ntp - ajaserver, õigemini küll kliendi rollis
  • lokaat
  • syslog

Tarkvara paigaldamine

Postfix tarkvara v. 2.5.5 saab paigaldada Debian Lenny paketihaldusest öeldes

 bash# apt-get install postfix postfix-doc

Tavaliselt siis eemaldatakse vaikimisi Debiani standard operatsioonisüsteemi kooseisus esinev Exim Postfixi vastu. Postfixi paigaldamisel tuleb valida 'General type of configuration', valime 'Internet Site'

Postfix-1.gif

Seejärel küsitakse 'mail name' väärtust, see hakkab esinema läbi selle postisüsteemi välja saadetud kirjade eposti aadresside @ märgist paremal

 loomaaed.tartu.ee

Seejärel tekitatakse kasutaja, genereeritakse seadistusfailid ja käivitatakse Postfix.

 Setting up postfix (2.5.5-1.1) ...
 Adding group `postfix' (GID 107) ...
 Done.
 Adding system user `postfix' (UID 105) ...
 Adding new user `postfix' (UID 105) with group `postfix' ...
 Not creating home directory `/var/spool/postfix'.
 Creating /etc/postfix/dynamicmaps.cf
 Adding tcp map entry to /etc/postfix/dynamicmaps.cf
 Adding group `postdrop' (GID 108) ...
 Done.
 setting myhostname: mail.loomaaed.tartu.ee
 setting alias maps
 setting alias database
 changing /etc/mailname to loomaaed.tartu.ee
 setting myorigin
 setting destinations: loomaaed.tartu.ee, mail.loomaaed.tartu.ee, localhost.loomaaed.tartu.ee, localhost
 setting relayhost: 
 setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
 setting mailbox_size_limit: 0
 setting recipient_delimiter: +
 setting inet_interfaces: all
 /etc/aliases does not exist, creating it.
 WARNING: /etc/aliases exists, but does not have a root alias.
 
 Postfix is now set up with a default configuration.  If you need to make 
 changes, edit /etc/postfix/main.cf (and others) as needed.  To view Postfix configuration
 values, see postconf(1).
 
 After modifying main.cf, be sure to run '/etc/init.d/postfix reload'.
 
 Running newaliases
 Stopping Postfix Mail Transport Agent: postfix.
 Starting Postfix Mail Transport Agent: postfix.
 Setting up postfix-doc (2.5.5-1.1) ...

Postfixiga on seotud failisüsteemis sellised kataloogid ning failid

  • /etc/postfix - Postfixi seadistusfailid, kõige olulisemad on main.cf ja master.cf
  • /etc/mailname - sisuga 'loomaaed.tartu.ee'
  • /var/spool/postfix - saba (ingl. k. queue)
  • /var/log/mail.* - logi
  • /usr - programmifailid ja teegid ning dokumentatsioon, erinevates kataloogides, 'dpkg -L postfix' ütleb
  • man 5 postconf - manuaal
  • /etc/aliases - nn aliases andmebaas

Tarkvara paigaldamisel esitatud dialoogi saab edaspidi esile kutsuda öeldes

# dpkg-reconfigure postfix

Postfixi seadistamine võtma vastu loomaaed.tartu.ee domeeni kirju

Parasjagu kehtestatud seadistusi saab küsida öeldes 'postconf -n', -n võti tähendab, et esitatakse seadistused, mis on /etc/postfix/main.cf failis kirjeldatud

 # postconf -n
 alias_database = hash:/etc/aliases
 alias_maps = hash:/etc/aliases
 append_dot_mydomain = no
 biff = no
 config_directory = /etc/postfix
 html_directory = /usr/share/doc/postfix/html
 inet_interfaces = all
 mailbox_size_limit = 0
 mydestination = loomaaed.tartu.ee, mail.loomaaed.tartu.ee, localhost.loomaaed.tartu.ee, localhost
 myhostname = mail.loomaaed.tartu.ee
 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128
 myorigin = /etc/mailname
 readme_directory = /usr/share/doc/postfix
 recipient_delimiter = +
 relayhost = 
 smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
 smtpd_banner = $myhostname ESMTP $mail_name (Debian/GNU)
 smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem
 smtpd_tls_key_file = /etc/ssl/private/ssl-cert-snakeoil.key
 smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
 smtpd_use_tls = yes

Kõigi kehtestatud seadistusparameetrite nimekirja koos väärtustega näeb öeldes

 # postconf

ning vaikeväärtustega nimekirja öeldes

 # postfix -d

Tarkvara paigaldamise käigus moodustatud seadistused täidavad püstitatud eesmärgi kirjade vastuvõtmise osas

  • inet_interfaces - väärtus 'all' tähendab, et Postfix server kuulab kõigil võrguseadmetel port 25/tcp peale tulevaid ühendusi
  • mydestination - väärtuste seas esineb domeeninimi loomaaed.tartu.ee, mis tähendab, et selle domeeni kirju võetaks vastu ja neile tehakse local delivery
  • vaikimisi ei ole Postfix avatud relee (ingl. k. open relay), st läbi mail.loomaaed.tartu.ee ei saa avalikust internetist pöördudes saata kirju suvaliste domeenide kasutajatele
  • vaikimisi salvestab Postfix local delivery kirjad kasutajanimelistesse failidesse kataloogi /var/mail

Postfixi seadistusfailis /etc/postfix/main.cf kasutatud direktiivide esinemise järjekord ei ole tehnilises mõttes tähtis va asjaolu, et kui üks ja sama direktiiv on kirjeldatud mitu korda, siis jääb kehtima viimane kirjeldus. Kasutamise mõttes on otstarbekas samalaadseid direktiive grupeerida.

Kirja vastuvõtmine

Kui internetis saata kiri aadressile mart@loomaaed.tartu.ee, siis ilmub Postfixi logisse

 # tail -f /var/log/mail.log
 ...
 1 Jul 11 15:51:21 mail postfix/smtpd[6618]: connect from post-relee.auul[192.168.1.150]
 2 Jul 11 15:51:21 mail postfix/smtpd[6618]: 77CB1AC112: client=post-relee.auul[192.168.1.150]
 3 Jul 11 15:51:21 mail postfix/cleanup[6622]: 77CB1AC112: message-id=<20090711125121.7AC116E512@bmail.com>
 4 Jul 11 15:51:21 mail postfix/qmgr[6304]: 77CB1AC112: from=<priit@bmail.com>, size=516, nrcpt=1 (queue active)
 5 Jul 11 15:51:21 mail postfix/smtpd[6618]: disconnect from post-relee.auul[192.168.1.150]
 6 Jul 11 15:51:21 mail postfix/local[6623]: 77CB1AC112: to=<mart@loomaaed.tartu.ee>, relay=local, \
   delay=0.02, delays=0.01/0.01/0/0, dsn=2.0.0, status=sent (delivered to mailbox)
 7 Jul 11 15:51:21 post-lenny postfix/qmgr[6304]: 77CB1AC112: removed

kus

  1. - internetist aadressilt 192.168.1.150 võetakse ühendust
  2. - ...
  3. - eposti kirja identifikaator (message-id) on 20090711125121.7AC116E512@bmail.com
  4. - kiri on aadressilt priit@bmail.com
  5. - tcp/ip ühendus arvutiga 192.168.1.150 lõpetatakse
  6. - sooritatakse nn local delivery, st kiri salvetataks faili /var/mail/mart

Järgmised kirjad lisanduvad faili /var/mail/mart.

Vastuvõetud kirja lugemine

Postfix on postiedastusagent ja ta ei tegele ise kasutajate postiprogrammide (nt Icedove või Alpine) teenindamisega. Postfixi poolt postimasina failisüsteemi salvestatud nn postkastifailidest /var/mail/kasutajanimi saab kasutaja lugeda kirju kahel moel

  • kõige otsekohesem, aga praktiliseks kasutamiseks ehk suhteliselt ebamugav on kasutajatel on kirju lugeda nii, et logida sisse kasutajana postimasinasse ja kasutada programmi Alpine, mis oskab sellest failist kirju esitada
  • postimasinasse tuleb paigaldada mõni spetsiaalselt kasutajate postiprogrammidega suhtlev tarkvara, nt IMAP server Cyrus, mis oskab võrgus teenindada kasutaja töökoharvutist nt Icedove programmi kui IMAP kliendi pöördumisi

Alpine paigaldamiseks peab süsteemiadministraator ütlema

 # apt-get install alpine

Postfixi seadistamine saatma välja alamvõrgu 192.168.0.0/24 kirju

Kirjade väljasaatmiseks tuleb muuta failis /etc/postfix/main.cf parameetri mynetworks väärtust lisades sinna kasutatava subneti aadressi, tulemusena on vastav rida selline

 mynetworks = 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128 192.168.0.0/24

Peale seadistusfaili muutmist tuleb öelda

 # /etc/init.d/postfix reload

Kirja väljasaatmine

Kirja väljasaatmiseks tuleb kasutaja postiprogrammis, nt Icedove seadistada väljuva eposti arvuti aadressiks 192.168.0.25

Postfix-2.gif

Kirja väljasaatmisel tekib logisse

 1 Jul 11 19:33:09 mail postfix/smtpd[6278]: connect from moraal[192.168.0.10]
 2 Jul 11 19:33:10 mail postfix/smtpd[6278]: 5590C6E50A: client=moraal[192.168.0.10]
 3 Jul 11 19:33:10 mail postfix/cleanup[6282]: 5590C6E50A: message-id=<4A58BEC5.20506@loomaaed.tartu.ee>
 4 Jul 11 19:33:10 mail postfix/qmgr[6274]: 5590C6E50A: from=<mart@loomaaed.tartu.ee>, size=484, nrcpt=1 (queue active)
 5 Jul 11 19:33:10 mail postfix/smtpd[6278]: disconnect from moraal[192.168.10.10]
 6 Jul 11 19:33:10 mail postfix/smtp[6283]: 5590C6E50A: to=<priit@bmail.com>, \
   relay=mail.bmail.com[192.168.32.82]:25, delay=0.3, delays=0.15/0.01/0.03/0.11, dsn=2.0.0, status=sent \
   (250 2.0.0 Ok: queued as 77B0E4A9D2)
 7 Jul 11 19:33:10 mail postfix/qmgr[6274]: 5590C6E50A: removed

kus

  1. postimasina poole pöördub kasutaja oma töökohaarvutist nt Icedove programmiga
  2. ...
  3. ...
  4. kiri on from aadressiga mart@loomaaed.tartu.ee
  5. tcp/ip ühendus kasutaja töökohaarvutiga lõpetatakse
  6. kiri on saadetakse aadressile priit@bmail.com võttes ühendust postimasinaga aadressil 192.168.32.82 ja 'status=sent' tähendab, et kiri õnnestus välja saata

Postimasina kasutamine tulemüüri taga NAT võrgus

Kui postimasin asub aadress-teisendavad tulemüüri taga, siis tuleb Postfixi seadistusfaili /etc/postfix/mail.cf lisada rida

 proxy_interfaces = 192.168.96.138

kus ip aadress on tulemüüri avalik aadress, mida internetist kasutatakse selle postimasina poole pöördumiseks.

Spämmi tõrjumine DNSBL nimekirja abil

DNSBL (Domain Name System Blocklist) tehnika võimaldab enne kirja vastuvõtmist postimasinal kontrollida tavalise nimepäringu abil, kas tema poole pöörduva SMTP kliendi ip aadress on nö spämmijate nimekirjas või mitte. Postfix toetab sellise kontrolli teostamist.

DNSBL teenusepakkujaid on internetis palju, sobiva valimisel tuleks arvestada selliseid asjaolusid

  • DNSBL teenusepakkujale usaldatakse otsuse tegemine, millistelt aadressidelt ei saa kõnealusesse postimasinasse kirju saata
  • DNSBL teenuseid pakutakse erinevatel tingimustel, nt on tasulisi ja mitte-tasulisi

Populaarsed teatud tingimustel tasuta DNSBL teenuse pakkujad on

Spamhaus esitab oma aadresse kolmes erinevas nimekirjas ja kombineeritud nimekirjadena

  • Spamhaus Block List (SBL, sbl.spamhaus.org) - kinnitatud spämmijate ip aadressid
  • Exploits Block List (XBL, xbl.spamhaus.org) - nimekiri tuntud viirusi, eksploite, troojalasi jms levitavatest ip aadressidest
  • Policy Block List (PBL, pbl.spamhaus.org) - nö kodukasutajate ip aadresside nimekiri, millelt tegelikult ei peaks kasutajad eposti saatma

Kombineeritud nimekirjad on sellised

  • sbl-xbl.spamhaus.org - SBL+XBL
  • zen.spamhaus.org - SBL+XBL+PBL

Spamhaus teenus on nö kodukasutajatele tasuta kasutada teatud tingimustel, kasutamistingimusi saab vaadata üksikasjalikult aadressilt http://www.spamhaus.org/

Postfixi seadistamiseks kontrollima SMTP kliendi ip aadressi zen.spamhaus.org nimekirjast peab seadistusfailis /etc/postfix/main.cf olema nt rida

 smtpd_recipients_restrictions = permit_mynetworks, reject_unauth_destination,
   reject_rbl_client zen.spamhaus.org

Seda rida tuleks lugeda selliselt

  • piiranguid kontrollitakse järjest, rakendatakse esimesena klappiv piirang
  • kui ükski piirang ei klapi, siis vaikimisi lubatakse andmevahetust
  • permit_mynetworks - postfixi smtpd komponent lubab andmevahtust kohalikest võrkudest
  • reject_unauth_destination - postfixi smtpd komponent ei luba andmevahetust kui RCPT TO päise järgi ei ole postimasin seadistatud kirja vahendama edasi või ise vastu võtma; see rida tegeleb eituse genereerimisega st kui nt kiri on vahendatav, siis tegeleb selle läbi lubamisega mõni reject_recipients_restrictions järgmine kontroll või lubatakse ta vaikimisi läbi
  • reject_rbl_client zen.spamhaus.org - kontrollitakse dns abil Spamhaus teenusest, kas tegemist on tuntud spämmijaga ning vajadusel andmevahetust ei lubata
  • permit - kui kiri ei klappinud ühegi kontrolliga, siis lubatakse ta läbi
  • kui seadistusfaili rida algab tühiku või tabulatsioonimärgiga, siis loetakse seda eelmise rea jätkuks
  • elemente on samaväärne eraldada tühiku või komaga (või mõlemiga)

Piirangute esitamisel on järjekord oluline, sõltub asjaoludest, aga üldiselt on otstarbekas kallimad kontrollid paigutada lõpupoole.

Kuulates võrku pealt on näha, et postimasin esitab oma seadistatud nimeserveri kaudu päringu Spamhausile ja saab vastuseks, et saatja 192.168.32.86 ip aadress ei ole tuntud spämmija

 21:35:41.145213 IP 192.168.0.25.52665 > 192.168.96.138.53: 48934+ A? 86.32.168.192.zen.spamhaus.org. (48)
 21:35:42.133214 IP 192.168.96.138.53 > 192.168.0.25.52665: 48934 NXDomain 0/1/0 (112)

Kui aga Spamhausi poolt kiri peatatakse, siis on Postfixi logis kirjas midagi sellist

 Jul 11 21:48:47 mail postfix/smtpd[21995]: NOQUEUE: reject: RCPT from unknown[192.168.175.125]:\
   554 5.7.1 Service unavailable; Client host [192.168.175.125] blocked using zen.spamhaus.org; \
   http://www.spamhaus.org /query/bl?ip=192.168.175.125; \
   from=<handbags@spammija.net> to=<rosenqvistrosenqvistrbwf@loomaaed.tartu.ee> proto=ESMTP \
   helo=<125-175-168-192.cab.tiiba.net.ar>

Nö käsitsi saab ip aadressi Spamhausi kuulumist kontrollida küsides, kuulumisel vastatakse nii

 $ dig +short 125.175.168.192.zen.spamhaus.org
 127.0.0.4

ja mitte-kuulumisel

$ dig +short 125.175.168.192.zen.spamhaus.org
$

Või brauseriga küsides aadressilt http://www.spamhaus.org/query/bl?ip=192.168.175.125

Kasulikud lisamaterjalid