VExim alapú levelező szerver (Squeeze)

Innen: AdminWiki

Ez a leírás Debian Squeeze komponensekből felépített levélfogadó és levéltovábbító szerver telepítését mutatja be, policy-s környezetet feltételezve. Technikailag nem használ olyan megoldást, amely miatt dedikált gépre vagy VServerre kellene helyezni a szolgáltatást.

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)
  • jelszavak, forward, vacances adminisztrációja a felhasználók által, webfelületen
  • forrásszűrésen alapuló spamfilter

TODO:

  • Exchange-like maildir automatikus létrehozatala
  • felhasználó törlésekor a levelező tárterület automatikus törlése
  • tartalomszűrésen alapuló spamfilter
  • malware filter

Tartalomjegyzék

A megoldás vázlata

  • 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 Squirrelmail 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 levelező szerver egy policy szerint LAMP környezetet igényel:

  • fix IP
  • Exim4 telepítve, beállítva Internet hostnak, a HELO hostnév megegyezik a reverse-zel
  • wsm2 LAMP, a php.ini-ben a mail és include funkciók engedélyezve

Szükséges még a PHP PEAR kiterjesztésből a DB layer telepítése:

apt-get install php-pear php-db

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

Telepítendő komponensek:

  • 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)
  • Squirrelmail (felhasználói levélkezelés webfelületű IMAP klienssel)

A VExim telepítése

A VExim a jelen megoldás egyetlen, nem Debian komponense.

MySQL adatbázis ké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 kódkészlet telepítése

Noha létezik Debian csomag, az jelen pillanatban még a SID repoban sincs benne (folyamatosan változik). Ezért a VExim-et rendszergazdaként, tarball-ból telepítjük.

Megjegyzés: a jelen leírás készítésekor a VExim aktuális fejlesztői webhelye még nem tartalmaz stabil verziót, így a régebbi fejlesztői webhelyről származó utolsó stabil verziót használjuk, noha az már 4 éves.

A /usr átmenetileg írhatóra csatolása után töltsük le a 2.2.1 verziójú tarball-t, és csomagoljuk ki a /usr/local/share/vexim2 (verziófüggő) könyvtárba. A web elérés számára (a későbbi frissítéseket előkészítendő) készítsünk egy symlinket a kicsomagolt /vexim alkönyvtárra:

ln -s /usr/local/share/vexim2/vexim /usr/local/share/vexim

Módosítsuk a jogosultságokat, töröljük a .svn könyvtárakat, a webfelület állományait állítuk a webes házirend szerintire:

