Teljes virtuális levelezőszerver/SMTP hitelesítés
Bevezetés
Eddig csak a localhost számítógépnek van engedélyezve e-mailek küldése. Sajnos a postfix nem képes közvetlenül együttműködni a courier-authlibbal. Van azonban egy köztes megoldás, a dev-libs/cyrus-sasl szoftvercsomag. A cyrus-sasl háromféleképpen tud hozzájutni hitelesítési információkhoz: Közvetlenül az adatbázisból, helyileg vagy távolról. Az ezzel a megközelítéssel készült beállítás valahogy így nézne ki.
courier-imap -> courier-authlib --\ +--> database postfix ------> cyrus-sasl -------/
A helyzetet csak enyhén bonyolítva, a cyrus-sasl használható arra, hogy a courier-authlibbal kommunikáljon, így a courier-authlib végezheti el a hitelesítést.
courier-imap -----------\ +-> courier-authlib -> database postfix -> cyrus-sasl --/
Ideális esetben az utolsó opció lenne a használt megoldás, mivel egyetlen hitelesítési háttérrendszert, a courier-authlibot használnák. Azonban a cyrus-sasl bővítmény, amely a courier-authlibbal kommunikál, csak unix socketen keresztül működik, tehát ha a courier-authlib nem ugyanazon a host számítógépen fut, mint a cyrus-sasl, ez nem működne. Ezért az első megközelítést csak akkor érdemes használni, ha a courier-authlib nem használható.
A cyrus-sasl telepítése
Egy fontos funkciója a cyrus-sasl-nak a crypt
USE jelölőzászló, amely szükséges. Engedélyezni kell, különben az adatbázisból származó titkosított jelszavak nem hitelesíthetők. A megfelelő USE jelölőzászlóval rendelkező cyrus-sasl-t korábban be kellett volna vonni, amikor a postfix-et telepítettük.
A Gentoo patch, amely lehetővé teszi a titkosított jelszavak közvetlen támogatását az adatbázisból, nem érhető el a cyrus-sasl-2.1.23 és az újabb verzióhoz. Ezért ilyen verzió használata esetén a net-libs/courier-authlib segítségével kell eljárni.
USE flags for dev-libs/cyrus-sasl The Cyrus SASL (Simple Authentication and Security Layer)
authdaemond
|
Add Courier-IMAP authdaemond unix socket support (net-mail/courier-imap, mail-mta/courier) |
berkdb
|
Add support for sys-libs/db (Berkeley DB for MySQL) |
gdbm
|
Add support for sys-libs/gdbm (GNU database libraries) |
kerberos
|
Add kerberos support |
ldapdb
|
Enable ldapdb plugin |
mysql
|
Add mySQL Database support |
openldap
|
Add ldap support for saslauthd |
pam
|
Add support for PAM (Pluggable Authentication Modules) - DANGEROUS to arbitrarily flip |
postgres
|
Add support for the postgresql database |
sample
|
Enable sample client and server |
selinux
|
!!internal use only!! Security Enhanced Linux support, this must be set by the selinux profile or breakage will occur |
sqlite
|
Add support for sqlite - embedded sql database |
srp
|
Enable SRP authentication |
ssl
|
Add support for SSL/TLS connections (Secure Socket Layer / Transport Layer Security) |
static-libs
|
Build static versions of dynamic libraries as well |
urandom
|
Use /dev/urandom instead of /dev/random |
Akármilyen adatbázis választás történt korábban, annak támogatása itt is kiépítésre kerül. Ha bármilyen okból, főként biztonsági szempontból, az adatbázis-kód kiegészítésére nincs szükség, akkor lehetséges a telepítés az adatbázis USE jelölőzászlók beállítása nélkül.
Az adatbázis USE jelölőzászlókat szintén el kell távolítani, ha a courier-authlibot használjuk az adatbázis helyett, mivel a cyrus-sasl folyamatosan hibákat fog naplózni, ha SQL támogatással lett lefordítva, de nincs beállítva annak használatára.
Postfix beállítása a cyrus-sasl -al
A postfix beállításában, a main.cf fájlban néhány opciót kell hozzáadni, hogy a sasl-t használni tudjuk. Ezek az alapértelmezett beállításfájlban nincsenek megemlítve, ezért manuálisan kell őket hozzáadni.
/etc/postfix/main.cf
Az sasl támogatás hozzáadása a postfix számára# Postfix to SASL authentication
broken_sasl_auth_clients = no
smtpd_sasl_auth_enable = yes
smtpd_sasl_security_options = noanonymous
smtpd_sasl_local_domain =
smtpd_sasl_authenticated_header = yes
smtpd_recipient_restrictions = permit_sasl_authenticated, permit_mynetworks, reject_unauth_destination
A
smtpd_sasl_authenticated_header
megjeleníti a felhasználónevet, amelyet a cyrus-szal való hitelesítés során használtak, és hozzáadja azt az e-mail fejlécéhez. Ez különösen veszélyes lehet olyan e-mailek esetében, amelyek nyilvánosan archivált levelezőlistákra kerülnek, mivel ez a fejléc világszerte látható lesz. Tesztelési célokra azonban itt engedélyezve van.A cyrus-sasl beállítása
Az authdaemond segítségével
A postfix lekérdezi az authdaemond által létrehozott socketet, amelyet a mail felhasználó és csoport véd. Ezért a postfix számára hozzáférést kell biztosítani ehhez a sockethez.
root #
gpasswd -a postfix mail
Ezután be kell állítani, hogy a cyrus-sasl az authdaemond segítségével végezze el a hitelesítést:
/etc/sasl2/smtpd.conf
Hitelesítést elvégzése authdaemond segítségévelpwcheck_method: authdaemond
mech_list: LOGIN PLAIN
sql_select: dummy
authdaemond_path: /var/lib/courier/authdaemon/socket
log_level: 5
A postgresql segítségével
/etc/sasl2/smtpd.conf
Közvetlen adatbázis hitelesítéssasl_pwcheck_method: auxprop
sasl_auxprop_plugin: pgsql
password_format: crypt
mech_list: LOGIN PLAIN
sql_engine: pgsql
#sql_hostnames: localhost
sql_database: postfix
sql_user: postfix
sql_passwd: $password
sql_select: SELECT password FROM mailbox WHERE local_part='%u' AND active='1'
Tesztelés
A sasl támogatás ellenőrzéséhez a telnet használható, hogy megvizsgáljuk az AUTH
utasítást:
user $
telnet foo.example.com 25
220 foo.example.com ESMTP Postfix EHLO example.com 250-foo.example.com 250-PIPELINING 250-SIZE 10240000 250-VRFY 250-ETRN 250-AUTH LOGIN PLAIN 250-ENHANCEDSTATUSCODES 250-8BITMIME 250 DSN quit 221 2.0.0 Bye Connection closed by foreign host.
Ha olyan levelezőklienst használ, amely nem működik megfelelően, akkor a
broken_sasl_auth_clients = yes
beállítást hozzáadhatja a Postfix main.cf fájljához, hogy egy további bejegyzést kapjon itt: 250-AUTH=LOGIN PLAIN
.Következő teszt: Egy távoli host számítógép használata és próbálkozás a bejelentkezésre, hogy egy tesztüzenetet küldhessünk.
Bár elég gyakori, hogy e-mail szerverekhez (pop/imap/webmail/smtp) egyszerű szöveges bejelentkezéseken keresztül hitelesítenek, ez rendkívül bizonytalan (és védhető, amiről később a kézikönyvben szó lesz). Ha egyszerű szöveges bejelentkezési adatokat (ezek base64-kódolt adatok, így nagyon könnyű dekódolni őket) küld az interneten keresztül, csak tesztfelhasználót vagy legalább teszt jelszót használjon.
Ha a perl a base64 modul segítségével van telepítve, akkor az használható base64-kódolt adatok generálására. Ellenkező esetben base64 átalakítás elvégezhető online. Ismételten, legyen nagyon óvatos, ha éles adatokat használ megbízhatatlan oldalakon.
user $
perl -MMIME::Base64 -e 'print encode_base64("testuser");'
dGVzdHVzZXI=
user $
telnet foo.example.com 25
Trying 1.2.3.4... Connected to foo.example.com. Escape character is '^]'. 220 foo.example.com ESMTP Postfix HELO example.com 250 foo.example.com AUTH LOGIN 334 VXNlcm5hbWU6 (base64 decode: 'Username:') dGVzdHVzZXI= (base64 encoded from: 'testuser') 334 UGFzc3dvcmQ6 (base64 decode: 'Password:') c2VjcmV0 (base64 encoded from: 'secret') 235 2.7.0 Authentication successful mail from:me@you.com 250 2.1.0 Ok rcpt to:<validuser>@<validexternaldomain>.<tld> 250 2.1.5 Ok data 354 End data with <CR><LF>.<CR><LF> Subject: Test message Test message to ensure Postfix is only relaying with smtp authorization. . 250 2.0.0 Ok: queued as 82F97606 quit 221 2.0.0 Bye Connection closed by foreign host.
Összefoglaló
Miután minden a várt módon működik, a hibakeresés letiltható (vagy a sor teljesen eltávolítható):
/etc/sasl2/smtpd.conf
Hibakeresés letiltásalog_level: 0
Opcióként a smtpd_sasl_authenticated_header
ismét letiltható. Ez nagyon hasznos lehet a felhasználók levelezési problémáinak nyomon követésében. Ugyanakkor potenciális biztonsági problémát jelenthet, ahogyan azt fentebb említettük, mivel a felhasználó bejelentkezési neve szerepel a fejlécben. Másrészt, ha a bejelentkezési név az e-mail cím local_part része vagy maga az e-mail cím, akkor a bejelentkezési név már amúgy is ismert, tehát nem jelent túl nagy problémát, igaz? Némi óvatosság ajánlott, de nem kellene, hogy komoly gondot okozzon.
/etc/postfix/main.cf
Az sasl támogatás hozzáadása a postfix számárasmtpd_sasl_authenticated_header = no