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.