Levelezőszerver telepítése - a nagy körkép

Előző blogbejegyzésemben összeállítottunk egy működőképes levelezőszervert, azonban a részletesebb magyarázatra ott nem volt hely. Ezt szeretném most pótolni. Ezek a leírások természetesen megtalálhatóak az Internet megfelelő weboldalain, azonban meglehetősen szétszórva és nem abban a tematikus sorrendben, ahogyan arra most szükségünk van. A kezdő levelezőszerver üzemeltetőknek azonban inkább egy ilyen tematikus leírásra van szükségük; nekem legalábbis óriási segítséget nyújtott volna annak idején, ha rendelkezésemre áll valami hasonló leírás akkor, amikor belevágtam életem első levelezőszerverének összeállításába.

Rajzoljuk fel hát a nagy képet...

...és nézzük meg ugyanezt a következő oldalakon részleteiben is.

MySQL adatbázis

A felhasználók adatait MySQL adatbázisban tároljuk. A legfontosabb a POSTFIX nevű adatbázis, amely a postafiókok adatait tartalmazza, mint például:

  • e-mail cím (amely egyben a felhasználói név is)
  • jelszó (természetesen kódolt formában)
  • maildir, azaz annak a mappának az elérési útvonala, amely mappa a szerver fájlrendszerében a leveleket fogja tárolni
  • a felhasználó természetes neve
  • a postafiók mérete (kvóta)
  • aktív státusz jelző (0,1), azaz a postafiók „élő”, vagy jelenleg nem fogad leveleket
  • postafiók aliasok
  • illetve a Postfix Admin webes alkalmazás kiegészítő adatai (rendszergazdák, domain rendszergazdák, stb)

Mivel a postafiókok felhasználói nem jelennek meg rendszerfelhasználókként is az alapul szolgáló Debian Linux rendszerben, így a tartományok és az abban található postafiókok száma nagyon rugalmasan kezelhető és bővíthető, amely bővítésnek egyedül a szerver rendelkezésre álló erőforrásai szabhatnak gátat.

A másik adatbázis a ROUNDCUBE, amely a hasonló nevű webes levelező alkalmazás felhasználókra vonatkozó adatait tartalmazza (személyre szabott beállítások, névjegyalbumok, stb). A Roundcube adatbázis csak az email címeket, mint a belépéshez szükséges felhasználói neveket tárolja el, a hozzájuk tartozó jelszavakat természetesen nem. Mint majd látni fogjuk, a Roundcube alkalmazás ebből a szempontból egy közönséges levelezőkliensként viselkedik, amely bejelentkezik a Dovecot 993-as portján (IMAPS), pontosan úgy, ahogyan ezt a levelezőprogramok is teszik.

A MySQL kizárólag a localhost (127.0.0.1) 3306-os portján fogad szolgáltatás kérelmeket. Ezek a szolgáltatások az alábbiak:

  • A Dovecot szerver részére a Postfix adatbázisból lehetővé teszi a felhasználók hitelesítési adatainak vizsgálatát, illetve itt tárolja a Dovecot a postafiókokban lévő üzenetek nagyságára és mennyiségére (kvóta) vonatkozó adatokat.
  • A Postfix Admin webes alkalmazás a Postfix adatbázisban rögzíti a tartományok és a hozzá tartozó postafiókok adatait.
  • A Roundcube webes levelezőprogram az azonos nevű adatbázisban tárolja a felhasználókkal kapcsolatos saját adatait.
  • A Postfix MTA a Postfix adatbázisból ellenőrzi, hogy a bejövő levél címzettjének postafiókja helyben található-e vagy sem. Amennyiben a címzett postafiókjáról szóló adatokat nem találja meg a Postfix adatbázisban, visszautasítja a levél kézbesítését.

Postfix MTA

A Postfix egy Mail Transfer Agent, azaz levéltovábbító ügynök. Két szerepe van: fogadja a felhasználóink postafiókjába tartó leveleket, illetve lehetővé teszi a felhasználóink számára, hogy levelet tudjanak küldeni az Internet tetszőleges pontjára.