chown -R root:root /usr/local/share/vexim2 # ennek így kellene lennie a tarballban is...
find /usr/local/share/vexim/* -name .svn -type d -exec rm -R {} \; # .svn felesleges
find /usr/local/share/vexim/* -type d -exec chown root:www-data {} \; -exec chmod 2750 {} \;
find /usr/local/share/vexim/* -type f -exec chown root:www-data {} \; -exec chmod 640 {} \;

Azért kell a root (és nem a webadmin) birtokába adni a scripteket, mert enélkül safe mode-ban nem tudnák include-olni a root birtokában lévő PEAR állományokat. A share könyvtárakban különben szokásos root:root 755/644 jogok azért nem jók, mert a variables.php plain text jelszavakat tartalmaz, így az other's read engedése nem célszerű.

Ezután hozzuk létre a levelező tárhelyet, és állítsuk be a jogosultságokat:

mkdir -m 750 /var/mail/.vexim; chown mail:mail /var/mail/.vexim; setfacl -d -m o::- /var/mail/.vexim

A tárhelyet a standard mail Linux felhasználó tulajdonába fogjuk adni, az Exim és a Courier ezen felhasználó nevében fogja a leveleket kezelni. Az ACL korlátozással a Courier által liberálisan kiosztott olvasási jogokat igyekszünk kordában tartani.

MySQL adatbázis inicializálása

Az adatbázis feltöltéséhez másoljuk le a maintainer által biztosított adatbázis sémát:

cp /usr/local/share/vexim2/setup/mysql.sql /root/tmp/vexim.sql

és adjuk meg a levelező tárhely tulajdonosaként használni kívánt mail Linux felhasználó UID és GID értékét (cseréljük ki a scriptben szereplő CHANGE értékeket) az alábbiak szerint:

echo "UID: `id -u mail` GID: `id -g mail`" # Kiírja a szükséges UID és GID értékeket

valamint kommentezzük ki a scriptben szereplő grantolást.

Úgy tűnik, a Squeeze-ben szereplő MySQL a sor eleji "---" karaktersort nem tekinti MySQL megjegyzésnek, így ezt cseréljük ki "-- " karaktersorozatra - TODO: utánanézni!

Ezen kívül érdemes a vacation mező típusát TEXT-re cserélni, így egy helyen, az alkalmazás PHP beállításainál korlátozhatjuk a vacation message hosszát:

-rw-r--r-- root root /root/tmp/vexim.sql

[...]
CREATE TABLE IF NOT EXISTS `vexim`.`domains`
        [...]
        uid              smallint(5)   unsigned  NOT NULL  default '8',
        gid              smallint(5)   unsigned  NOT NULL  default '8',
[...]
CREATE TABLE IF NOT EXISTS `vexim`.`users` 
        [...]
        vacation         text                              default NULL,
[...]
-- Priviledges:
--
-- GRANT SELECT,INSERT,DELETE,UPDATE ON `vexim`.* to "vexim"@"localhost" 
--    IDENTIFIED BY 'CHANGE';
-- FLUSH PRIVILEGES;
[...]

Bug: a PHP 5.3-ban valamit változtattak a crypt függvényen, így jelenleg a salt-ot használó titkosításokat a VExim-ben nem lehet használni - TODO! Ennek megkerülésére sha1 kódolást fogunk alkalmazni, viszont a fenti állományban a siteadmin felhasználó kezdeti jelszava md5 kódolással szerepel. Bíráljuk ezt felül az állomány legvégére írt alábbi sorokkal:

-rw-r--r-- root root /root/tmp/vexim.sql

[...]
-- fix password when using SHA encrypted password:
UPDATE `vexim`.`users` 
  SET `clear` = 'CHANGE', `crypt` = '{SHA}B7FGgSJmtORex5nQA+6ej76GafI='
  WHERE `user_id` = '1' LIMIT 1 ;

Megjegyzés: tetszőleges egyéb (tömörített) SHA1 password hash is előállítható az alábbi parancssorral:

php -r "print '{SHA}'.base64_encode(pack('H*',sha1('PASSWORD_HERE')));"

Figyelem: a clear és crypt mezőket mindig konzisztensen módosítsuk!

Ezután töltsük be az adatbázist:

cat /root/tmp/vexim.sql | mysql -u vexim -p -D vexim

Az adatbázis betöltését követően töröljük le a séma másolatot és a .mysql_history állományt is, mert ebben a jelszó szabad szöveges formában benne van:

rm /root/tmp/vexim.sql; rm ~/.mysql_history

Apache-2

A felhasználói (Squirrelmail) illetve az adminisztrációs (VExim) webfelület számára készítsünk egy (közös) csak https-en szolgáltató virtualhostot.

Az alábbi szakasz csak a VExim rész beállításával foglalkozik, a Squirrelmail Apache beállításokat ld. később.

A szokásos módon, a wsm2 segítségével létrehozott virtualhost alapértelmezett könyvtárait (a /awstats, /bin és /log kivételével) törölhetjük. Célszerű a VExim webet a virtualhost /admin elérésére linkelni:

wsm2 -cw FULLY.QUALIFIED.HOSTNAME sysadmin@MYDOMAIN
cd /var/www/FULLY.QUALIFIED.HOSTNAME
rm -R  `ls -1 | grep -iv awstats | grep -iv bin | grep -iv log | grep -iv robots.txt`
ln -s /usr/local/share/vexim admin
chown -h webadmin:www-data admin

Ezután módosítsuk a virtualhost apache konfigurációját. Általánosságban:

  • érdemes lehet beállítani a mail.* 'ServerAlias'-t, így a virtualhost bármilyen mail.HOSTNAME hívásra válaszol.
  • töröljük az imént törölt alkönyvtárakra vonatkozó bejegyzéseket
  • engedélyezzük a symlinkek követését
  • kapcsoljuk ki (állítsuk DetectionOnly-ra) a modsec általi szűrést (mind a webmail tartalomban, mind az admin felületen beviendő paraméterekben lehet olyan legális tartalom, amire praktikusan lehetetlen jó szűrőszabályt írni) - TODO!
  • aktiváljuk az alapértelmezésben kommentezett, a https-re irányító rewrite rule-t
-rw-r--r-- root root /etc/apache2/sites-enabled/FULLY.QUALIFIED.HOSTNAME

<VirtualHost *:80 >
[...]
    ServerAlias         mail.*
[...]
    # ModSecurity settings (entire virtualhost).
    <IfModule security2_module>
        # Engine On/Off/DetectionOnly.
        SecRuleEngine DetectionOnly
        [...]
    </IfModule>
[...]
    <Directory /var/www/FULLY.QUALIFIED.HOSTNAME>
        [...]
        Options +FollowSymLinks
        [...]
    </Directory>
[...]
    <IfModule mod_rewrite.c>
        [...]
#       Use to disable public http service (providing content only via https proxy)
        RewriteCond %{REMOTE_ADDR} !^(IP\.IP\.IP\.IP)$
        RewriteRule ^/(.*)         https://%{HTTP_HOST}/$1 [L,R,QSA]
    </IfModule>
[...]

Ne felejtsük a rewrite rule-ban az IP címet kitölteni! Ezen kívül, speciálisan készítsünk egy bejegyzést az /admin könyvtárra, amelyben:

  • engedélyezzük a symlinkek követését
  • engedélyezzük a PHP futtatást
  • vegyük fel az open_basedir sorba a /usr/share/php, /usr/local/share/vexim és /var/mail/.vexim könyvtárakat (ez utóbbira csak egy, a PHP kódban szereplő realpath hívás miatt van szükség - kár érte, mert a PHP amúgy nem dolgozna a levelező tárterülettel...)
  • engedélyezzük a LANG könyezeti változó beállítását (magyar nyelvű webfelülethez)
  • tiltsuk le a /admin/config elérését
-rw-r--r-- root root /etc/apache2/sites-enabled/FULLY.QUALIFIED.HOSTNAME

[...]
    # VExim admin
    <Directory /var/www/FULLY.QUALIFIED.HOSTNAME/admin>
        Allow from all
        AllowOverride Limit
        Options +FollowSymLinks
#       Options +SymLinksIfOwnerMatch
        <IfModule mod_php5.c>
            php_admin_flag engine on
            php_admin_value safe_mode_allowed_env_vars PHP_,LANG
            php_admin_value open_basedir /var/www/FULLY.QUALIFIED.HOSTNAME/:/usr/share/php/:/usr/local/share/vexim/:/var/mail/.vexim/
            php_admin_value include_path .:/usr/share/php/:/usr/share/php5/
        </IfModule>
    </Directory>

    <Directory /var/www/FULLY.QUALIFIED.HOSTNAME/admin/config>
        Deny from all
        AllowOverride none
        Options -FollowSymLinks
        Options -SymLinksIfOwnerMatch
        <IfModule mod_php5.c>
            php_admin_flag engine off
        </IfModule>
    </Directory>
[...]

Ha használjuk a mail.* aliast, ezt vegyük fel a konfiguráció https részébe is:

-rw-r--r-- root root /etc/apache2/sites-enabled/FULLY.QUALIFIED.HOSTNAME

<VirtualHost *:443 >
[...]
    ServerAlias         mail.*
[...]

Annak elkerülésére, hogy a https proxy hívások látogatásként az AwStats-ban megjelenjenek, az AwStats konfiguráció elkészíttetése után (megjegyzés: ez a parancs a teljes napi statisztikát frissíti, így óvakodjunk kiadásától nagy terhelés alatti, sok virtualhostot hostoló szerveren!):

/etc/cron.daily/awstats

vegyük fel a használt IP-t a virtualhost AwStats konfigurációjának SkipHosts sorába:

-rw-r--r-- root root /etc/awstats/awstats.FULLY.QUALIFIED.HOSTNAME.conf

[...]
# Excluding own IPs                                                                                  
SkipHosts=[...] IP.USED.BY.HTTPS-PROXY
[...]

VExim

Ezután (még a webszerverek konfigurációjának újraolvastatása előtt!) szerkesszük meg a VExim konfigurációs állományát:

  • állítsuk be az SQL password-öt
  • állítsuk be az md5 helyett az sha titkosítás használatát

Megjegyzés: ez így nem igazán jó, de a PHP 5.3-ban valamit változtattak a crypt függvényen, így jelenleg a salt-ot használó titkosításokat a VExim-ben nem lehet használni - TODO! - másfelől amíg van clear mező, addig majdnem mindegy, hogy a crypt hogy van titkosítva...

  • írjuk elő, hogy bejelentkezéskor a domain nevet legördülő menüből kiválasztás helyett szövegesen be kelljen írni (security in obscurity...)
  • állítsuk be a tárhely tulajdonos Linux felhasználó UID és GID értékeit (nem felüldefiniálhatóra)
  • állítsuk be a levelező tárhely path-t (ügyeljünk a záró / jelre!)
  • állítsuk be a vacation message maximális hosszát;
-rw-r----- webadmin www-data /usr/local/share/vexim/config/variables.php

[...]
  $sqlpass = "PASSWORD";
[...]
  $domaininput = "textbox";
[...]
  $cryptscheme = "sha";
[...]
  $uid = "8";
  $gid = "8";
  $postmasteruidgid = "no";
[...]
  $mailroot = "/var/mail/.vexim/";
[...]
  $max_vacation_length = 1024;
[...]

Állítsuk be továbbá a magyar nyelv használatát:

-rw-r----- root www-data /usr/local/share/vexim/config/i18n.php

[...]
$language = 'hu_HU';
[...]

Gyorsteszt

Olvastassuk újra a webszerver konfigurációját:

invoke-rc.d apache2 reload

Ezzel a VExim webfelülete elérhetővé vált. Lehetőség szerint azonnal, egy, a telepítés alatti szervert https protokollon keresztül elérő kliensgép böngészőjében hívjuk be a http://FULLY.QUALIFIED.HOSTNAME/admin weboldalt! A https-re váltás után a VExim login form jelentkezik (magyar nyelven), a siteadmin/CHANGE alapértelmezett bejelentkezés után azonnal változtassunk jelszót (lehetőség szerint erős, generált jelszó legyen)!

Hibalehetőség: ha sha-ra változtattuk az authentikációt, de nem tudunk bejelentkezni, akkor az adatbázisban valószínűleg az md5 hash szerepel. Vagy update-eljük a vexim.users táblát a korábban leírtak szerint, vagy írjuk vissza a /usr/local/share/vexim/config/variables.php állományban az md5-öt, mentsünk, weben jelentkezzünk be, írjuk vissza az sha-t, mentsünk, weben változtassunk jelszót, ami így már sha hashként mentődik, és ezzel többé nem lesz bajunk.

Figyelem: ha az /usr/local/share/vexim/config/variables.php állományban az authentikációt nem változtattuk meg, akkor bármilyen jelszóval be tudunk jelentkezni(!), mert a PHP hiba miatt mind a clear, mind a crypt mezők üresek maradnak! Mindenképpen nézzünk rá ezekre a mezőkre, mielőtt továbbmegyünk!

A VExim és az Exim összekapcsolása

Az eljárás innen származik; lényege, hogy az Eximet utasítjuk a VExim által karbantartott adatbázis backend használatára és definiáljuk az adatbázisban szereplő virtuális userek tárterületére kézbesítéshez szükséges file másoló eljárásokat.

Exim4 heavy telepítése

Először ki kell cserélnünk az alapértelmezett exim4 (light) daemont a heavy változatra, amelyik tud adatbázisból dolgozni:

apt-get install exim4-daemon-heavy

Megjegyzés: VServer környezetben, ha a dc_local_interfaces tartalmazza a localhostot, az exim4-deamon-heavy nem ír pidfile-t, és ezért két példányban indul el, majd ezek a 25-ös porton összeveszvén elhalnak. Furcsa hiba, nem találtam a Neten semmit erről.

Szolgáltató környezetben érdemes az exim4 logokat az alapértelmezett 10 napnál tovább megőrizni:

-rw-r--r-- root root /etc/logrotate.d/exim4-base

/var/log/exim4/mainlog /var/log/exim4/rejectlog {
        daily
        [...]
        rotate 30
        [...]
}

A vexim-addons telepítése

Ezután töltsük le a legfrissebb vexim-addons tarball-t, és az /usr írhatóra csatolása után:

mount -o remount,rw /usr

könyvtárhelyesen tömörítsük ki. Ha a vexim-addons 1.0 vagy későbbi változatát használjuk, akkor futtassuk le az update_vexim.sh scriptet, amely a felhasználói adatokat is tartalmazó állományokat hozza létre (ügyelve arra, hogy már megszerkesztett állományt ne írjon felül):

/usr/local/share/vexim-addons/update_vexim.sh | less # csak v1.0 vagy efelett!

Az update_vexim.sh kimenetét azért érdemes a less paranccsal átnézhetővé tenni, mert ha egy telepítendő állomány már létezik, akkor nem írja felül, de diff formában megmutatja, hogy mit változtatna - ez nyilván frissítésekkor érdekes.

A vexim-addons telepítése létrehoz egy Exim transport és egy Exim router állományt a virtuális domainekbe kézbesítéshez, valamint egy adatbázis-használatot vezérlő állományt. Ez utóbbit szerkesszük meg, és adjuk meg benne a vexim adatbázis felhasználó jelszavát:

-rw-r----- root root /etc/exim4/conf.d/main/00_vexim_domains

hide mysql_servers = localhost::(/var/run/mysqld/mysqld.sock)/vexim/vexim/PASSWORD
[...]

VExim patch

A VExim 2.2.1 változata sajnos tartalmaz néhány hibát, és ezeket a szerző a honlap szerint csak a 3.x-ben fogja kijavítani. A vexim-addons csomag tartalmaz néhány javítást, amelyet a szerző PHP állományainak foltozásával érvényesíthetünk. Ehhez telepítsük a patch Debian csomagot (ha még nem lenne telepítve):

apt-get install patch    # nincs függősége, nem hoz sallangokat
mount -o remount,rw /usr # továbbra is írni kell ide

és alkalmazzuk a vexim-addons csomagban található patch-et (gondosan ügyeljünk a 2_2_1 verziószámra!):

patch -p0 -d /usr/local/share/vexim </root/tmp/vexim-2_2_1-vexim-addons.patch

A foltozás:

  • kijavítja az aliasnak adott jelszó feldolgozásánál a field eltéréseket;
  • kijavít egy szépséghibát (username@domain egy sorba kerül) a VExim login webfelületén.

A csomagban van még egy javított check.gif kép, ezt másoljuk a VExim képkönyvtárába:

cp /root/tmp/check.gif /usr/local/share/vexim/images

Sajnos a patch elrontja a jogokat (TODO!), ezért ezeket állítsuk helyre:

find /usr/local/share/vexim/* -type d -exec chown root:www-data {} \; -exec chmod 2750 {} \;
find /usr/local/share/vexim/* -type f -exec chown root:www-data {} \; -exec chmod 640 {} \;

Gyorsteszt

A beállítások a

/usr/sbin/update-exim4.conf; /etc/init.d/exim4 reload

parancs lefuttatásával érvényesíthetőek.

Gyorstesztként a webfelületen a siteadmin hozzáféréssel belépve definiáljunk egy domaint, majd annak postmastereként belépve hozzunk létre postafiókot (létre kell jönnie a /var/mail/.vexim/domain/user/Maildir alatti könyvtárszerkezetnek, a new directoryban egy üdvözlő levéllel), aliast, valamint állítsuk be a mindent fogadót is. Ezután a parancssorban kiadott

exim4 -bt user@domain

parancsokkal szimulálhatunk az adott címre beérkező levelet, és ellenőrizhetjük, hogy mi lenne a sorsa. Megfelelő szimulált kézbesítés esetén az adatbázis kapcsolat rendben van és a vexim-addons kiegészítők működnek.

A valódi kézbesítés teszteléséhez szükséges, hogy a teszt domain DNS MX rekordja a telepítés alatt álló szerverre mutasson. Ez esetben a teszt domain-re küldött leveleknek a megfelelő postafiókokhoz tartozó maildir-ekben meg kell jelenniük, illetve (ha nem létezik a címzett és nincs beállítva mindent fogadó) vissza kell pattanniuk.

Sikeres tesztelés esetén a levélfogadás és annak adminisztrációja be van állítva, a továbbiakban a fogadott levelek kezelését és a levélküldést állítjuk be.

Figyelem: az Exim 4.67-2 változatában (Etch -> Lenny) megváltoztatták a debconf értelmezését, így jelenleg nem lehet a korábbi módon összefésülni az itt, illetve a VEximben felvett local, relay, stb. domainek listáját. Emiatt a localhost-tól különböző helyi domaineket legalább aliasként, és persze az összes debconf-ban beállított relay domaint is fel kell majd venni a VExim-ben.

A Courier IMAP és POP3 telepítése és beállítása

A fogadott levelek kezelését a Courier biztosítja. Rendszergazdaként, Debian csomagból telepítjük:

apt-get install courier-imap-ssl courier-pop-ssl courier-authlib-mysql gamin
# az ssl-csomagok hozzák a nekünk szükséges függőségeket is

A Debconf kérdésére válasszuk a web adminisztrációs mappák létrehozatalának mellőzését (a Courier adminisztrációja üzemszerű használatkor nem szükséges). A konfigurálatlan Courier-t állítsuk le, és a /usr-t átmenetileg csatoljuk írhatóan (a certificate generátor számára - TODO!):

/etc/init.d/courier-authdaemon stop; \
/etc/init.d/courier-imap stop; /etc/init.d/courier-imap-ssl stop \
/etc/init.d/courier-pop stop; /etc/init.d/courier-pop-ssl stop
mount -o remount,rw /usr

Tanúsítványok

A telepítés a localhost számára készíti el az SSL démonok tanusítványát, amit célszerű a használandó hostnévvel (és egyéb adatokkal) újrageneráltatni. Ehhez szerkesszük meg a /etc/courier/imapd.cnf és /etc/courier/pop3d.cnf állományokat, amelyekben a [req dn] szakaszt célszerű kijavítani:

-rw------- daemon daemon /etc/courier/imapd.cnf
-rw------- daemon daemon /etc/courier/pop3d.cnf

[...]
[ req_dn ]
C=HU
ST=BP
L=Budapest
O=MY COMPANY
OU=Email services
CN=FULLY.QUALIFIED.HOSTNAME
emailAddress=sysadmin@FULLY.QUALIFIED.HOSTNAME
[...]

Lényeges, hogy a FULLY.QUALIFIED.HOSTNAME konzisztensen legyen kitöltve (a

hostname --fqdn

kimenete - azaz a szerver alapértelmezett teljes gépneve, amely a webmail és a VExim által használt Apache tanúsítvánnyal konzisztens - jó lehet). A cégnevet (MY COMPANY) is helyettesítsük a sajátunkkal.

Ezután a meglévő certificate-ek letörlése után meg kell hívni a generátor scriptet:

rm /etc/courier/imapd.pem; /usr/lib/courier/mkimapdcert
rm /etc/courier/pop3d.pem; /usr/lib/courier/mkpop3dcert

amely egy évig érvényes, self-signed tanúsítványokat fog előállítani.

Egészítsük ki a /etc/cron.daily/check_active_certs scriptet úgy, hogy a tanúsítványok lejáratának napi ellenőrzése terjedjen ki a Courier tanúsítványaira is:

-rwxr-xr-x root root /etc/cron.daily/check-active-certs

[...]
COURIER_CERTS=""
if [ -e '/etc/courier/imapd-ssl' ]; then
  COURIER_CERTS="$COURIER_CERTS $(command grep --no-filename '^TLS_CERTFILE=' '/etc/courier/imapd-ssl' \
                                | command sed -e 's/^.*TLS_CERTFILE=//' -e 's/^[\t ]*//' -e 's/[\t ]*$//')"
