VExim alapú levelező szerver (Jessie)

Innen: AdminWiki

Fejlesztés alatt, hiányos, lehet benne zsákutca - ne vedd komolyan!

A megoldás vázlata

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;
  • Exim4 heavy (mail transfer agent, MTA);
  • ClamAV (malware scanner);
  • SpamAssassin (spam scanner);
  • VExim2 Plus (a fentiek működését vezérlő MySQL adminisztráció LAMP webfelületen);

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.

  • Dovecot (IMAP, POP3 szerverprogram postafiókok kezeléséhez);
  • RoundCube (webfelületű IMAP kliens).

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 VExim2 Plus telepítője végzi.

Az exim4-daemon-heavy telepítése

Az alapértelmezetten települő Exim4 (light) nem tartalmazza a MySQL kezeléshez és a külső (antimalware és spam) scannerekhez szükséges kiegészítéseket, így ezt le kell cserélnünk a teljes funkcionalitású exim4-daemon-heavy csomagra:

apt-get install exim4-daemon-heavy

Ezután ellenőrizzük az Exim beállításait:

mount -o remount,exec /var
dpkg-reconfigure exim4-config
  • internetes gép konfiguráció;
  • mail host név maradhat alapértelmezett (külön fogjuk beállítani);
  • az SMTP figyeljen minden IP-n, ne csak localhoston (tényleges levélfogadás lehetősége);
  • saját domainek listája maradhat alapértelmezett (VExim fogja kezelni);
  • relay domainek listája maradhat alapértelmezetten üres (VExim fogja kezelni);
  • relay hostok listája maradhat alapértelmezetten üres (VExim fogja kezelni);
  • DNS kérésekkel nem szükséges takarékoskodni;
  • a helyi kézbesítési mód legyen hagyományos mailbox (nem Maildir);
  • legyen sok kis beállítóállomány.

Ellenőrizzük továbbá, hogy a szerver milyen FQHN-vel (Fully Qualified HostName) jelentkezik be levélküldéskor:

echo "Teszt" | mail -s Teszt helocheck@cbl.abuseat.org; tail -f /var/log/exim4/mainlog

Ez egy azonnal visszapattanó levelet eredményez, amelybe a helocheck beleírja az általunk ténylegesen használt FQHN-et. Ha ez nem egyezne meg a

dig -x IP.IP.IP.IP # szerver publikus IP címe

paranccsal megtudható reverse-zel, akkor manuálisan állítsuk be a helyes (reverse) FQHN-et. Ehhez készítsük el az alábbi extra konfigurációs állományt:

-rw-r--r-- root root  /etc/exim4/conf.d/main/99_exim4-config_custom_settings
[...]
# Custom settings - nor provided by maintainer,
# nor customizable by Debian automagic

REMOTE_SMTP_HELO_DATA = "helyes.reverse.FQHN"

Érvényesítsük a beállításokat és ismételjük meg a helocheck tesztet:

/usr/sbin/update-exim4.conf; systemctl reload exim4
echo "Teszt" | mail -s Teszt helocheck@cbl.abuseat.org; tail -f /var/log/exim4/mainlog

Siker esetén állítsuk helyre a /var szigorú csatolását:

mount -o remount /var

A ClamAV telepítése

VExim Plus telepítése

A VExim Plus a jelen megoldás egyetlen, saját fejlesztésű (nem Debian) komponense. Alapját a 2002 óta fejlesztett Virtual Exim szoftver 2014 májusi állapotú kódbázisa képezi, amelyet gyakorlatilag teljesen átírtam.

A kódkészlet telepítése

Még alakul!

Töltsük le a vexim-plus legfrissebb változatát, és tartalmát rendszergazdaként, a /usr írhatóan újracsatolása után, a könyvtárszerkezet és a jogosultságok megtartásával csomagoljuk ki! Ezután (még minidg írható /usr mellett) indítsuk el a telepítő scriptet a

/usr/local/share/vexim-plus/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, bYYYYMMDD az aktuális build 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 (a symlinket a telepítő lefutása után készíthetjük el):

# Symlink az aktuális verzióra
ln -s vexim-versions/vexim2+-X.Y-bYYYYMMDD /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).