A felhasználóink postafiókjába tartó leveleket a 25-ös porton fogadja a Postfix. Ha a levél címzettje helyben található (ezt a Postfix nevű adatbázisból tudja meg), a Postfix elvégez egy hadsereg ellenőrzést annak érdekében, hogy kiszűrje a kéretlen reklámleveleket, és azokat is, amelyek vírusokat tartalmaznak. A kéretlen reklámlevelek könnyen felfedezhető tulajdonsága, hogy rendszeresen pimasz módon bánnak a szabályos levélküldések érdekében kiadott leírásokkal, RFC-kel. A Postfix képes saját maga is – meglehetősen szigorúan – ellenőrizni, hogy a bejövő levél betartja-e ezeket a kötelező szabályokat. Amennyiben nem, valószínűleg spamról van szó, és a Postfix megtagadja a kézbesítést. Ha a bejövő levél mindenben megfelel az RFC-k leírásának, további vírus- és spamszűrést is végez, de ehhez külső segítséget vesz igénybe: az Amavis program szolgáltatásait (a helyi 10024-es porton keresztül). Ha a levél vírusfertőzésre utaló mintát tartalmaz, karanténba kerül. Ha az Amavis szerint spamról van szó, az üzenet tárgyát megjelöli a „***Possible SPAM***” karaktersorozattal, és visszaadja a Postfixnek a levelet (10025-ös port). Ha a levél tisztának bizonyul, az Amavis változatlanul adja azt vissza a Postfix számára (10025-ös port). A Postfix végül – mivel helyi levélről van szó, ez ellenőrzésre került még a folyamat elején – átadja azt kézbesítésre a Dovecot szervernek.

Ha a felhasználók levelet szeretnének küldeni a Postfix segítségével, azt az 587-es porton keresztül tehetik meg (submission). A port kizárólag titkosított kapcsolatot (TLS) hajlandó nyitni a felhasználók levelezőprogramjával, hiszen a levélküldéshez a felhasználók elküldik felhasználói nevüket és jelszavukat, ezzel igazolva azt, hogy ők a levelezőszerveren rendelkeznek postafiókkal és így jogosultak nemcsak levelek fogadására, hanem küldésére is. A felhasználók hitelesítését nem a Postfix végzi el közvetlenül (ehhez kellene egy újabb hitelesítési mechanizmus, a SASLAUTH), hanem a Dovecot szerver hitelesítési rendszerét használja fel erre a célra.

Amavis

Az Amavis egy szűrő keretrendszer, amely nagyon jól tud együttműködni különböző típusú szűrő alkalmazásokkal. A jelenlegi telepítésben ezek a külső alkalmazások a Clamav víruskereső szolgáltatás, illetve a Spamassassin spamszűrő alkalmazás.

Az Amavis a 10024-es porton fogadja az átvizsgálandó levelet.

Ha a levél bejövő levél, azaz egy helyi postafiókba tart, akkor az alábbiak történnek:

  • A levél átadásra kerül a Clamav víruskeresőnek. Amennyiben a levél vírusra utaló mintát tartalmaz, karanténba kerül. Ha a Clamav nem talál vírusra utaló jelet, visszaadja a levelet az Amavisnak.

  • A levél átesik a spamszűrő vizsgálatokon is. Az Amavis ehhez felhasználja a Spamassassin képességeit és figyelembe veszi annak konfigurációs fájljait, beállításait is, de a vizsgálatot magát nem a Spamassassin démon végzi (hiszen fel sem telepítettük), hanem az Amavis maga. Ez egy kicsit félrevezető lehet a spamszűrés konfigurálásakor, így jól oda kell figyelnünk a részletekre. A levél fejlécébe bekerülnek az X-Spam-Flag, X-Spam-Score, X-Spam-Level és X-Spam-Status bejegyzések is. Ha a levél spamnak minősül, a tárgyba bekerül ez a karaktersorozat: „***Possible SPAM***”. Ha a levél nem minősül spamnak, a tárgy változatlan marad. Végül a levél visszakerül az Amavishoz, az pedig visszaadja azt a Postfixnek a 10025-ös porton keresztül.

