VExim alapú levelező szerver (Wheezy)
Ez a leírás házirend szerinti Debian Wheezy komponensekből felépített levélfogadó és levéltovábbító szerver telepítését mutatja be. Technikailag nem használ olyan megoldást, amely miatt dedikált gépre vagy virtuális környezetbe kellene helyezni a szolgáltatást.
Komponensek:
- Exim 4 MTA
- Courier IMAP/POP3 levelező tárhelykezelés
- RoundCube webfelületű MUA (webmail)
- Virtual Exim (VExim 2) PHP alkalmazás (saját módosításokkal)
Szolgáltatások:
- virtuális domainek és userek, user és domain aliasok webfelületű (https) adminisztrációval
- levélfogadás a fentiek számára SMTP-vel
- levélküldés a fentiektől SMTP authentikációval (TLS)
- levél tárolása Maildir-ben, külső hozzáférés IMAP(s), POP3(s) és webmail (https)
- saját jelszó, forward, vacances adminisztrációja a felhasználók által, webfelületen
- forrásszűrésen alapuló spamfilter
- DOS elleni intézkedések
TODO:
- Exchange-like maildir automatikus létrehozatala
- felhasználó törlésekor a levelező tárterület automatikus törlése
- shared folders
- tartalomszűrésen alapuló spamfilter
- malware filter
Squeeze megoldás alapján átírás alatt - még ne vedd komolyan!
Tartalomjegyzék
A megoldás vázlata
- Egy szervergépen csak egy VExim példányt futtatunk (elvileg lehetséges lenne multiplikálni, TODO!).
- A leveleket a filerendszerben a mail:mail Linux felhasználó birtokában lévő /var/mail/.vexim gyökerű tárhelyen, domain/user/Maildir alkönyvtárakban maildir formátumban tároljuk.
- A levélfogadást és az SMTP authentikáció utáni levélküldést az Exim MTA végzi.
- A virtuális felhasználók authentikációs és egyéb (maildir path, alias, forward, stb.) adatai dedikált MySQL adatbázisban tárolódnak, amihez a VExim PHP alkalmazás nyújt kizárólag https-en elérhető webes adminisztrációs felületet. Az Exim számára az adatbázis használatához szükséges router és transport konfigurációs állományokat a vexim-addons csomag szolgáltatja.
- A maildir-ekhez a Courier segítségével lehet hozzáférni IMAP(s) és POP3(s) protokollal. A Courier a VExim-mel azonos authentikációs adatbázist használ.
- A RoundCube MUA kizárólag https-en elérhető web felületen biztosít IMAP klienst, ezzel webmail szolgáltatást.
- A webmail és az adminisztrációs webfelület azonos virtualhoston üzemelnek (pl. https://mail.mydomain.com/ a webmail, https://mail.mydomain.com/admin az adminisztrációs web).
A megoldás nem befolyásolja az Exim által a helyi Linux (rendszer)felhasználók (pl. smartd, sensord, logcheck és egyéb cron jobok) számára egyébként biztosított levelezést.
Megjegyzés: a megoldás kevés saját elemet tartalmaz, zömmel a közösség által javasolt módszerekre épül (köszönet!), ld. Irodalom.
Előfeltételek
A jelen leírás szerinti levelező szerver egy házirend szerinti szerint LAMP környezetet igényel, a következő kiegészítésekkel:
- wsm2 LAMP, a php.ini-ben (/etc/php5/conf.d/wsm2-php5.ini) a mail és include funkciók engedélyezve;
- fix IP cím;
- Exim4 telepítve, beállítva Internet hostnak, a HELO hostnév megegyezik a DNS reverse-zel.
Gonosz hibalehetőségek (gotchas):
- az /etc/hosts-ban a gép hostneve (ld. hostname --fqdn kimenete) nincs a localhost-hoz rendelve.
A vexim-addons exim4-routere a hostnévre a localhost-ra feloldást jelentő@ indirekcióval hivatkozik, hogy ne kelljen a konkrét hostnevet ide beírni. Ha a hostnév nem a localhostra mutat, akkor nem számít local domain-nek és az admin levelekre az Exim4 a dnslookup routert fogja hívni, ami a (publikus IP-n) saját gépre mutató névfeloldás esetén hibát ad. - az Exim4 telepítésekor nem split configuration-t választottunk.
Ilyenkor az /etc/exim4/update-exim4.conf.conf-ban dc_use_split_config='false' szerepel. Így a vexim-addons által hozott plusz konfigurációs állományok beállításait - pl. az adatbázis-kapcsolatot - az Exim4 nem fogja figyelembe venni.
Ezeket jobb már most ellenőrizni :-).
Telepítés
A komponensek telepítését az alábbi sorrendben fogjuk elvégezni:
- MySQL adatbázis és adatbázis-felhasználó elkészítése
- VExim (az Exim működését vezérlő MySQL adminisztráció webfelületen) + vexim-addons (az Exim és a VExim kapcsolatát megteremtő eszközök, valamint egyéb kiegészítők)
Megjegyzendő, hogy a VExim semmilyen file műveletet nem végez, kizárólag a hozzá tartozó Exim router és transport MySQL-en keresztüli vezérlésével működik! Nézetem szerint ez egy igen biztonságos megközelítés.
- Courier IMAP, POP3 (felhasználói levélkezelés levelező klienssel)
- RoundCube (felhasználói levélkezelés webfelületű IMAP klienssel)
VExim és vexim-addons telepítése
MySQL adatbázis elkészítése
Készítsük el a MySQL adatbázist, amelynek egyetlen, az adatbázisra nézve teljes jogú felhasználója van. Az adatbázist és a felhasználót a MySQL root hozzáféréssel hozzuk létre.
mysql --defaults-file=/etc/mysql/root.cnf mysql> CREATE DATABASE vexim character set utf8; mysql> GRANT ALL PRIVILEGES ON vexim.* TO 'vexim'@'localhost' IDENTIFIED BY 'PASSWORD'; mysql> FLUSH PRIVILEGES;
ahol a PASSWORD egy megfelelő jelszó. Relatív megjegyezhető, mégis erős jelszó a pwgen segédprogrammal is generálható, pl. a következőképpen:
/usr/bin/pwgen -s -n -c 12 1
Ellenőrizzük, hogy a felhasználó megfelelően létrejött-e:
mysql> SELECT host, user, password FROM mysql.user; +-----------+------------------+-------------------------------------------+ | host | user | password | +-----------+------------------+-------------------------------------------+ | localhost | vexim | *A9.............censored................E | [...] +-----------+------------------+-------------------------------------------+ mysql> quit
Ezután próbáljunk a létrehozott felhasználó nevében és jelszavával belépni. Az alábbi parancsokkal ellenőrizhetjük, hogy a felhasználó jogosultságai valóban csak erre az adatbázisra terjednek ki:
mysql -u vexim -p Enter password: mysql> show databases; +--------------------+ | Database | +--------------------+ | information_schema | | vexim | +--------------------+ mysql> quit
A felhasználó felvételét és kipróbálását követően töröljük le a .mysql_history állományt, mert ebben a jelszó szabad szöveges formában benne van:
rm ~/.mysql_history
Az adatbázis iniciális feltöltését a telepítő script végzi.
A kódkészlet telepítése
Még alakul!
A VExim a jelen megoldás egyetlen, nem Debian komponense. A jelen leírás készítésekor a VExim aktuális fejlesztői webhelye még nem tartalmaz stabil verziót, így egy (a leírás készítésének idején 2014 májusi állapotú), kódbázisként használt, archivált vexim2 2.2 verziót fogunk használni a saját fejlesztésű vexim-addons tarball-ban található kódkiegészítésekkel. Az egyszerűbb telepíthetőség kedvéért a vexim-addons tartalmazza a módosított és újracsomagolt VEximet, valamint egy ennek telepítésére szolgáló shell scriptet is. A vexim-addons-ban fejlesztői segítségként megtalálható az eredeti kódbázis és a változtatásokat tételesen leíró patch állomány is (ezek a telepítéshez és használathoz nem szükségesek).
Töltsük le a vexim-addons legfrissebb változatát, és rendszergazdaként, a /usr írhatóan újracsatolása után, csomagoljuk ki /usr/local/share/vexim-addons könyvtárba! Ezután indítsuk el a telepítő scriptet a
/usr/local/share/vexim-addons/update_vexim.sh
paranccsal. A telepítő script igyekszik biztonságosan dolgozni, azaz minden lényeges lépéshez engedélyt kér, meglévő telepítést, adatbázist, stb. nem ír felül, így akár többször is, biztonsággal elindítható.
- Az elindított telepítő engedélyt kér a PHP kód kicsomagolására, és ha engedjük (y), létrehozza az alábbi könyvtárstruktúrát:
/usr/local/share/vexim-versions /vexim2-X.Y-pYYYYMMDD
ahol X.Y a kódbázis verziószáma, pYYYYMMDD az alkalmazott patch azonosítója. A későbbi frissítések hasonló könyvtárakba kerülnek, ezek közül az aktuálisan használt kódverziót symlinkeléssel választhatjuk ki (mivel a telepítő még fut, a symlinket egy másik ablakban, vagy később, a telepítő lefutása után készíthetjük el):
# Symlink az aktuális verzióra ln -s vexim-versions/vexim2-vexim2-X.Y-pYYYYMMDD /usr/local/share/vexim chown -h root:www-data /usr/local/share/vexim # Csak szépség :-)
Ez a symlink biztosítja, hogy esetleges frissítés után is a mindenkori webszolgáltatás kódkészlete a /usr/local/share/vexim útvonalon látsszék.
- A PHP kód kicsomagolása után a telepítő engedélyt kér a MySQL adatbázis feltöltésére.
Jelenleg a telepítő ezt a lépést csak akkor tudja végrehajtani, ha a MySQL root hozzáférés a házirendünk szerinti /etc/mysql/root.cnf állománnyal biztosított és a vexim adatbázis létezik (más helyzetek kezelése: TODO!). Engedjük az adatbázis feltöltését (y), de a telepítő további lépéseit (Exim4 és Courier konfigurációk beállítása) most még ne futtassuk le (n).