fi
if [ -e '/etc/courier/pop3d-ssl' ]; then
  COURIER_CERTS="$COURIER_CERTS $(command grep --no-filename '^TLS_CERTFILE=' '/etc/courier/pop3d-ssl' \
                                | command sed -e 's/^.*TLS_CERTFILE=//' -e 's/^[\t ]*//' -e 's/[\t ]*$//')"
fi

[...]
ACTIVE_CERTS="$(echo "${APACHE2_CERTS}
${LIGHTTPD_CERTS}
${COURIER_CERTS}
${CYRUS_CERTS} 
[...]

Ezután a Courier tanúsítványok lejárata előtt 30 nappal (majd ezután naponta) figyelmeztető emailt kapunk. Ez elég időt hagy a felhasználók értesítésére és a tanúsítványok megújítására.

MySQL kapcsolat

Ezt követően állítsuk be, hogy a Courier a VExim MySQL adatbázisa alapján authentikáljon:

-rw-rw---- daemon daemon /etc/courier/authdaemonrc

[...]
#authmodulelist="authpam"                                                                               
authmodulelist="authmysql"
[...]

és ehhez a VExim MySQL adatbázisából vegye a felhasználói profil adatokat:

mv /etc/courier/authmysqlrc /etc/courier/authmysqlrc.bak
touch /etc/courier/authmysqlrc
chown daemon:daemon /etc/courier/authmysqlrc; chmod 660 /etc/courier/authmysqlrc
mcedit /etc/courier/authmysqlrc

