Postfix'i SMTP AUTH üle TLS vastu Postgresql baasi Debianiga

Allikas: Kuutõrvaja

Eesmärk

Eesmärgiks on seadistada käima Postfix SMTP server selliselt, et tema kaudu saaks SMTP klient, tavaliselt suvaliselt ip aadressilt pöörduv nö teenuse registreeritud kasutaja oma postiprogrammiga, nt Icedovega, kirja välja saata, kusjuures see server ei oleks samal ajal avalik relee (ingl. k. open relay). Sellise ülesande turvaliseks lahendamiseks on tarvis SMTP serveril ja kliendil sooritada võrreldes nö tavaolukorraga kaks täiendavat tegevust

  • kliendi ja serveri vahel on tarvis tekitada turvaline andmevahetuskanal
  • server peab saama klienti autentida

Käesolevas tekstis esitatakse üks võimalik lahendus kusjuures

  • kasutajate autentimiseks vajalikud andmed asuvad PostgreSQL andmebaasis
  • Postfix kasutab Cyrus v. 2 SASL (Simple Authentication and Security Layer) teeke, et PAM vahendusel PostgreSQL baasiga suhelda

Asjakorraldust võiks iseloomustada sellise skeemiga

                               .... kliendi postiprogramm, nt Icedove
                        internet  
                          ...
                           .
                           v
                          ___
                         |   | SMTP server
                         |___|
 
 Postfix --> SASL teek --> saslauthd --> PAM --> /etc/pam.d/smtp --> pam_pgsql.so teek --> PostgreSQL baas

Postgresql andmebaasi ettevalmistamine

TODO

SASL ettevalmistamine

Cyrus SASL teekide ja utiliitide paigaldamiseks tuleb öelda

 # apt-get install libsasl2-modules sasl2-bin

SASL seadistusfailis /etc/default/saslauthd peab sisalduma

 # egrep -v "^$|^#" /etc/default/saslauthd 
 START=yes
 DESC="SASL Authentication Daemon"
 NAME="saslauthd"
 MECHANISMS="pam"
 MECH_OPTIONS=""
 THREADS=5
 OPTIONS="-c -m /var/spool/postfix/var/run/saslauthd"

Seadistusfailis näidatud kataloogis /var/spool/postfix/var/run/saslauthd asub nimega soket

 # file /var/spool/postfix/var/run/saslauthd/mux
 /var/spool/postfix/var/run/saslauthd/mux: socket

ja ta asub /var/spool/postfix kataloogis, kuna postfix kasutaja töötab chroot keskkonnas.

PAM ettevalmistamine

 # apt-get install libpam-pgsql

libpam-pgsql mooduli seadistusfail on /etc/pam_pgsql.conf

 host= 192.168.1.247
 database = auth
 user = cyrus
 password = parool
 table = cyrus
 user_column = username
 pwd_column = passwd
 expired_column = expire_status
 newtok_column = newtok
 debug
 pw_type = md5

Postfix kasutab autentimiseks moodulit /etc/pam.d/smtp mille sisu võiks olla selline

 auth        required    pam_pgsql.so
 account     required    pam_pgsql.so
 password    required    pam_pgsql.so

SASL ja PAM testimiseks sobib öelda

 $ testsaslauthd -u mart -p parool -f /var/spool/postfix/var/run/saslauthd/mux -s smtp
 0: OK "Success."

Postfixi seadistamine SMTP klienti autentima

Selleks, et Postfix server teaks, kuidas SASL abil kasutajat autentida peab näitama /etc/postfix/sasl/smtpd.conf failis ära SASL soketi asukoha postfix kasutaja chroot keskkonna suhtes

 # cat /etc/postfix/sasl/smtpd.conf
 pwcheck_method: saslauthd
 saslauthd_path: /var/run/saslauthd/mux
 mech_list: plain login

Ja selleks, et Postfix pääseks seda soketit kasutama tuleb lisada kasutaja postfix gruppi sasl, failis /etc/group peab olema rida

 sasl:x:45:postfix

Tulemusena

 # id postfix
 uid=102(postfix) gid=105(postfix) groups=105(postfix),45(sasl)

