• email
  • facebook
  • linkedin
  • google+
  • pinteres

SMTP TLS beállítása

Ez a leírás elavult, újabb változata megtalálható ezen a linken, amely Ubuntu 12.04-es telepítést mutat be.

1.   Az SMTP szerver TLS elérésének beállítása.

Az eddigi munka folytatásának első lépéseként elkészítjük a levelezőszerver számára a tanúsítványt, majd telepítjük. A postfix TLS tanúsítvány aláírásához olyan céges tanúsítványt és kulcsot használunk, amit már korábban elkészítettünk -- ezt használjuk például a webszerveren is, és ez kell majd a dovecot tanúsítványainak elkészítéséhez is.

A céges tanúsítvány és kulcs létrehozásának a lépései a következők voltak:

$ mkdir /opt/CA
$ cd /opt/CA

$ openssl genrsa -des3 -out nir.key 2048

$ openssl req -new -x509 -days 3650 -key nir.key -out nir.crt

    Enter pass phrase for nir.key:
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:HU
    State or Province Name (full name) [Some-State]:.
    Locality Name (eg, city) []:Budapest
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:NiR Informatikai Megoldások Kft.
    Organizational Unit Name (eg, section) []:NiR Certificate Authority
    Common Name (eg, YOUR name) []:NiR Kft CA
    Email Address []:hostmaster@nir.hu

Hogy megvan a nir.key és a nir.crt fájl, következhet az SMTP-hez használt tanúsítvány:

$ cd /opt/CA

$ openssl genrsa -out smtpd.key 2048

$ openssl req -new -key smtpd.key -out smtpd.csr
    ...
    Organizational Unit Name (eg, section) [Software Development Team]:NiR Web Services
    Common Name (eg, YOUR name) []:smtp.nir.hu
    Email Address []:postmaster@nir.hu
    ...

$ openssl x509 -req -in smtpd.csr -out smtpd.crt -sha1 -CA nir.crt -CAkey nir.key -CAcreateserial -days 365

El kell készítsünk egy pem formátumú tanúsítványt is a céges fájlokból, majd (miután levédtük a globális olvasástól a fontos fájljainkat) átmásoljuk az átmásolandókat a /etc/postfix/ssl könyvtárba.

$ cat nir.key nir.crt > nir.pem
$ openssl gendh >> nir.pem

$ chmod 600 *

$ cp smtpd.key smtpd.crt nir.pem /etc/postfix/ssl

A TLS aktiválásához csak az /etc/postfix/main.cf fájlban kell bizonyos beállításokat megejtenünk:

tls_random_source = dev:/dev/urandom

# küldés
smtp_use_tls = yes
smtp_enforce_tls = no
smtp_tls_note_starttls_offer = yes
smtp_tls_loglevel = 1
smtp_tls_session_cache_database = btree:${queue_directory}/smtp_scache

# fogadás
smtpd_use_tls = yes
smtpd_enforce_tls = no
smtpd_tls_loglevel = 1
smtpd_tls_received_header = yes
smtpd_tls_session_cache_timeout = 3600s
smtpd_tls_key_file = /etc/postfix/ssl/smtpd.key
smtpd_tls_cert_file = /etc/postfix/ssl/smtpd.crt
smtpd_tls_CAfile = /etc/postfix/ssl/nir.pem
smtpd_tls_session_cache_database = btree:${queue_directory}/smtpd_scache

A teszteléshez futtassuk a következő parancsot:

$ openssl s_client -starttls smtp -crlf -connect localhost:25

2.   SASL autentikáció a központi mail adatbázisból

SASL-ra (Simple Authentication and Security Layer), azaz SMTP-nél a kliens autententikálására használhatnánk a Dovecotot, főleg ha már az lesz az IMAP-POP3 szerverünk, de sajnos ez csak a 2.3-as Postfix verziótól érhető el mint lehetőség, és az Ubuntu Dapper csak 2.2-eset tartalmaz csomagként. Így a Cyrus külön csomagban is elérhető modulját fogjuk használni, és persze a már létező postgresql adatbázisunkat. Így mindenki közös POP3, webmail, dspam, SMTP felhasználónevet használhat.

Részletes imertetést, és pl. Dovecot-tal történő autentikáláshoz a leírást lásd itt:

http://www.postfix.org/SASL_README.html

