Kašnjenje mailova s Gmaila i Yahooa

U proteklom tjednu smo na Helpdesku za sistemce zaprimili dosta upita zbog "kašnjenja", odnosno "vraćanja" mailova s popularnih besplatnih e-mail servisa Google i Yahoo.  Problemi su bilo vrlo slični, ali su logovi pokazivali i određene razlike u konfiguracijama na poslužiteljima.  No, svima je zajedničko to što SSL sloj nije bio dobro podešen u Postfixu, te primanje i slanje maila preko SMTPS protokola nije bio moguć, ili je bio otežan.

Probleme su uglavnom imali kolege s nepodešenim SSL/TLS slojem, ili je Postfix bio podešen da rabi krive certifikate. Oni su mogli dobiti poruke u logovima ovog tipa:

454 4.7.0 TLS not available due to local problem

Oni koji su manje-više dobro podesili Postfix rabeći Comodo certifikate, mogli su usprkos tome dobiti ovakvu poruku o greški (njih ćemo svrstati u drugu skupinu):

Jun  2 14:01:40 posluzitelj postfix/smtp[12210]: certificate verification
failed for gmail-smtp-in.l.google.com[74.125.79.27]:25: untrusted issuer
/C=US/O=Equifax/OU=Equifax Secure Certificate Authority

Navest ćemo jednostavan recept za one iz prve skupine, kojima SSL zapravo uopće ne radi kako treba:

1. obrisat ćemo stare (pretpostavljamo da su neispravni ili zastarjeli) i napravimo nove samopotpisane (self-signed) certifikate:

# rm -f /etc/ssl/certs/postfix.pem /etc/ssl/certs/postfix.key
# dpkg-reconfigure postfix-cn

2. u datoteci /etc/postfix/master.cf provjerimo postoji li redak:

smtps     inet  n       -       n       -       -       smtpd -o smtpd_tls_wrappermode=yes 
-o smtpd_sasl_auth_enable=yes

Ukoliko ne postoji, trebate upisati točno kako piše umjesto postojećeg "smtps" retka (sve treba upisati u jedan redak!)

3. u datoteci /etc/postfix/main.cf redak

smtpd_tls_cert_file = /etc/ssl/certs/ssl-cert-snakeoil.pem

zamijenimo sa

smtpd_tls_cert_file = /etc/ssl/certs/postfix.pem

4. još treba provjeriti jesu li u main.cf uključene dvije varijable

smtp_tls_security_level = may
smtpd_tls_security_level = may

Oblik varijabli smtp_use_tls i smtpd_use_tls je od Postfixa 2.3 zastario, ali se još može rabiti.

5. sada možemo restartati Postfix:

# /etc/init.d/postfix restart

ili pravilnije

# invoke-rc.d postfix restart

6. provjerimo radi li SSL/TLS:

# openssl s_client -connect posluzitelj.domena.hr:smtps

Rezultat bi morao biti sličan ovome:

CONNECTED(00000003)
depth=0 /O=Postfix SMTP
daemon/OU=oliver/CN=posluzitelj.domena.hr/emailAddress=root@posluzitelj.domena.
verify error:num=18:self signed certificate
verify return:1
depth=0 /O=Postfix SMTP
daemon/OU=oliver/CN=posluzitelj.domena.hr/emailAddress=root@posluzitelj.domena.
verify return:1
---
Certificate chain
0 s:/O=Postfix SMTP
daemon/OU=oliver/CN=posluzitelj.domena.hr/emailAddress=root@posluzitelj.domena.
i:/O=Postfix SMTP
daemon/OU=oliver/CN=posluzitelj.domena.hr/emailAddress=root@posluzitelj.domena.
...
SSL-Session:
Protocol : TLSv1
Cipher : DHE-RSA-AES256-SHA
Session-ID:
ADA7F71545B51009AC3A619F9964FCE1789C4DB72CD3C22880A6F2D8A4E52DCE
Session-ID-ctx:
Master-Key:
1C733BDF296235C2197C00472E25AC9CE036E234FDE046FE1D4DC6FE9CAE567D3438E1B3F39
Key-Arg : None
Start Time: 1307102308
Timeout : 300 (sec)
Verify return code: 18 (self signed certificate)
---
220 posluzitelj.domena.hr ESMTP Postfix (Debian/GNU)

