Postfix TLS

Allikas: Kuutõrvaja
                                        Roheline.jpg Toores. Ehk seda pala võib täiendada.

Sissejuhatuseks

Probleem: Sooviksime igalpoolt maailmast ühenduda kasutajanime ning parooli abil autendituna oma mailiserveriga ja saata läbi selle kirju. Samas kasutame palju ebaturvalisi võrke (wifi, lennujaam jms) seega peaks olema ühendus, mille üle käib suhtlus serveriga krüpteeritud.

Selleks tuleb appi TLS. Transpordikihi turbeprotokoll (ingl Transport Layer Security, TLS; varem turvasoklite kiht (Secure Sockets Layer, SSL)) on krüptograafiline protokoll, mis turvab võrgusuhtlust näiteks internetis. TLS krüpteerib võrguühenduste segmente transpordikihis suhtluskanali otspunktides (end-to-end).

Postfixi poliitika võiks kirjade saatmise osas olla järgnev

  • port 25 kirjade releetamine 192.168.0.0/16 sisevõrgu kasutajatele
  • port 25 STARTTLS+AUTH releetamine kõikidele
  • port 587 STARTTLS+AUTH releetamine kõikidele
  • port 587 ilma STARTTLS või AUTH ei võta kirju vastu!

Ehk siis startls loob serveriga krüpteeritud ühenduse ja autendib end läbi base64 krüpteeritud paroolide.

Postfixi seadistamine

Ehk siis vaja konfida postfixi sisse smtpd_tls_auth tugi ja konfida dovecoti, et ta võimaldaks postfixil tema socketiga suhelda (postfix ise ei autendi, ta kasutab kasutajate tuvastamisejs ja autentimiseks imapi serveri võimalusi) ja jälgima, et mõlemas konfis oleksid socketi rajad õiged.

Vajalik on lisada enda Postfixi seadistusele järgnevad read:

# lubame saata kirju vaid sisevõrgul ja sasli abil autentitud kasutajail
smtpd_recipient_restrictions = permit_mynetworks, permit_sasl_authenticated, reject_unauth_destination,

smtpd_sasl_type = dovecot <- Autentimiseks kasutatakse dovecot imap serveri vahendeid
smtpd_sasl_path = /var/spool/postfix/private/auth <- Dovecoti poolt loodud socket autentimiseks

# The first thing we need to do is to tell Postfix to enable SMTP AUTH. We do this by adding the following line:
smtpd_sasl_auth_enable = yes
 
# entroopia koht
tls_random_source = dev:/dev/urandom

# TLS encryption is offered but it's not mandatory (so-called opportunistic TLS).
smtpd_tls_security_level = may

# krüptovõtmed
smtpd_tls_key_file = /etc/ssl/smtpd.key
smtpd_tls_cert_file = /etc/ssl/smtpd.crt

# Only offer SMTP AUTH when talking over an encrypted connection
smtpd_tls_auth_only = yes

# Add some useful logging entries to track the use of TLS, you can omit this if desired
smtpd_tls_loglevel = 1

#  Add a header to mail received with TLS, can make debugging easier
smtpd_tls_received_header = yes

If you truly do want to forbid unencrypted SMTP connections (I do this on ports 587 and 465), you'd want to use either "smtpd_tls_security_level = encrypt" (for STARTTLS, generally on port 587) or "smtpd_tls_wrappermode = yes" (for SSL encryption from the initial connection on, generally on port 465).

Lisaks võib sisse lülitada veel:

smtp_use_tls = yes

Mis paneb mailiserverite vahelise suhtluse tööle võimaluse korral krüpteeritud

The broken_sasl_auth_clients parameter controls interoperability with SMTP clients that do not recognize that Postfix supports RFC 2554 (AUTH command). Examples of such clients are Microsoft Outlook Express version 4 and Microsoft Exchange version 5.0.

broken_sasl_auth_clients = yes

It appears that clients try authentication methods in the order as advertised by the server (e.g., PLAIN ANONYMOUS CRAM-MD5) which means that if you disable plaintext passwords, clients will log in anonymously, even when they should be able to use CRAM-MD5. So, if you disable PLAIN logins, disable ANONYMOUS logins too. Postfix treats ANONYMOUS login as no authentication. Since we want to use the plaintext mechanism in this HOWTO, but not anonymous we'll simple set:

