Postfix'i SMTP AUTH üle TLS vastu Postgresql baasi Debianiga
Sisukord
- 1 Eesmärk
- 2 Postgresql andmebaasi ettevalmistamine
- 3 SASL ettevalmistamine
- 4 PAM ettevalmistamine
- 5 Postfixi seadistamine SMTP klienti autentima
- 6 SMTP AUTH kliendi kasutamine
- 7 Postfix serverile TLS krüptimise seadistamine
- 8 Krüptimist kasutava SMTP AUTH kliendi kasutamine
- 9 Kasutaja autentimine Kerberosega
- 10 Kasulikud lisamaterjalid
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
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
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