Ostaje nam navesti rješenje za one koji imaju uredno podešen SSL (ili čak i Comodo certifikate), ali svejedno imaju problema sa Gmailom.  U ovom slučaju problem je u tome što Postfix iz nekog razloga ne zna za root Certificate Authority (CA) certifikate za Equifax. Postfixu možemo reći gdje su certifikati na dva načina, a mi smo odabrali način kad su svi certifikati u jednoj velikoj datoteci, ca-certificates.crt. U main.cf upišite:

smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Nakon ovoga, kao i u prethodnom slučaju, treba restartati Postfix. Pošaljite testne mailove, a ukoliko se greške u logovima (mail.log, mail.err) i dalje javljaju, probajte skinuti root CA certifikat direktno:

# cd /etc/ssl/certs
# wget https://www.geotrust.com/resources/root_certificates/certificates/Equifax_Secure_Certificate_Authority.cer
# cat Equifax_Secure_Certificate_Authority.cer >> ca-certificates.crt

I naravno, opet treba restartati Postfix. Sada bi trebalo raditi, a ukoliko to ipak nije slučaj, treba vidjeti što piše u logovima kod slanja maila, jer možda je kod vas potrebno još nešto podesiti.

Dakle, zaista je krajnje vrijeme da podesite svoj poslužitelj tako da ima ispravne certifikate, a time i zaštićene i vjerodostojne servise prema klijentskim računalima.  U tome neka vam pomogne članak na adresi http://sistemac.carnet.hr/node/315, dok Comodo certifikat možete zatražiti preko stranice http://www.carnet.hr/sc_servis .

Kuharice: 
Kategorije: 
Vote: 
5
Vaša ocjena: Nema Average: 5 (2 votes)

Komentari

Postfixu možemo reći gdje su certifikati na dva načina, a mi smo odabrali način kad su svi certifikati u jednoj velikoj datoteci, ca-certificates.crt.

A koji je drugi način, za one koji kao CAfile koriste Comodo chain?

U main.cf staviti primjerice:
smtp_tls_CAfile = /etc/ssl/certs/CAcert.pem smtp_tls_CApath = /etc/ssl/certs

Direktorij $smtp_tls_CApath mora biti citljiv korisniku $mail_owner. Takodjer,
direktorij $smtp_tls_CApath mora biti vidljiv iz chroot jaila, dok $smtp_tls_CAfile
ne mora.

Dakle, najlakse je "dostiklati" nedostajuce certifikate u postojeci $smtp_tls_CAfile:

cat nedostajuci_ca_certifikat.crt >> postojeci_ca_file.crt

Dakle, najbolje bi onda bilo skinuti Equifaxov certifikat i njega i Comodo chain nadodati u ca-certificates.crt i onda postaviti:

smtp_tls_CAfile = /etc/ssl/certs/ca-certificates.crt
smtpd_tls_CAfile = /etc/ssl/certs/ca-certificates.crt

Posljednju naredbu u tekstu bi trebalo ispraviti tako da bude

# cat Equifax_Secure_Certificate_Authority.crt >> ca-certificates.crt

(datoteka je prethodno preimenovana s mv).

Je li za self-signed certifikate normalno da se javljaju ovakvi zapisi ili se i to može/treba riješiti:

$ sudo zgrep "certificate verification failed" /var/log/syslog.1.gz
Jun 14 09:05:27 teologija postfix/smtp[11838]: certificate verification failed for
mail.pravosudje.hr[x.x.x.x]:25: untrusted issuer /DC=local/DC=mprh/CN=Ministarstvo pravosudja RH
Jun 14 09:05:28 teologija postfix/smtp[11834]: certificate verification failed for
pitagora.mathos.hr[x.x.x.x]:25: self-signed certificate
Jun 14 09:27:00 teologija postfix/smtp[12443]: certificate verification failed for
mail.sto-a.hr[x.x.x.x]:25: self-signed certificate
Jun 14 09:52:52 teologija postfix/smtp[12591]: certificate verification failed for
pitagora.mathos.hr[x.x.x.x]:25: self-signed certificate

Pokušavam se sjetiti jesam li i prije viđao takve poruke u logovima, ali nikako se ne mogu sjetiti, tj. nekako mi se čini da nisam...

Kako cete provjeriti istinitost kad certifikat nije potpisan od strane CA (Certificate Authorityja)? Self-signed certifikat moze napraviti svatko, i ne treba mu vjerovati....