Ne feledjük beírni a vexim MySQL felhasználó jelszavát!

-rw-rw---- daemon daemon /etc/courier/authmysqlrc

# Courier and VExim integration

MYSQL_SERVER            localhost
MYSQL_USERNAME          vexim
MYSQL_PASSWORD          PASSWORD
MYSQL_PORT              3306
MYSQL_DATABASE          vexim
MYSQL_USER_TABLE        users
MYSQL_UID_FIELD         uid
MYSQL_GID_FIELD         gid
MYSQL_LOGIN_FIELD       username
MYSQL_CRYPT_PWFIELD     crypt
MYSQL_HOME_FIELD        pop
MYSQL_NAME_FIELD        realname
MYSQL_QUOTA_FIELD       quota

A Courier démonok saját beállításai

Az imap, imaps, pop3 és pop3s démonok alapértelmezett beállításai közül az egyszerre használatba vehető démonok számát és az egy IP-ről engedélyezett kapcsolatok maximális számátis érdemes felemelni az imap:

-rw-r--r-- root root /etc/courier/imapd

[...]
MAXDAEMONS=200
[...]
MAXPERIP=200
[...]

és a pop3 démon esetében is:

-rw-r--r-- root root /etc/courier/pop3d

[...]
MAXDAEMONS=40
[...]
MAXPERIP=40
[...]