smtpd_sasl_security_options = noanonymous

This will keep Postfix from offering anonymous logins.

Dovecoti seadistamisest leiab juttu linkidelt:

Enabling the submission port

Elion ja kuulu järgi ka paljud välismaa ispid keeravad kinni väljuva liikluse pordile 25.

FreeBSD's on startlsi ja autentimisega seotud 465, mis seal ekslikult märgitud smtp jaoks, IANA tabelite järgi oleks õigem port 587

Kiire otsing paljastab, et 465 port oli ajutiselt (1997-1998) tõesti IANA poolt määratud SMTPS pordiks, kuid peale STARTTLS kasutuselevõttu võeti see port tagasi (ja on nüüd määratud mujale). Põhjus oli selles, et STMP võrgustik ei paku võimalusi kirjade releetamisel kindlaks teha, kas vastuvõttev server kasutab 25. või 465. porti ja seetõttu sunniti kõiki kasutama 25. porti.

Eraldi teema on aga see, et SMTP-s see T tähendab Transferit, ehk kirjade releetamist ühest serverist teise ja sellega tegeleb MTA. RFC6409 (algselt 2476) kirjeldab aga sellist nähtust nagu MSA - Mail Submission Agent, mis opereerib pordil 587 ja tegeleb kasutajatelt uute kirjade vastuvõtmisega. Kuna tegemist pole MTA-ga, siis võib ta seada oluliselt erinevaid piiranguid, nõudes sisselogimist, parandades kirjades pisivigu (kuupäevad, domeenid jne, mis MTA-l on tegelikult keelatud) jne.

Ehk siis on 25 port releetamiseks ja võib lausa julmalt keelduda "majast välja" kirju vastu võtmast (muidugi mitte mailedu puhul) ja 587 port uute kirjade vastuvõtuks autenditud kasutajatelt. Samuti võib 25. porti rahulikult tulemüürist blokkida. 465 port on legacy ja võiks kasutusest maha jätta.

Edit /etc/postfix/master.cf and enable the submission port by uncommenting a couple of lines. Make sure not to mess up the whitespace - a logical line is continued by whitespace on the subsequent lines.

submission inet n       -       -       -       -       smtpd

Kasutades IMAP serveriks Cyrust on mõistlik kasutada saslatuhd nimelist deemonit, mis näiteks kontrollib kasutajad PAMi kaudu.

Postfix, Cyrus-imap ja TLS

Sasl pam mysql.png

Testimine

Esiteks on meil vaja konvertida kasutajanimi - parool sobivale base64 kujule.

$ perl -MMIME::Base64 -e 'print encode_base64("kasutajanimi")' 
$ perl -MMIME::Base64 -e 'print encode_base64("not.my.real.password")'

Kasutada saab ka http://base64-encoder-online.waraxe.us/ asuvat tasuta kodeerijat.

Seejärel ühendume openssl käsurea kliendi abil mailiserveriga:

$ openssl s_client -starttls smtp -crlf -connect mail.edu.ee:25
...
250 DSN
helo test.eenet.ee
250 mail.edu.ee
auth login
334 VXNlfm3hbdU6
dGVzdA==        <- siia paneme kodeeritud kasutajanime
334 UGFzc1dwcAQ6
WAx3GVpcHpMQ==  <- kodeeritud parool
235 2.7.0 Authentication successful

Edasi võib teostada juba tavalise kirjasaatmise protseduuri.

mail from: jj@eenet.ee
250 2.1.0 Ok
rcpt to: jj@eenet.ee
250 2.1.5 Ok
data
354 End data with <CR><LF>.<CR><LF>
test
.        <- annab käsu kirja sisu koostamine lõpetada ja see ära saata.
250 2.0.0 Ok: queued as 60C1584BD0E11

Mailikliendi seadistamine

Thunderbirdis väljuvate kirjade seadistus:

Thunderbird.png

Viited ja lingid lisalugemiseks

http://wiki.centos.org/HowTos/postfix_sasl Ammendav juhend

http://www.abuse.net/relay.html

http://www.andrisreinman.com/2015/10/miks-starttls-on-paha.html Miks startls on ikkagi poolik lahendus