Grupimuudatus kehtestub peale Postfixi restarti.

Postfix /etc/postfix/main.cf seadistusfaili SMTP kliendi autentimist puudutav osa võiks olla nt selline, kusjuures antud juhtumil toimub andmevahetus sh smtp kasutajanime ja parooli liikumine üle võrgu avatekstina

 smtpd_sasl_auth_enable = yes
 smtpd_recipient_restrictions =
   permit_mynetworks
   permit_sasl_authenticated
   reject_unauth_destination
 smtpd_sasl_authenticated_header = yes
 broken_sasl_auth_clients = yes

kus

  • permit_sasl_authenticated - Postfix server releetab autenditud kliendi kirju suvalistele adressaatidele

SMTP AUTH kliendi kasutamine

SMTP AUTH toega serverit saab kasutada mõne moodsama SMTP kliendiga, nt Icedove kas õnnestub SMTP autentimine. Selleks tuleks konto juures väljamineva serveri juures kasutada selliseid valikuid

Smtp-auth-postfix-1.gif

Kui nii seadistatud SMTP serveri kirja välja saata, siis kliendi käest küsitakse parooli ning serveri logisse tekivad sellised kirjed

 Jul  9 22:00:48 post-lenny postfix/smtpd[4841]: connect from moraal.auul [192.168.10.10]
 Jul  9 22:00:52 post-lenny postfix/smtpd[4841]: 9B1D3AC10E: client=moraal.auul[192.168.10.10], sasl_method=PLAIN, sasl_username=mart
 Jul  9 22:00:52 post-lenny postfix/cleanup[4845]: 9B1D3AC10E: message-id=<4A563E5F.3020201@moraal.auul>
 Jul  9 22:00:52 post-lenny postfix/qmgr[4839]: 9B1D3AC10E: from=<mart@loomaaed.tartu.ee>, size=521, nrcpt=1 (queue active)
 Jul  9 22:00:52 post-lenny postfix/smtpd[4841]: disconnect from moraal.auul[192.168.10.10]
 Jul  9 22:00:53 post-lenny postfix/smtp[4846]: 9B1D3AC10E: to=<priit@loomaaed.tartu.ee>, \
   relay=mail.loomaaed.tartu.ee[192.168.32.82]:25, \delay=1.2, delays=0.32/0/0.58/0.35, dsn=2.0.0, status=sent \
  (250 2.0.0 Ok: queued as 5C4B64A9C7)
 Jul  9 22:00:53 post-lenny postfix/qmgr[4839]: 9B1D3AC10E: removed

Kirja päisesse on lisatud iseloomulik päiserida 'Authenticated sender'

 Received: from moraal.auul (moraal.auul [192.168.10.10])
   (Authenticated sender: mart)
   by post-lenny.auul (Postfix) with ESMTPA id 9B1D3AC10E
   for <priit@loomaaed.tartu.ee>; Thu,  9 Jul 2009 22:00:52 +0300 (EEST)

Postfix serverile TLS krüptimise seadistamine

Eelmises punktis seadistatud SMTP+AUTH lahendust on asjakohane täiendada autenditud smtp kliendi jaoks andmevahetuse, sh kasutajanime ja parooli esitamise ajal toimuva andmevahtuse, krüptimisega. Postfix server krüptib smtp klientide sissetulevaid ühendusi kui seadistusfailis /etc/postfix/main.cf kasutada selliseid direktiive

 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_loglevel = 1
 smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache

kus

  • smtpd_use_tls - TLS on sisselülitatud
  • 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
  • smtpd_tls_loglevel - logimise tase

Selleks, et teha kindlaks, kas postiserver toetab SMTP STARTSSL laiendust sobib öelda

 $ openssl s_client -starttls smtp -showcerts -connect 192.168.1.151:25

Selliselt seadistatud server teenindab endiselt nö tavalisi smtp kliente ja peab ühendust tavaliste teiste smtp serveritega, aga suudab teenindada smtp kliente kasutades krüptimist kui klient seda nõuab. TLS puhul on oluline, et krüptitud ja krüptimata teenuse pakkumine toimub sama soketi peal, kusjuures suhtlemise alguses lepivad klient ja server kokku kas kasutatakse krüptimist või mitte.