Ha a levél kimenő levél, azaz a címzett postafiókja nem a helyi levelezőszerveren található, akkor az Amavis nem végzi el a spamszűrést, így a kimenő levelek gyorsan elhagyják a szerverünket. Ennek főleg akkor érezhető a haszna, ha néhány száz levelet – például egy hírlevél szolgáltatás keretében – akarunk szétküldeni az interneten. Ha minden egyes levél átesne spamszűrésen is, akkor a levelek kiküldésének időtartama igencsak hosszúra nyúlna.

Dovecot

A Postfix fogadja a bejövő levelet, a Dovecot pedig elhelyezi azt a felhasználó postafiókjában. Azonban a felhasználó valószínűleg el is szeretné olvasni a leveleit, így szüksége lesz arra, hogy hozzáférjen azokhoz. A Dovecot nem csak a levelek postafiókban történő elhelyezésében segít, hanem egy hitelesítési folyamat után a felhasználó számára hozzáférhetővé is teszi ezeket a leveleket.

A hozzáférésnek két módja van:

  • POP3: ha a felhasználó ezzel a protokollal kapcsolódik a levelezőszerverhez, a levelezőprogram először letölti a leveleket a felhasználó számítógépére, és csak utána lehet őket elolvasni. Beállítás kérdése, hogy a levelek egy másolata benne maradjon-e a postafiókban, vagy a letöltés után kiürüljön a postafiók. Az utóbbi esetben nyilvánvalóan problémába ütközünk, ha több számítógépről töltjük le ugyanannak a postafióknak a leveleit: a másodszor bejelentkező levelezőprogram csak egy üres postafiókot fog találni. Ha azonban úgy döntünk, hogy a levelekről egy másolat maradjon benne a postafiókban (ezt a levelezőprogramban kell beállítani), akkor a másodszorra csatlakozó levelezőprogram is megtalálja ugyanazokat a leveleket. Arra azonban figyelni kell, hogy valamennyi levelezőprogram ugyanígy legyen beállítva. Az elküldött levelek viszont semmiképpen nem kerülnek be a postafiókba, hanem megmaradnak a küldő számítógépen, így ezeket a másik levelezőprogramból nem lehet majd elérni.

  • IMAP: a levelek a postafiókban maradnak (hacsak le nem töröljük azokat), és a kapcsolódáskor azonnal megjelennek a levelezőprogramban. Mind a bejövő, mind a kimenő levelek megjelennek a postafiókban, ráadásul minden kapcsolódó levelezőprogramban egyformán. Így teljesen mindegy, hogy egy levelezőprogrammal, vagy egy webes levelező alkalmazással (mint például a Roundcube) nézünk bele a postafiókba: az eredmény ugyanaz lesz. Tetszőleges mappákat hozhatunk létre, és ezekbe a sieve szkriptek segítségével ki tudjuk válogatni a bejövő leveleket is. Így anélkül kapunk rendezett postafiókot, hogy a levelezőprogramokban nekünk kellene folyamatosan leveleket mozgatni egyik mappából a másikba. A protokoll egyetlen hátránya az, hogy a postafiók mérete az idő múlásával egyre nagyobb lesz, így a kvótát néha meg kell növelni, vagy a feleslegessé vált leveleket időnként le kell törölni.

Ha egy mód van rá, részesítsük előnyben a kizárólag IMAP protokollal elérhető postafiókokat. Mindenkinek egyszerűbb lesz az élete, de a rendszergazdáé mindenképpen.

A biztonság kedvéért...

Ha megtehetjük, az IMAP protokollnak is kizárólag a titkosított, IMAPS változatát engedélyezzük a szerveren, így a távoli levelezőkliensek által küldött felhasználói nevek és jelszavak rejtve maradnak az esetleges hallgatózók elől. Mivel ugyanezekkel a felhasználói nevekkel és jelszavakkal leveleket is tudunk küldeni a szerver segítségével, nem kérdés, hogy titokban kell tartanunk ezeket a hitelesítési adatokat. Ellenkező esetben egy spammer hitelesített felhasználóként fogja tudni reklámlevelek küldésére használni a szerverünket...