A Courier logok átirányítása

A Debian telepítésben a Courier számára nincsenek külön logok, valamennyi daemonja a syslog facility(mail)-re küldi a naplóit, amelyek így a /var/log/mail-ben gyűlnek. Mivel a log terjedelmes lehet és (esetleges account visszaélések tisztázására) érdemes lehet tovább megőrizni, mint a mail naplót, az alábbiakban a Courier logolását leválasztjuk a mail logról és egy külön könyvtárba tesszük.

Hozzuk létre a naplókönyvtárat:

mkdir /var/log/courier; chown root:adm /var/log/courier; chmod 750 /var/log/courier

Írjuk elő a syslog-ng számára, hogy az authdaemond, imapd, imapd-ssl, pop3d, pop3d-ssl daemonok által készített (bármilyen) naplóbejegyzések a var/log/courier/courier.log naplóállományba menjenek, és máshova ne. Ehhez szerkesszük meg a /etc/syslog-ng/syslog-ng.conf file-t, és szúrjuk be a destination section végére a logfile definíciót:

-rw-r--r-- root root /etc/syslog-ng/syslog-ng.conf

# Courier separate logging
destination d_courier
{
  file ("/var/log/courier/courier.log"
  owner(root)
  group(adm)
  );
};

Ugyanitt a filter section végére a szűrőfeltételt:

-rw-r--r-- root root /etc/syslog-ng/syslog-ng.conf

# Courier separate logging
filter f_courier
{
  program("authdaemond\|imapd\|imapd-ssl\|pop3d\|pop3d-ssl");
};

Végül a log paths elejére (azért az elejére, hogy a flags(final); direktíva leállítsa a további logokba naplózást):

-rw-r--r-- root root /etc/syslog-ng/syslog-ng.conf

# Courier separate logging
log
{
  source (s_src);
  filter (f_courier);
  destination (d_courier);
  flags(final);
};

A változtatások érvényesítéséhez indítsuk újra a syslog-ng-t:

invoke-rc.d syslog-ng restart

Ezután a Courier is elindítható:

/etc/init.d/courier-authdaemon start; \
/etc/init.d/courier-imap start; /etc/init.d/courier-imap-ssl start; \
/etc/init.d/courier-pop start; /etc/init.d/courier-pop-ssl start

Gondoskodjunk az új log rotálásáról:

-rw-r--r-- root root /etc/logrotate.d/courier

# Courier separate logging handler

