Krüptitud kirjavahetus tarkvaraga Postfix (CA)

Allikas: Imre kasutab arvutit

Sissejuhatus

Käesolev tekst kirjeldab, kuidas moodustada avalikus internetis nö saareke, millesse kuuluvad osalised saavad omavahel üle krüptitud kanali e-kirju vahetada. Kirjavahetuse krüptimist saab juurutada etappide kaupa, nt

  • asutakse rangelt krüptima mingile domeenile, nt gmail.com, välja saadetavaid kirju

Tööpõhimõte

Väljakutsed

  • krüptomaterjali levitamine (nt üldtunnustatud CA väljastatud sertifikaat, DANE)
  • kas kasutamiseks muretsetakse kaks sertifikaati, ühte kasutatakse enda poole pöördumiste teenindamisel nö serveri sertifikaadina; ja teist välja pöördumisel nö kliendi sertifikaadina; või kasutatakse ühte ja sama sertifikaati mõlemas rollis (tehniliselt on sama sertifikaadi kasutamine võimalik)

Süsteemi omadused

  • klient saab kontrollida, kas server on usaldusväärne
  • server saab kontrollida, kas klient on usaldusväärne
  • klient ja server postimasinad on üldkasutatavad postimasinad st nad tegelevad mingite domeenide meiliga nö klassikaliselt lõdva turvalisusega (nt opportunistic encryption); ja mingite domeenide meiliga range turvalisusega (kehtib nii 'mail from' kui ka 'rcpt to' aadressides sisalduvate domeenide kohta)

Tulemuse saavutamiseks kasutatakse kahte tarkvara

  • Postfix v. 3.1.x
  • Postfwd

Ülesandepüstitus

Ülesandepüstitus konkreetselt, olgu viis domeeni, mida teenindavad kolm postimasinat

  • mx.tls.moraal.ee - @tls.moraal.ee, @tls.auul.pri.ee, @tls.pak-lm.ee
  • mx.tls.kartulivabariik.ee - @tls.kartulivabariik.ee
  • mx.tls.haridusnoukoda.ee - @tls.haridusnoukoda.ee

Iga postimasin peab saama saata ülejäänud kahte turvaliselt eposti

  • kirjade 'mail from' on oma domeenide oma
  • kirjade 'rcpt to' on selle postimasina halduses oleva domeeni oma kuhu posti saadetakse

Tulemusena nt võtavad mx.tls.haridusnoukoda.ee ja mx.tls.kartulivabariik.ee vastu 'mail from' @tls.moraal.ee kirju ainult postimasinalt mx.tls.moraal.ee. Igasuguseid muid 'mail from' kirju võetakse vastu nii nagu nö tavaliselt neid vastu võetakse, st mõõdukas võltsimine on võimalik.

Süsteem töötab suhteliselt käsihäälestuse režiimis, st kui lisandub kuues domeen, mida teenindab neljas postimasin, siis tuleb kõigis osalevates postimasinates muuta seadistusi. Süsteemi seadistamisel arvestatakse mõõdukalt ka võimalusega, et üldtunnustatud CA teenusepakkujad ei ole usaldusväärsed.

Krüptomaterjali levitamine

Avaliku võtme krüptimise puhul on üks lahendamist vajav probleem krüptomaterjali levitamine st praktiliselt serveri ja klienti avaliku võtme levitamine. Tundub, et SMTP krüptimise puhul on selleks mitmeid võimalusi

  • DANE (DNS-based Authentication of Named Entities)
  • mitte-üldtunnustatud CA sertifikaat sh self-signed sertifikaat
  • üldtunnustatud CA poolt väljastatud sertifikaat

Tundub, et DANE nö 'kahtlane asi' ja tema kasutamine on ka suhteliselt tülikas, nt eeldab korrektselt töötavat DNSSEC'i ja nimesüsteemis korrektse krüptomaterjali publitseerimist sh korrektset muudatuste läbiviimist. Kuna üks ja sama postimasin peab tegelema nö range ja lõdva turvalisusega eposti vahetusega, siis küllap lõdva turvalisusega juhtumil on paremad võimalused kasutades üldtunnustatud sertifikaate.

Järgnev tekst põhineb üldtunnustatud CA poolt väljastatud sertifikaatide kasutamisel. DNSSEC kasutamine ei ole oluline.

Tarkvara paigaldamine

2016 aastal Debian v. 9 paketihalduses sisaldub Postfix v. 3.1.x. Tõenäoliselt töötavad sarnaselt ka muud Postfix versioonid (testitud on ka 2.11). Paigaldamiseks sobib öelda