Felhasználók hitelesítése

A Dovecot hitelesíti a felhasználókat a postafiókjukba történő belépéskor, illetve a Postfix számára is végez ugyanilyen felhasználói hitelesítést, amikor a felhasználók a szerver segítségével levelet akarnak küldeni.

Szerver oldali levélszűrés - Sieve

A Dovecot továbbá lehetővé teszi a szerver oldali levélszűrést is a sieve protokoll segítségével. Ha okos szabályokat állítunk fel, a Dovecot maga gondoskodik arról, hogy a bejövő leveleink ne a Beérkezett üzenetek (Inbox) mappába kerüljenek beömlesztésre, hanem a szabályok alapján különböző mappákban helyezi el azokat. Így amikor bejelentkezünk a postafiókunkba, a beérkezett üzeneteink az általunk meghatározott szabályok szerinti mappákban fognak várni bennünket. Fontos megjegyezni, hogy azok a levelek, amelyek nem az Inbox (Beérkezett üzenetek) mappába kerülnek, a POP3 protokollal kapcsolódó levelezőkliensek számára nem lesznek elérhetőek: a POP3 kliensek ugyanis csak az Inbox mappa tartalmát töltik le.

Kvóta

Végül beállítottuk a kvóta lehetőségét is, amelynek segítségével meghatározhatjuk, hogy az egyes postafiókoknak mekkora lehet a maximális mérete. Ha a postafiók eléri ezt a méretet, a Dovecot nem kézbesít a számára több üzenetet, a feladót pedig értesíti a kézbesítés meghiúsulásáról.

Webes alkalmazások

Apache webszerver

Két webes alkalmazásunk van, amelynek működtetéséhez szükségünk van az Apache webszerverre. Ez két VirtualHost bejegyzést jelent az Apache konfigurációs fájlokban. Az alkalmazások kizárólag a HTTPS protokoll segítségével érhetőek el, hiszen mindkét alkalmazás számára felhasználóneveket és jelszavakat küldünk át az Interneten keresztül.

Postfix Admin

Az egyik ilyen webes alkalmazás a Postfix Admin, amelynek segítségével új levelezési tartományokat és postafiókokat vehetünk fel a Postfix nevű adatbázisban. A Postfix Admin adminisztrációs jogokkal rendelkező felhasználóinak semmilyen közük nincsen a szerveren található postafiókok felhasználóihoz, azaz a kettő között nincs semmilyen kapcsolat. Vagyis az Admin lista menüpont alatt található felhasználóknak csak akkor lesz postafiókjuk is a levelezőszerveren, ha azokat a Postafiók lista menüpont alatt is rögzíted.

Roundcube

A másik webes alkalmazásunk a Roundcube, amely egy teljes értékű levelező kliens program, amely történetesen egy böngészőben futtatható. Levelezőklienshez méltóan éppúgy a Dovecot szabvány IMAP portját használja (IMAPS, 993-as port), mint egy távolról beállított Outlook vagy Mozilla Thunderbird, és ugyanez mondható el a levél küldésekor is a Postfix szerverrel kapcsolatban (Submission, 587-es port).

PHP-FPM

Mind a Postfix Admin, mind pedig a Roundcube PHP-ban írt alkalmazások, így szükség van a PHP értelmezőre is a szerveren. Célszerű ehhez a PHP-FPM segítségét is igénybe venni, mivel így a PHP feldolgozó nem Apache modulként van jelen (amely komoly biztonsági és teljesítménygondokat vet fel), hanem egy külső szolgáltatásként, amelyet az Apache igénybe vesz a PHP fájlok feldolgozásához. A weboldalak így különálló linux felhasználói folyamatként, egymástól jól elkülönítve futtathatóak.