/var/log/courier/*.log {
  rotate 30
  daily
  compress
  missingok
  notifempty
  create 0640 root adm
}

A fenti schedule 30 napig őrzi meg a logokat, ezt szükség szerint módosítsuk.

Shorewall (tűzfal) beállítások

A kiszolgált (pl. helyi hálózat, lan; illetve Internet net) zóna felől az IMAP és POP3 kapcsolódást a szerverhez engedélyezni kell (célszerű lehet az Internet felől csak az ssl változatok engedélyezése):

-rw-r----- root root /etc/shorewall/rules

[...]
#IMAP/ACCEPT    lan     fw
IMAPS/ACCEPT    all     fw
#POP3/ACCEPT    lan     fw
POP3S/ACCEPT    all     fw
[...]

Megjegyzés: ha a helyi és Internet forgalmat a szerver elé helyezett tűzfal illetve router választja szét és NAT-ol, egyszerűbb lehet az imap/imaps illetve pop3/pop3s szelekciót teljesen erre bízni, és mindkét szolgáltatást engedélyezni az all zónára.

A beállítás után a tűzfalat újra kell indítani:

/etc/init.d/shorewall restart

A Courier bejegyzése a Tiger által ismert démonok közé

Az IMAP szerverek (wrapper) démonjai állandóan futnak, valamint az imap és imaps portokat figyelik, így a biztonsági figyelmeztetések elkerülése érdekében be kell jegyezni azokat a tigerrc állományba:

-rw-r--r-- root root /etc/tiger/tigerrc

[...]
Tiger_Listening_ValidProcs='[...]couriertcpd|portmap[...]'
[...]
Tiger_Running_Procs='[...] /usr/sbin/courierlogger /usr/sbin/couriertcpd [...]'

Logcheck beállítások

Szabálymódosításra nincs szükség, de célszerű helyreigazítani a maintainer által nem teljesen jól beállított jogosultságokat:

chown root:logcheck /etc/logcheck/ignore.d.server/*
chmod 640 /etc/logcheck/ignore.d.server/*

Monitorozás Muninnal

TODO!

Fail2Ban integráció

A [Fail2Ban] segítségével automatikusan kitilthatjuk a túl gyakran és sikertelenül próbálkozókat (ezek általában dictionary attack botok). A telepített fail2ban már tartalmazza a szükséges szabályokat, így csak aktiválni kell a szűrőt, azonban érdemes liberálisabb próbálkozási lehetőség számot és kitiltási időt beállítani. Amennyiben van belhálózat, ennek publikus IP-jét vagy IP tartományát (az ignoreip = után space-szel elválasztott felsorolás) feltétlenül hagyassuk figyelmen kívül (különben pl. egy tesztgép beállítása az egész iroda számára átmenetileg elérhetetlenné teheti a levelezést):

-rw------- root root /etc/fail2ban/jail.local

[...]
[courierauth]
enabled = true
ignoreip = 127.0.0.1/16 IP.IP.IP.IP
maxretry = 10
bantime = 180

A beállítások a fail2ban újraindításával érvényesíthetőek:

invoke-rc.d fail2ban stop; sleep 1; invoke-rc.d fail2ban start; tail -f /var/log/fail2ban.log

Ha telepítve van a fail2ban_all_jails Munin plugin, az aktivált courierauth jail adatai ott is megjelennek.

Gyorsteszt

A postafiókok mappakezelésének teszteléshez a vexim-addons által telepített segédprogrammal készítsük el a korábban létrehozott teszt domain postmaster felhasználójnak M$ Exchange-kompatibilis mappastuktúráját az alábbiak szerint:

maildir-exchange /var/mail/.vexim/MYDOMAIN/postmaster/Maildir

Ez létrehozza a meglévő Inbox mellett a Drafts, Sent és Trash IMAP mappákat is.

Ezután egy, a telepítés alatti szervert IMAPs protokollon elérő munkaállomás levelezőprogramjával a teszt domain postmaster felhasználójának nevében kapcsolódjunk a szerverhez, és iratkozzunk fel az IMAP mappákra! Látnunk kell a beérkezett teszt levele(ke)t. Működnie kell új mappa illetve mappastruktúra létrehozatalának, a meglévő levelek átmozgatásának, törlésének. A levélküldés még nincs beállítva, így azt egyelőre ne teszteljük.

TODO!

A Squirrelmail telepítése és beállítása

A Squirrelmail egy webfelületű IMAP kliens, használatához működő IMAP szerver szükséges (ezért a Courier beállítása után érdemes telepíteni). Debian csomagból, rendszergazdaként telepíthető:

apt-get install squirrelmail squirrelmail-locales squirrelmail-viewashtml

Telepítés után a (konfigurálatlan) Squirrelmail webfelülete még nem látszik, mert nincs rámutató Apache bejegyzés. Noha a maintainer az aliassal történő publikációt javasolja, az admin felülettel közös virtualhost miatt ebben a leírásban symlinkelt megoldás szerepel (kivéve a plugins könyvtárat, amelybe 3rd party is bővítmények kerülhetnek). A korábban létrehozott virtualhost gyökerébe belépve készítsük el a symlinkeket:

cd /var/www/FULLY.QUALIFIED.HOSTNAME
ln -s /usr/share/squirrelmail/* .
find . -type l -exec chown -h webadmin:www-data {} \;

Squirrelmail saját beállítások

A Squirrelmail konfigurációjára a /etc/squirrelmail/conf.pl scriptet érdemes használni (konzol). Fontosabb beállítások:

  • D. Set pre-defined settings for specific IMAP servers - courier
  • 2. Server settings - 1. Domain - domain név beállítása(?)
  • 10. Languages - 1. Default Language - hu_HU; 2. Default Charset - utf-8; 3. Enable lossy encoding - true

A script használata mellett a /etc/squirrelmail/config_local.php állományban is lehetséges beállításokat definiálni. Itt válasszunk egy talán nem túlságosan csúnya alapértelmezett skint:

-rw-r--r-- root root /etc/squirrelmail/config_local.php

// Default skin
$theme_css = SM_PATH . 'themes/css/verdana-10.css';
$theme_default = 38;

Apache-2

Szerkesszük tovább a virtualhost (a VExim beállításánál már elkezdett) apache-2 konfigurációját, ebben:

  • engedélyezzük a symlinkek követését
  • kikapcsoljuk a POST tartalom (levéltartalom) ModSecurity ellenőrzését
  • engedélyezzük a PHP futtatást
  • kikapcsoljuk a magic-quotes minden formáját
  • vegyük fel az open_basedir sorba a /etc/squirrelmail, /usr/share/squirrelmail, /var/lib/squirrelmail/data és /var/spool/squirrelmail/attach könyvtárakat
  • engedélyezzük a LANG és TZ könyezeti változók beállítását
  • engedélyezzük a feltöltést 10 MB határig (webmail attachment miatt)
  • előkészítjük a configtest.php localhostra korlátozását
  • szigorítjuk a lehetőségeket a webmail attachment mappában
-rw-r--r-- root root /etc/apache2/sites-available/FULLY.QUALIFIED.HOSTNAME

<VirtualHost *:80 >
    [...]
    # PHP policy settings.
    <IfModule mod_php4.c>
#       PHP4 is not supported!
        php_admin_flag engine off
    </IfModule>     
    <IfModule mod_php5.c>
        php_admin_flag engine on
        php_admin_value safe_mode_allowed_env_vars PHP_,LANG,TZ
        php_admin_flag magic_quotes_runtime off
        php_admin_flag magic_quotes_gpc off
        php_admin_flag magic_quotes_sybase off
        php_admin_value open_basedir /var/www/FQHN/:/usr/share/php/:/etc/squirrelmail/:/usr/share/squirrelmail/:/var/lib/squirrelmail/data/:/var/spool/squirrelmail/attach/
        #php_admin_value include_path .:/usr/share/php5/
        php_admin_value safe_mode_exec_dir bin/
        php_admin_flag file_uploads on
        php_admin_value upload_max_filesize 10M
        php_admin_value post_max_size 10M
        php_admin_value upload_tmp_dir /var/spool/squirrelmail/attach
        [...]
   </IfModule>
   [...]
    # ModSecurity settings (entire virtualhost).
    <IfModule security2_module>
        [...]
        # Uncomment to swich off POST payload scanning.
        SecRequestBodyAccess Off
        [...]
    </IfModule>
   [...]
   # Virtualhost itself.
   <Directory /var/www/FULLY.QUALIFIED.HOSTNAME>
        Allow from all
        AllowOverride Limit
        Options +FollowSymLinks
#       Options +SymLinksIfOwnerMatch
        <Files configtest.php>
            order deny,allow
#           deny from all
#           allow from 127.0.0.1
        </Files> 
    </Directory>
    [...]
    # Application-specific upload folder (writable by www-data)
    <Directory /var/spool/squirrelmail/attach>
        Allow from all
        AllowOverride none
        AddType text/plain .html .htm .shtml
        Options -FollowSymLinks
        Options -SymLinksIfOwnerMatch
        <IfModule mod_php4.c>
            php_admin_flag engine off
        </IfModule>
        <IfModule mod_php5.c>
            php_admin_flag engine off
        </IfModule>
    </Directory>
[...]

A webszerver konfiguráció újraolvastatásával a Squirrelmail használatba vehető:

invoke-rc.d apache2 reload

Ezután egy, a telepítés alatti szervert https protokollon elérő kliensgép grafikus böngészőjében hívjuk be a http://FQHN/src/configtest.php weboldalt! A https-re váltás után egy összefoglaló felsorolás jelenik meg, jó esetben a Congratulations, your SquirrelMail setup looks fine to me! végeredménnyel :-). Siker esetén az apache-2 konfigurációbeli commentek eltávolításával zárjuk le a tesztoldalhoz történő hozzáférést és olvastassuk újra a webszerver konfigurációját.

Gyorsteszt

A Squirrelmail bejelentkező oldalának eléréséhez hívjuk be a http://FULLY.QUALIFIED.HOSTNAME weboldalt, ahonnan be kell tudnunk jelentkezni a VExim gyorstesztben felvett domainbeli felhasználók postafiókjaiba, és működnie kell a webmailen keresztüli email küldésnek is.

Squirrelmail pluginok telepítése és beállítása

A Squirrelmail funkcionalitása számos beépülő modul (plugin) telepítésével módosítható, kiegészíthető. Ezek jelentős része közösségi fejlesztésű, így ügyeljünk arra, hogy csak megbízható helyről - a Debian terjesztésből vagy a Squirrelmail gyűjteményéből - származó pluginokat telepítsünk.

Sajnos a symlinkelt megoldásban a Debian terjesztésben nem szereplő pluginokat is a /usr/share/squirrelmail/plugins könyvtárba kell telepítenünk (a /usr írható újracsatolása után, minden plugin külön könyvtárba kerüljön) - (TODO: per-virtualhost megoldás!). A kívánt pluginok kicsomagolása után ne felejtsük el beállítani megfelelő jogosultságokat:

find plugins -type d -exec chown root:root {} \; -exec chmod 755 {} \;
find plugins -type f -exec chown root:root {} \; -exec chmod 644 {} \;
# chown -R root:root plugins # is elég lehet

Telepítés után a plugin könyvtárában lévő dokumentációból tájékozódjunk, hogy van-e szükség speciális beállításra. Az esetleges konfigurációs állományt - ha erre a plugin lehetőséget ad - igyekezzünk a /etc/squirrelmail/config könyvtárba tenni, mert így azt az esetleges frissítések nem bántják. A telepített pluginokat legegyszerűbben a /etc/squirrelmail/conf.pl scripttel lehet engedélyezni [8. Plugins].

Igény szerint érdemes lehet a következő pluginokat telepíteni:

Add graphics

A pluginnal custom (akár mail domainenként is különböző) logót jeleníthetünk meg a felhasználói felületen a mappalista felett.

Captcha

A pluginnal lehetséges a belépési űrlap captcha védelme az űrlapkitöltő robotok ellen.

  • Töltsük le a plugint, csomagoljuk ki, állítsuk be a jogosultságokat.
  • Készítsünk egy beállító állományt a config_exapmle.php template lemásolásával, és ebben válasszunk ki egy captcha generátor backendet:
cp -p /usr/share/squirrelmail/plugins/captcha/config_example.php /etc/squirrelmail/config_captcha.php

-rw-r--r-- root root /etc/squirrelmail/config_captcha.php

   [...]
   $captcha_backend = 'watercap';
   [...]
  • Engedélyezzük a plugint, ezután a belépő képernyőn meg kell jelennie a captcha védelemnek.
Compatibility

Számos plugin igényli ezt a Squirrelmail változatok közötti különbséget elfedő technikai kiegészítőt.

  • Töltsük le - a plugint, csomagoljuk ki, állítsuk be a jogosultságokat.
  • Speciális beállítás nem szükséges, engedélyezzük a plugint.
Login notes

Ezzel a pluginnal custom logót illetve HTML kódrészletet jeleníthetünk meg a belépési képernyőn.

Shared folders

Ez a plugin felhasználói felületet ad a Courier ACL-ek mappánkénti beállítására, amelyekkel mappáink más felhasználók számára történő megosztását vezérelhetjük.

Figyelem: pusztán a plugin telepítése nem kapcsolja be a Courier szerver oldali megosztásait, csak kezelőfelületet ad a már bekapcsolt megosztások felhasználónkénti beállítására!

  • Töltsük le a plugint, csomagoljuk ki, állítsuk be a jogosultságokat.
  • Készítsünk egy beállító állományt a config_sample.php template lemásolásával - az alapértelmezések egyelőre megfelelőek:
cp -p /usr/share/squirrelmail/plugins/useracl/config_sample.php /usr/share/squirrelmail/plugins/useracl/config.php
  • Engedélyezzük a plugint, ezután a felhasználói felületen megjelenik a Shares menüpont.
TNEF decoder

Ez a plugin lehetőséget ad az Outlook által generált winmail.dat csatolmányok megtekintésére.

  • Töltsük le a plugint, csomagoljuk ki, állítsuk be a jogosultságokat.
  • Készítsünk egy beállító állományt a config_sample.php template lemásolásával - az alapértelmezések egyelőre megfelelőek:
cp -p /usr/share/squirrelmail/plugins/tnef_decoder/config_example.php /etc/squirrelmail/config_tnef_decoder.php
  • Engedélyezzük a plugint.
View as HTML

A plugin lehetőséget ad a HTML formázott levelek megjelenítésére a levélbetekintőben.

  • A Debian terjesztés része, külön telepíteni illetve beállítani nem kell, elég engedélyezni.
  • Használatát igény szerint globális alapértelmezéssé tehetjük a default_pref állományban:
-rw-r--r-- root root /etc/squirrelmail/default_pref

[...]
show_html_default=1
Virtual keyboard

A plugin segítségével az esetleges keyloggerek megkerülésére egérkattintással kezelhető, jelszóbevitelre alkalmas virtuális billentyűzetet jeleníthetünk meg a belépési képernyőn. Hasznos lehet akkor, ha a felhasználók közös munkaállomásokról (kioszk, IT kávézó, stb.) is igénybe veszik a webmail szolgáltatást.

  • Töltsük le a plugint, csomagoljuk ki, állítsuk be a jogosultságokat.
  • Készítsünk egy beállító állományt a config.php.sample template lemásolásával. Ebben kiválaszthatnánk a magyar billentyűkiosztást, de az sajnos nem jól jelenik meg (TODO!) és érdemes a virtuális billentyűzet linkjét kisebb betűméretűre venni:
cp -p /usr/share/squirrelmail/plugins/vkeyboard/config.php.sample /usr/share/squirrelmail/plugins/vkeyboard/config.php

-rw-r--r-- root root /usr/share/squirrelmail/plugins/vkeyboard/config.php

[...]
// Message size [xx-small|x-small|small|medium|large|x-large|xx-large]

$vkeyboard_msgsize = 'small';

// Keyboard layout (layouts in layouts directory)

$vkeyboard_layout = 'us_english';
[...]
  • Engedélyezzük a plugint és próbáljuk ki a virtuális billentyűzetet.

Az Exim beállítása a levéltovábbításhoz

A beállítás lényege, hogy az Exim a localhoston kívülről csak TLS-en (titkosításon) keresztül és a Courier által authentikált felhasználónévvel azonosítva továbbítson levelet. A titkosításnak két módja is létezik: a régebbi (TCP:465 smtps) protokoll esetén a titkosítás már az SMTP chat előtt elkezdődik, míg a modernebb (TCP:25 tls) változatnál a kliens az SMTP chat során kezdeményezi a titkosított sessiont (ez utóbbinak előnye, hogy így ugyanazon TCP porttal és protokollal lehet titkosított és nem titkosított kommunikációt is folytatni). Az alábbi beállítás mindkettőt támogatja.

Megjegyzés: az smtps előnye, hogy míg az ISP-k a spam elleni küzdelem jegyében a TCP:25-ös porti forgalmat blokkolni szokták, a TCP:465-öt általában engedik, így a szerveren keresztüli levélküldés ennek használatával ISP-független lehet.

SSL beállítása

Első lépésként létre kell hoznunk egy SSL tanúsítványt. Indítsuk el az alábbi scriptet:

/usr/share/doc/exim4-base/examples/exim-gencert

és válaszoljunk a kérdésekre:

Country Code (2 letters) [US]:HU
State or Province Name (full name) []:Budapest
Locality Name (eg, city) []:Budapest
Organization Name (eg, company; recommended) []:YOUR COMPANY
Organizational Unit Name (eg, section) []:Mail services
Server name (eg. ssl.domain.tld; required!!!) []:FULLY.QUALIFIED.HOSTNAME
Email Address []:sysadmin@MYDOMAIN
[*] Done generating self signed certificates for exim!

Ennek hatására az /etc/exim4 könyvtárban létrejön a tanúsítvány:

-rw-r----- root Debian-exim /etc/exim4/exim.crt
-rw-r----- root Debian-exim /etc/exim4/exim.key

Ezután bekapcsolhatjuk az SSL funkcionalitást. Ehhez a vexim-addons által telepített /etc/exim4/conf.d/main/00_exim4-config_custom_settings állományban változtassuk a MAIN_TLS_ENABLE értékét true-ra - ugyanebben az állományban már be van állítva, hogy az smtps porton még az SMTP chat előtt történjék meg a titkosítás (tls_on_connect_ports):

-rw-r--r-- root root /etc/exim4/conf.d/main/00_exim4-config_custom_settings

[...]
# SMTPs support
MAIN_TLS_ENABLE = true
tls_on_connect_ports = 465
[...]

Írjuk elő, hogy az Exim az smtps protokoll portján (TCP:465) is figyeljen:

-rw-r--r-- root root /etc/default/exim4

[...]
# options for daemon listening on port 25
#SMTPLISTENEROPTIONS=''
SMTPLISTENEROPTIONS='-oX '465:25' -oP /var/run/exim4/exim.pid'

SMTP authentikáció beállítása Courier authdaemon használatával

Ehhez fel kel venni a Debian-exim felhasználót a daemon csoportba mert az authdaemon socketjéhez csak root vagy daemon groupnak van hozzáférése (TODO: megondolni, hogy ez jelent-e biztonsági kockázatot!):

adduser Debian-exim daemon

Ezután már érvényesül a vexim-addons által telepített (a /etc/exim4/conf.d/auth/30_exim4-config_examples példaállomány alapján készített) /etc/exim4/conf.d/auth/30_exim4-config_courier authentikációs állomány. A beállítás érvényesítéséhez generáltassuk újra a konfigurációt és indítsuk újra az Eximet:

/usr/sbin/update-exim4.conf; /etc/init.d/exim4 restart

Shorewall (tűzfal) beállítások

A kiszolgált zóna felől az SMTPs kapcsolódást is engedélyezni kell:

-rw-r----- root root /etc/shorewall/rules

[...]
SMTPS/ACCEPT    all     fw
[...]

A beállítás után a tűzfalat újra kell indítani:

/etc/init.d/shorewall restart

Gyorsteszt

TODO!

Spam és malware szűrés

TODO!

Mentés és archiválás

Amanda task

Javasolt Amanda task:

-rw-r----- backup backup /etc/amanda/[MAILTASK]/disklist

[...]
FULLY.QUALIFIED.HOSTNAME /etc/courier                      hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /etc/exim4                        hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /etc/squirrelmail                 hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /usr/local/share/vexim2           hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /var/backups/mysql/vexim          hard-disk-tar-full
FULLY.QUALIFIED.HOSTNAME /var/lib/squirrelmail             hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /var/log/courier                  hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /var/log/exim4                    hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /var/mail/.vexim                  hard-disk-comp
FULLY.QUALIFIED.HOSTNAME /var/www/FULLY.QUALIFIED.MAILNAME hard-disk-comp

Ellenőrzés:

su backup -c "/usr/sbin/amcheck "[MAILTASK]"

Adminisztráció

Domain, domain alias felvétele

A VExim adminisztrációs webfelületén, siteadmin belépéssel.

Felhasználó (illetve alias, catchall, fail) felvétele

A VExim adminisztrációs webfelületén, domain admin (alapértelmezésben postmaster) belépéssel. Ügyeljünk arra, hogy a VExim jelenleg csak az inboxot hozza létre, ezért a létrehozatal után érdemes a webfelületen a felhasználó nevében belépni, mert így a Squirrelmail létrehozza a szokásos (Exchange-like, Inbox-Drafts-Sent-Trash) maildir szerkezetet. Alternatíva a maildir-exchange parancs konzolról meghívása (TODO: automatizálni!).

Felhasználó törlése

A VExim adminisztrációs webfelületén, domain admin (alapértelmezésben postmaster) belépéssel. A VExim csak a felhasználóhoz kapcsolódó adatbázis-rekordokat törli, így a levelező tárhely törlését manuálisan kell elvégezni (TODO: automatizálni!)!

Elfelejtett jelszó

A VExim adminisztrációs webfelületén, a keresettnél eggyel magasabb szintű (felhasználó: postmaster, postmaster: siteadmin) belépéssel megváltoztatható a jelszó. Javasolt ezt mindig megbízható (saját) gépen (és nem a felhasználó gépén!) végezni és a felhasználót az így adott jelszónak azonnali megváltoztatására figyelmeztetni. Elveszett siteadmin jelszó konzolról, adatbázis módosítással változtatható meg (az alapértelmezett CHANGE jelszóhoz tartozó hash kinyerhető a /usr/local/share/vexim2/setup/mysql.sql állományból).

Irodalom