Krüptimist kasutava SMTP AUTH kliendi kasutamine

Krüptiva SMTP AUTH toega serverit saab kasutada mõne moodsama SMTP kliendiga, nt Icedove kas õnnestub SMTP autentimine. Selleks tuleks konto juures väljamineva serveri juures kasutada selliseid valikuid

Smtp-auth-postfix-2.gif

Nii suhtelvate osapoolte puhul tekib serveri logisse lisaks

 Jul  9 22:23:28 post-lenny postfix/smtpd[4952]: setting up TLS connection from moraal.auul[192.168.10.10]
 Jul  9 22:23:36 post-lenny postfix/smtpd[4952]: Anonymous TLS connection established from moraal.auul[192.168.10.10]: \
   TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)
 Jul  9 22:23:45 post-lenny postfix/smtpd[4952]: 0A51BAC102: client=moraal.auul[192.168.10.10], sasl_method=PLAIN, sasl_username=mart

Kasutaja autentimine Kerberosega

Kerberose kasutaja autentimiseks peab olema kasutada Kerberose infrastruktuur, nt selline nagu kirjeldatud tekstis MIT Kerberose kasutamine Debianiga. Lisaks tuleb postimasinasse paigaldada pakett libsasl2-modules-gssapi-mit

# apt-get install libsasl2-modules-gssapi-mit

Postfixi seadistamiseks tuleb kasutada /etc/postfix/main.cf failis nt

smtpd_sasl_auth_enable = yes
smtpd_sasl_type = cyrus
smtpd_sasl_security_options = noanonymous

smtpd_recipient_restrictions =
  permit_mynetworks
  permit_sasl_authenticated
  reject_unauth_destination

smtpd_sasl_authenticated_header = yes
broken_sasl_auth_clients = yes
smtpd_sasl_local_domain = loomaaed

import_environment = MAIL_CONFIG MAIL_DEBUG MAIL_LOGTAG TZ XAUTHORITY DISPLAY LANG=C \
  KRB5_KTNAME=/etc/postfix/krb5.keytab

kus

  • smtpd_sasl_authenticated_header - kas lisatakse kirja päistele sarnane rida
(Authenticated sender: priit@loomaaed)
  • import_environment - muudele vaikimisi kasututavatele muutujatele lisataks muutuaja KRB5_KTNAME näidatud väärtusega selleks, et Postfixi server oskaks kasutada oma teenuse jaoks sobivat Kerberose keytab faili

ning failisüsteemis moodustada kataloog /var/spool/postfix/var/tmp

# mkdir /var/spool/postfix/var/tmp -p
# chmod 1777 /var/spool/postfix/var/tmp

Moodustada ja paigutada smtp teenuse Kerberose keytab faili /var/spool/postfix/etc/postfix/krb5.keytab

# kadmin -q priit/admin -q "addprinc -randkey smtp/smtp.loomaaed"
# kadmin -q priit/admin -q "ktadd -k /var/spool/postfix/etc/postfix/krb5.keytab smtp/smtp.loomaaed"
# mkdir /var/spool/postfix/etc/postfix
# chown postfix /var/spool/postfix/etc/postfix/krb5.keytab

Kopeerida Kerberose seadistusfail /etc/krb5.conf Postfixi chroot keskkonda

# cp /etc/krb5.conf /var/spool/postfix/etc/krb5.conf

Failide ja kataloogidega tegelemisel tuleb arvestada, et kasutaja postfix saaks neid kasutada. Kerberose kasutajaga kaasneb selline Postfixi logi

Jun 27 13:51:22 smtp.loomaaed postfix/smtpd[8285]: DBD8729396: client=arvuti.loomaaed[192.168.10.205], \
  sasl_method=GSSAPI, sasl_username=priit@loomaaed

Kusjuures tundub, et kirjeldatud moel GSSAPI autentimise korraldamiseks Kerberosega ei ole vajalik

  • paigaldada sasl2-bin paketti ega seal sisalduvat saslauthd deemoni kasutada
  • moodustada /etc/postfix/sasl/smtpd.conf seadistusfaili

Kasulikud lisamaterjalid