# apt-get install postfix
# apt-get install postfwd

Väljavalitud rcpt to aadressidele kirjade turvaliselt saatmine

Väljavalitud rcpt to aadressidele kirjade turvaliselt saatmine on suhteliselt lihtne ülesanne ja selle kasutamiseks piisab tavalisest Postfix tarkvarast. Nt mx.tls.kartulivabariik.ee postimasinas on lisaks üldisele Postfix töötamisele vajalik kasutada kirjade turvalise väljasaatmise seisukohast selliseid seadistusi

# TLS client parameters
# tls klient
smtp_use_tls = yes
smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtp_tls_session_cache_database = btree:${data_directory}/smtp_scache
smtp_tls_loglevel = 1  
smtp_tls_security_level = may
smtp_tls_note_starttls_offer = yes
smtp_tls_cert_file=/etc/letsencrypt/live/mx.tls.kartulivabariik.ee/cert.pem
smtp_tls_key_file=/etc/letsencrypt/live/mx.tls.kartulivabariik.ee/privkey.pem
..

smtp_tls_policy_maps = hash:/etc/postfix/tls_policy_maps.txt

kus

  • üldiselt on smtp_tls_* osa tavaline opportunistic encryption
  • smtp_tls_CAfile - operatsioonisüsteemi üldine root jms CA'de andmestik, selle abil valideerib smtp_tls_* klient ära serveri teenuse juures kasutatava serveri sertifikaadi kehtivuse
  • smtp_tls_cert_file ja smtp_tls_key_file abil esitab smtp_tls_* klient oma identiteedi (failides on sõna otseses mõttes vastavalt sertifikaat ja võti, ahela komponente pole)
  • smtp_tls_policy_maps abil näidatakse range turvalisusega eranditeks olevad rcpt to domeenid

ja

# cat /etc/postfix/tls_policy_maps.txt
tls.moraal.ee secure match=mx.tls.moraal.ee
tls.auul.pri.ee secure match=mx.tls.moraal.ee
tls.pak-lm.ee secure match=mx.tls.moraal.ee

kus

  • näidatakse kõnealuse domeeni puhul kasutatava turvalisuse nö rangus
  • näidatake mx domeeninimi, mida vastuvõtva postiserveri serveri sertifikaadi Subject või SubjectAltName ridadel oodatakse

Väljavalitud mail from aadressidelt kirjade turvaliselt vastuvõtmine

Väljavalitud mail from aadressidelt kirjade turvaliselt vastuvõtmine on suhteliselt keeruline ülesanne, lisaks Postfix tarkvarale on vajalik Postfwd. Nt mx.tls.moraal.ee postimasinas on lisaks üldisele Postfix töötamisele on vajalik kasutada kirjade turvalise väljasaatmise seisukohast selliseid seadistusi

smtpd_tls_cert_file=/etc/letsencrypt/live/mx.tls.moraal.ee/fullchain.pem
smtpd_tls_key_file=/etc/letsencrypt/live/mx.tls.moraal.ee/privkey.pem
smtpd_use_tls=yes
smtpd_tls_session_cache_database = btree:${data_directory}/smtpd_scache
smtpd_tls_loglevel = 1
smtpd_tls_security_level = may
smtpd_tls_received_header = yes
smtpd_tls_ask_ccert = yes
smtpd_tls_CAfile = /etc/postfix/smtpd_tls_CAfile.pem
..

smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination
  check_policy_service inet:127.0.0.1:10045

kus

  • üldiselt on smtpd_tls_* osa tavaline opportunistic encryption
  • smtpd_tls_cert_file - teenuse sertifikaat + serdid kuni juurikani (juurikas välja arvatud, ja selles järjekorras, st faili alguses sertifikaat, edasi ahel)
  • smtpd_tls_ask_ccert = yes laseb pöördujal esitada sertifikaati (loodetavasti ei aja see suvalisi internetist pöördujaid segadusse kui neil ei ole sertifikaati esitada)
  • smtpd_tls_CAfile - spetsiifilised ahelad, mille suhtes on klientide sertifikaadid väljastatud; selle abil valideerib smtpd_tls_* server ära serveri teenuse poole pöörduva kliendi sertifikaadi kehtivuse
  • aadressil 127.0.0.1:10045 töötab Postfwd policy server, mis kontrollib kõnealuste range turvalisusega 'mail from' domeenide kirju

Postfwd rakendab sisenevale epostile nt sellised reeglid