A telepítendő csomagok.

  • sasl2-bin
    • vele: libasn1-6-heimdal libgssapi4-heimdal libkrb5-17-heimdal libroken16-heimdal
  • libpam-pgsql
    • vele: libmhash2 libpq3

Következzen akkor először a Cyrus SASL2 konfigurálása:

$ mkdir -p /var/spool/postfix/var/run/saslauthd

A /etc/default/saslauthd fájlban kikommentezzük a START=yes sort és a végére odaírjuk:

PARAMS="-m /var/spool/postfix/var/run/saslauthd -r"

A /etc/init.d/saslauthd fájlban PIDFILE értékének beállítjuk:

PIDFILE="/var/spool/postfix/var/run/${NAME}/saslauthd.pid"

A /etc/postfix/sasl/smtpd.conf fájlba felvesszük a következőket:

pwcheck_method: saslauthd
mech_list: plain login

A /etc/pam_pgsql.conf fájlban adjuk meg az adatbázis elérési beállításokat:

database = mail
host = localhost
user = *SASLUSER*
password = *SASLPASS*
table = users
user_column = email
pwd_column = password
#ennek '1' vagy 'y' értékűnek kell lenni, ha a user
#nem érheti el a rendszert -- jelenleg segfaultol, nem használható
#expired_column = smtp_disabled
pw_type = crypt

Mint látható, itt szerettük volna kihasználni, hogy van egy külön oszlopunk minden felhasználóhoz a USER táblában, amit mi smtp_disabled-nek neveztünk. Ha ennek értéke 1 lenne, akkor a felhasználó nem tudna SMTP-t használni a szerverünkön. Mint a kommentben látható, sajnos ez a jelenlegi csomagban segmentation fault üzenettel elszáll, ezért nem tudtam beüzemelni.

Az /etc/pam.d/smtp fájlban megejtjük az autentikációs beállítást:

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

Vgül pedig következhet a postfix /etc/postfix/main.cf fájljában a SASL autentikáció aktiválása:

smtpd_sasl_auth_enable = yes
smtpd_sasl_local_domain =
smtpd_sasl_security_options = noanonymous
broken_sasl_auth_clients = yes

Emlékeztető: az így azonosított felhasználók beendgedésére a permit_sasl_authenticated kapcsolót használtuk a elérési ellenőrzéseknél (lásd az előtő részben).

3.   Másik SASL megoldás

A másik lehetséges megoldással a postfixbe még jobba integrálva menne a SASL. Ennek a beállítás fajtának az lenne az előnye, hogy az sql_select opcióban a querynek megadhatunk egyéb WHERE feltételeket. A gond az, hogy ez a megoldás csak plain-text jelszóformátummal megy alapból, és csak ezzel a patchcsel tudnánk kódolt jelszavakat használni: http://frost.ath.cx/software/cyrus-sasl-patches -- ezt viszont sajnos az ubuntus kollégák nem pakolták be a sals2-bin csomagba. Mivel nekem nem volt kedvem patchelni, főleg nem lenne kedvem mindig, mikor új csomagverzót adnak ki, ezért marad az előző változat, de leírom, hátha valaki ragaszkodik ehhez a megoldáshoz, vagy szeret kísérletezni. A patchelés egyébként nem bonyolult, kis leírás, sőt patchelt csomag is található itt: http://ubuntuforums.org/showthread.php?p=1512778

Felteendő plusz csomag:

  • libsasl2-modules-sql

Ennek konfigurálásához a /etc/postfix/sasl/smtpd.conf fájlba a következőket kell beírni:

pwcheck_method: auxprop
mech_list: plain login

#allowanonymouslogin: no
#allowplaintext: yes
#srp_mda: md5
#srvtab: /dev/null
#opiekeys: /dev/null

auxprop_plugin: sql
sql_engine: pgsql
sql_hostnames: localhost
sql_user: *SASLUSER*
sql_passwd: *SASLPASS*
sql_database: mail
sql_select: select password from users where email = '%u' AND smtp_disabled = 0
#password_format: [crypt|crypt_trad|plaintext]
password_format:crypt_trad
#sql_verbose: yes

A /etc/postfix/main.cf-be pedig állítólag kell a következő bejegyzés -- bár tapasztalataim szerint nem, csak nem mentem utána alaposabban.

smtpd_sasl_application_name = smtpd

A következő, negyedik részben a POP3 és IMAP elérés beállításai következnek.