POP3 és IMAP alapú levelezés kiszolgálása Dovecot-tal és PostgreSQL-lel

A HupWiki-ből...

Tartalomjegyzék

A leírás célja

Jelen leírásban azt szeretném bemutatni, hogyan lehet dovecot szerverrel POP3 és IMAP alapú levelezést kiszolgálni úgy, hogy a levélért jövő kliensek autentikációját nem rendszer userekkel, hanem PostgreSQL adatbázisban tárolt felhasználókkal végezzük.

A leírás feltételezi az alap unix/linux parancsok ismeretét és némi rendszergazdai rutin meglétét.

A leírás szerinti telepítés root vagy azzal egyenértékű user nevében történik, és Debian Sarge alatt mutatja be azt, de könnyen megvalósítható más OS-en futó rendszereken is.

A szükséges szoftverek és telepítésük

Szükség lesz postgresql és dovecot csomagokra, amiket Debian alatt így telepítünk:

$ apt-get install postgresql postgresql-client dovecot dovecot-common dovecot-imapd dovecot-pop3d


A fenti parancs letölti, kicsomagolja és szétmásolja a fenti csomagokat és azok tartalmát. A csomagok valamiféle default konfiggal érkeznek, a leírás ezen a default értékek meglétét nem veszi figyelembe és nem hivatkozik rájuk.


A postgresql konfigurálása

Első lépésben állítsuk le a postgresql-t!

$ /etc/init.d/postgresql stop


A postgresql konfigurációs állományai a /etc/postgresql alatt találhatók.

A postgresql.conf -ban állítsuk be a következőt:

tcpip_socket = true


Most találjunk ki egy adatbázis nevet, egy login nevet és egy jelszót. Ezek a példában ADATBAZISNEV, LOGINNEV, JELSZO néven fognak szerepelni.

A pg_hba.conf -ba pedig írjuk be a következőt (praktikusan a tetejére, hogy kéznél legyen)

host ADATBAZISNEV LOGIN 127.0.0.1 255.255.255.255 password
local ADATBAZISNEV LOGIN password


Ez a két sor teszi lehetővé, hogy localhostról a LOGIN névvel azonosított user a megadott JELSZO-val elérhesse az ADATBAZISNEV nevű adatbázist. (A sor végén a 'password' szó nem maga a jelszó, hanem a jelszavas autentikációt jelentő kulcsszó.)

Most létrehozzuk azt az adatbázist, amiben az a tábla lesz amiben a levelezésre használt usereket fogjuk nyilvántartani. A #-el kezdődő sorok kommentek, nem kell őket beírni.

# elindítjuk a postgres-t
$ /etc/init.d/postgresql start

# átváltunk postgres userre
$ su - postgres
 
# létrehozzuk azt a felhasználót, aki elérheti majd az adatbázist
# a felhasználó létrehozásának utolsó lépése a -P kapcsoló miatt 
# a JELSZO megadása
$ createuser -A -d -P LOGINNEV

# a felhasználó nevében létrehozunk egy adatbázist
$ createdb --encoding=LATIN2 --owner=LOGINNEV ADATBAZISNEV

A fentiekben létrehoztunk egy felhasználót, megadtuk a jelszavát és létrehoztunk egy adatbázist az ő tulajdonában.

Most létre fogunk hozni egy táblát az adatbázisban, amiben benne lesznek a levelező userek.

# ha szükséges, a fent bemutatott módon váltsunk át postgres userré

# lépjünk be az új adatbázisba az új felhasználóval (kérni fogja a JELSZO-t)
$ psql -U LOGINNEV ADATBAZISNEV

# ha bent vagyunk, akkor adjuk ki a következő parancsot:
CREATE TABLE tmailuserek (u_nev character varying(70), u_pass character varying(32),
u_home character varying(70), u_valid character(1) DEFAULT 1);

# lépjünk ki az adatbázis szerver konzoljából
CTRL - D


Az újonnan létrehozott tábláról pár szót.

  • u_nev: ez a mező tartalmazza azt a login nevet, amivel a felhasználól elérik a leveleiket
  • u_pass: az MD5-tel elhash-elt jelszót fogja tárolni
  • u_home: a felhasználó mailboxának teljes elérési útja (/path/to/mailbox formában)
  • u_valid: amíg az értéke '1', addig a felhasználó be tud jelentkezni a leveleiért, ha ez 0 (nulla), a felhasználó ki van tiltva a rendszerből

A tábla feltöltését mindenkinek magának kell megoldania az általa preferált módszer szerint (kézzel, saját fejlesztésű scripttel, stb.), csak arra kell figyelemmel lenni, hogy a jelszó MD5 hash formában kerül tárolásra.

Ezres nagyságrendű rekordszám (felhasználószám) esetén érdemes lehet leindexelni a tmailuserek táblát.

Ezzel a nehezebb részén túlvagyunk, a postgresql készen áll arra, hogy kiszolgálja a dovecot-ot.


A dovecot konfigurálása

A dovecot egy olyan levelező szerver, amiről imap/imaps és pop3/pop3s protokollokkal letölthetők a levelek úgy, hogy a felhasználói autentikációt valamilyen adatbázisból vagy címtárból végzi. Jelen esetben adatbázisból fog az autentikáció megtörténni.

A dovecot konfig állományai a /etc/dovecot könyvtárban találhatók.

Először állítsuk le a dovecotot:

$ /etc/init.d/dovecot stop


Szerkesszük meg a dovecot.conf file-t:

protocols = imap pop3
login = imap
login = pop3
auth_userdb = pgsql /etc/dovecot/psql_dovecot.conf
auth_passdb = pgsql /etc/dovecot/psql_dovecot.conf
auth_user = root


A fentiek sorra:

  • protocols, login: milyen kéréseket szolgálunk ki
  • auth_userdb, auth_passdb: az autentikáció módja

Szerkesszük meg a /etc/dovecot/psql_dovecot.conf file-t:

connect = dbname=ADATBAZISNEV user=LOGINNEV password=JELSZO
default_pass_scheme = PLAIN-MD5
password_query = S ELECT trim(u_pass) AS password FROM tmailuserek WHERE trim(u_nev) = %u AND u_valid='1'
user_query = S ELECT trim(u_home) AS home, 5000 AS uid, 5000 AS gid FROM tmailuserek WHERE trim(u_nev) = %u AND u_valid='1'

(Megjegyzés: a fenti SQL parancsokban a S ELECT szóban van egy szóköz, ami oda nem kell, csak a wiki motorja miatt kellett bele tennem. Ha rájövök hogyan kell SQL parancsot beírni ide helyesen, javítom a cikket.)


Ennyi. Mentsük a file-t és zárjuk be.

Indítsuk el a dovecot-ot:

$ /etc/init.d/dovecot start


Mostantól a dovecot figyel a POP3 és IMAP portokon és a bejövö login/pass-okat a postgresql-ben lévő adatbázis alapján bírálja el.