id=RULE-00 ; client_address=10.35.179.67; sender=@tls.kartulivabariik.ee; recipient=@tls.moraal.ee; ccert_subject=mx.tls.kartulivabariik.ee; action=DUNNO
id=RULE-01 ; sender=@tls.kartulivabariik.ee; recipient=@tls.moraal.ee; action=REJECT kirja ei saadetud edasi - tuli valest kohast

id=RULE-02 ; client_address=10.35.179.67; sender=@tls.kartulivabariik.ee; recipient=@tls.auul.pri.ee; ccert_subject=mx.tls.kartulivabariik.ee; action=DUNNO
id=RULE-03 ; sender=@tls.kartulivabariik.ee; recipient=@tls.auul.pri.ee; action=REJECT kirja ei saadetud edasi - tuli valest kohast

id=RULE-04 ; client_address=10.35.179.67; sender=@tls.kartulivabariik.ee; recipient=@tls.pak-lm.ee; ccert_subject=mx.tls.kartulivabariik.ee; action=DUNNO
id=RULE-05 ; sender=@tls.kartulivabariik.ee; recipient=@tls.pak-lm.ee; action=REJECT kirja ei saadetud edasi - tuli valest kohast

id=RULE-06 ; client_address=10.35.177.67; sender=@tls.pak-lm.ee; ccert_subject=mx.tls.pak-lm.ee; action=DUNNO
id=RULE-07 ; sender=@tls.pak-lm.ee; action=REJECT kirja ei saadetud edasi - tuli valest kohast
...

kus

  • client_address, sender, recipient ja ccert_subject juures peab arvestama, aga väärtusi käsitletakse PCRE regulaaravaldistena, tõenäoliselt on õigem kasutada
 ccert_subject=^mx\.tls\.kartulivabariik\.ee$

või wildcard kliendi serdi puhul nt

ccert_subject=^.*\.kartulivabariik\.ee$
  • kliendi src ip aadressi, mail from aadressis kasutatud domeeni ja kliendi sertifikaadis oleva CN= väärtuse sobimisel võetakse kiri vastu
  • muul juhul antakse kliendile 5.x.x viga
  • võib-olla kliendi src ip aadressi on liig siin kasutada
  • kui postfix ei saanud kliendi sertifikaati ära valideerida, siis postfwd jaoks ccert_subject muutuja ei ole väärtustatud

Misc

  • Kas oleks mõistlik tuntud teenusepakkujatega lülitada liiklus võimalusel samuti 'secure' peale, nt
# cat /etc/postfix/tls_policy_maps.txt
gmail.com secure match=gmail-smtp-in.l.google.com:.gmail-smtp-in.l.google.com
  • Tundub, et transport_maps kasutamine lõhub serveri sertifikaadi kontrolli ära, st ei tohi kasutada saatjas sellist konfi
# cat /etc/postfix/main.cf
..
transport_maps = hash:/etc/postfix/transport_maps.txt
...

ja nt kus tavalisel viisil on näidatud, millisele ip aadressile saata domeeni kirjad

# cat /etc/postfix/transport_maps.txt 
tls.moraal.ee smtp:[10.204.62.114]
tls.auul.pri.ee smtp:[10.204.62.114]
tls.pak-lm.ee smtp:[10.204.62.114]
  • Võib olla on hea mõte, kui samas Postfix arvutis töötab lokaalne dnssec-enabled rekursiivne nimeserveri protsess, nt Unbound. Muu hulgas saab selle abil saab teha nn /etc/postfix/transports_maps.txt ümbesuunamisi kui väga vaja on.
  • Mis võimalused on kasutada serveri ja kliendi tuvastamisel OCSP abi?
  • tls policy maps juures saab kasutada lisaks 'tafile' (trust anchor) parameetrit

Logimine

  • smtp_tls_loglevel ja smtpd_tls_loglevel väärtusega 2 saab asjalikku logi tls debugimiseks
  • korrektsel juhul paistab kliendi pool sissekanne (klient verifitseerib serveri, võimalik maksimaalne on Verified)
Jan 17 08:52:35 xxx postfix/smtp[30799]: Verified TLS connection established to gmail-smtp-in.l.google.com ...
  • korrektsel juhul paistab serveri pool sissekanne (server kontrollib kliendi, võimalik maksimaalne on Trusted)
Jan 17 10:02:29 yyy postfix/smtpd[14164]: Trusted TLS connection established from mx.tls...

Kasulikud lisamaterjalid

Testimine

Kasulikud lisamaterjalid