Teljes virtuális levelezőszerver/SMTP hitelesítés

From Gentoo Wiki
Jump to:navigation Jump to:search
This page is a translated version of the page Complete Virtual Mail Server/SMTP Authentication and the translation is 100% complete.
Other languages:

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.

Important
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

Note
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.

FILE /etc/postfix/main.cfAz 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
Warning
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:

FILE /etc/sasl2/smtpd.confHitelesítést elvégzése authdaemond segítségével
pwcheck_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

FILE /etc/sasl2/smtpd.confKözvetlen adatbázis hitelesítés
sasl_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.
Note
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.

Warning
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ó):

FILE /etc/sasl2/smtpd.confHibakeresés letiltása
log_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.

FILE /etc/postfix/main.cfAz sasl támogatás hozzáadása a postfix számára
smtpd_sasl_authenticated_header = no