Virenschutz für Server

04.06.2007 von Achim Wagenknecht
Auch wenn Viren bislang kein Thema sind, müssen Linux-Server zumindest dagegen gesichert werden, Windows-Viren zu verbreiten. Schutz versprechen Dazuko und Amavis.

Um Linux-Server vor Viren und Spam zu schützen, arbeiten mehrere Module Hand in Hand zusammen. Die wichtigsten sind Dazuko für den Dateizugriff und Amavis als Schnittstelle zur E-Mail-Filterung. An Amavis können zudem auch Spamfilter andocken.

Viren-Kernkompetenz mit Dazuko

Dazuko kommt trotz des exotischen Namens (die Kurzform von Datenzugriffskontrolle) aus Deutschland. Das Open-Source-Kernel-Modul wird federführend von Avira entwickelt. Dazuko klinkt sich in den Kernel ein und erlaubt es Drittprogrammen, Dateizugriffe abzufangen und Dateien beim Öffnen oder Schließen zu untersuchen. Damit ermöglicht es den On-Access-Scan, den der ständig aktive Virenwächter im Hintergrund durchführt. Genutzt wird Dazuko von folgenden Produkten:

Mit der aktuellen Distribution von Open Suse 10.2 werden mehrere vorkompilierte Dazuko-Module geliefert, die mit den jeweiligen Kernel-Varianten funktionieren. Unter anderen Distributionen muss das Modul mit den aktuellen Kernelquellen teiweise selbst kompiliert werden.

Wie gut die Erkennungsrate ist, hängt vom eingesetzten Antivirenprodukt ab, für den Test verwendete TecChannel hat das Open-Source-Produkt ClamAV und AVG Antivirus. Das Ergebnis: Die Open-Source-Entwickler haben noch eine Menge Arbeit vor sich, denn ClamAV erkennt deutlich weniger Schadprogramme als das kommerzielle Programm.

Virtuelles Device für Dazuko einrichten

Zunächst wird mit mknod -m 600 /dev/ dazuko c 254 0 ein Device für Dazuko erzeugt. Benutzer und Gruppe für das Gerät werden auf root gesetzt. Dann kopieren Sie das Modul dazuko.ko in den Ordner, der auch die anderen Kernel-Module enthält. In die Konfigurationsdatei für die Module fügen Sie die Zeile alias char-major-254 dazuko ein.

Dazwischen gehen: Mit Hilfe des Kernelmoduls Dazuko können Antivirenprogramme unter Linux jeden Dateizugriff überwachen.

Die Konfiguration finden Sie je nach Distribution unter /etc/modules.conf, /etc/modprobe.conf.local oder an ähnlichen Orten. Der Befehl modprobe dazuko lädt das Modul in den Kernel, mit lsmod|grep dazuko überprüfen Sie den Ladevorgang.

Stolpersteine aus dem Weg räumen

Unter Open Suse klappt die Einbindung nicht immer reibungslos. Je nach Open-Suse-Version weigert sich modprobe, das Modul zu laden. So funktioniert es trotzdem: Wenn sich das Kernelmodul dazuko.ko im Ordner für die Kernelmodule befindet, erneuern Sie die Modulabhängigkeiten mit depmod -a.

Deaktivieren Sie dann SELinux, indem Sie die Grub-Startoptionen unter /boot/grub/menu.1st ändern. Suchen Sie den Eintrag für die aktuelle Kernelversion und fügen Sie am Ende der Zeile selinux=0 hinzu. Das sieht zum Beispiel so aus:

title OpenSuse 10.2
root (hd1,8)
kernel (...Auslassungen...) showopts selinux=0

Startoptionen für Dazuko festlegen

Dann sorgen Sie in den Kernel-Startoptionen dafür, dass Dazuko geladen wird. In /etc/sysconfig/kernel finden Sie einen Eintrag MODULES_LOADED_ON_BOOT="".

Hier fügen Sie die Dazuko-Option ein:

MODULES_LOADED_ON_BOOT="dazuko capability"

Beim nächsten Neustart wird Dazuko geladen. Um das Modul mit ClamAV nutzen zu können, muss ClamAV als root gestartet werden. Dazu deaktivieren Sie in der Datei /etc/clamd.conf die Option User vscan. Am Ende der Datei teilen Sie clamd mit folgendem Block mit, welche Ordner und wie es diese schützen soll:

ClamukoScanOnAccess
ClamukoScanOnOpen
ClamukoScanOnClose
ClamukoScanOnExec
ClamukoIncludePath /
ClamukoExcludePath /proc
ClamukoExcludePath /var/spool/amavis

In diesem Beispiel wird der komplette Server mit zwei Ausnahmen überwacht. Wichtig ist vor allem die letzte Zeile. Hier wird die Mailwarteschlange von Amavis von der Prüfung ausgenommen. Denn sobald Dazuko hier Dateien blockiert, kann Amavis keine Mails mehr prüfen.

Mailserver mit Amavis absichern

Damit die Hersteller von Mailservern und Antivirenprogrammen nicht immer neue Schnittstellen entwickeln müssen, gibt es Amavis. Diese Standard-Schnittstelle schaltet sich zwischen Mail Transport Agents (MTA) und Content-Filter. Die aktuelle Version ist unter http://www.ijs.si/software/amavisd/ zu finden. Es arbeitet mit unterschiedlichen Mail Transfer Agents (MTA) zusammen, kompatibel sind unter anderem Postfix, sendmail und Exim. Folgende Antivirenprogramme funktionieren mit Amavis:

Wer eine aktuelle Open-Suse-Version mit Postfix nutzt, hat scheinbar keine Probleme mit Mailviren. Er kann einfach im Yast-Modul Netzwerkdienste/Mail Transfer Agent die Option Virusüberprüfung aktivieren. Andere Distributionen bieten einen ähnlichen Komfort. Wer sich ausschließlich darauf verlässt, wird eine Enttäuschung erleben, da die Routine in der Praxis alles andere als perfekt arbeitet.

Testumgebungen schaffen Sicherheit

Um herauszufinden, ob ein Mailserver wirklich gegen Viren geschützt ist, muss eine Testumgebung aufgebaut und Viren darüber verschickt werden. Wir haben das mit zwei Linux-PCs namens „links.work“ und „rechts.home“ durchgespielt.

Saubere Sache: Der Mailserver Postfix entfernt Viren mit Hilfe von Amavis aus eingehenden E-Mails.

Auf beiden gibt es einen Benutzer namens „achim“. Damit die Mails von links nach rechts laufen, wird die IP-Adresse des rechten Mailservers im linken MTA als „Ausgehender Mailserver“ eingetragen.

Der rechte MTA wird in Yast konfiguriert, entfernte SMTP-Verbindungen zu akzeptieren, und zwar ohne Virenprüfung. Nun können neue E-Mails von links an die Adresse achim@rechts.home gesendet werden. Die Viren werden in einem Ordner zentral gesammelt und mit einem einfachen Script von links nach rechts verschickt.

Separaten Virenscanner einschalten

Mit deaktiviertem Amavis kommen alle Viren an. Aber auch nach dem Einschalten von Amavis werden immer noch alle Schädlinge ausgeliefert. Ist der Virenschutz also nur ein Placebo? Es zeigt sich, dass die Einstellung in Yast irreführend ist. Aktiviert wird hier nämlich nur die Antivirenschnittstelle Amavis. Und obwohl Amavis ausgeschrieben „A Mail Virus Scanner“ heißt, ist es genau das nicht.

Das Programm stellt vielmehr einen Systemdämon bereit, der den Datenfluss zwischen Mail Transfer Agent und Content-Filtern regelt. Ob an diese Schnittstelle auch wirklich ein Antivirenprogramm angeschlossen ist, verrät Yast nicht. Wer die Option zum ersten Mal aktiviert und dabei die Systemmeldungen im Auge behält, sieht aber, dass das Open-Source-Antivirenprogramm ClamAV installiert wird.

Nur wird, wie ein Blick in die Prozesstabelle zeigt, der Systemdämon von ClamAV namens clamd nicht von Yast unter Open Suse gestartet. Um den Virenschutz wirklich zu aktivieren, ist also Handarbeit angesagt. Es gilt, den Systemdämon von ClamAV zu starten und mit dem Mailserver Postfix zu verbinden. Und damit ClamAV dauerhaft gegen Viren schützt, muss es regelmäßig aktualisiert werden. Dazu dient das Programm freshclam, das über einen Cron-Job mindestens einmal täglich ausgeführt werden sollte. Ein erstes Mal sollte man freshclam allerdings gleich beim Einrichten des Virenschutzes am System per Hand aufrufen. Freshclam kann feststellen, ob die Virensignaturen noch aktuell sind, ohne die Download-Server zu kontaktieren. Die Entwickler hinterlegen dazu den aktuellen Status der Signaturen direkt im DNS.

Open-Source-Programm: ClamAV lässt sich als Virenfilter in E-Mail-Server einbinden.

Ist ClamAV aktiv und aktuell und es kommen trotzdem noch Viren an, dann gilt es, das Zusammenspiel von Postfix, Amavis und ClamAV zu überprüfen. Neben ClamAV haben die Tester das übrigens auch mit zwei kommerziellen Antivirenprodukten ausprobiert: Antivir von Avira und AVG von Grisoft. Die Verbindung zwischen Virenscanner und Amavis ist in allen drei Fällen relativ einfach herzustellen. Antivir wurde im Test sogar automatisch eingebunden. Komplexer ist die Konfiguration von Postfix und Amavis.

Zusammenspiel der Komponenten regeln

Das Zusammenspiel zwischen Postfix, Amavis und den Content-Filtern ist nicht ganz trivial. In der Standard-Konfiguration sendet Postfix ungeprüfte Mails zunächst an den Port 10024 auf localhost. Dort nimmt Amavis sie in Empfang und leitet sie an das angeschlossene Antivirenprogramm weiter. ClamAV nimmt die Mail auf Port 3310 entgegen, AVG auf 5555. Die voreingestellten Ports lassen sich natürlich in den Konfigurationsdateien ändern. Der Antivirendämon leitet die Mail dann zurück an Amavis. Von Amavis läuft die Mail wieder an Postfix, diesmal auf Port 10025. Und zu guter Letzt liefert Postfix die Mail aus.

Komplizierte Systemeinrichtung: Die Konfigurationsdateien von Postfix und Amavis müssen hundertprozentig zusammenpassen.

Damit das Ganze schneller geht, können sowohl Amavis als auch die Antiviren-Dämonen in jeweils mehreren Instanzen gestartet werden, die die Mail-Warteschlange parallel abarbeiten.

Gefangen: Im Protokollfenster ist zu sehen, wie AVG Antivirus zusammen mit Amavis Viren entfernt.

Voreingestellt sind für den AVG-Dämon zwei Instanzen, für Amavis drei und für ClamAV eine. Um ClamAV mehrfach zu starten, müssen Sie pro Instanz eine eigene Einstellungs- und eine Logdatei einrichten.

Amavis serviert dem Virenscanner die Dateien

Amavis übernimmt einige Aufgaben, die auf dem Windows-Desktop das Antivirensystem übernehmen muss. Es analysiert die Mails, zerlegt mehrteilige Mails in ihre Bestandteile, extrahiert Anhänge und entpackt Archive. Erst dann serviert es die Mails dem Antivirenscanner, der nur noch den Check durchführen muss. Mails mit verbotenen Headern blockiert Amavis gleich selbst. So werden zum Beispiel typische Windows-Attachments mit vielen Leerzeichen im Dateinamen blockiert.

Auch nach dem Scan nimmt Amavis dem Antivirenprogramm Arbeit ab. Es entscheidet anhand der Konfigurationsdatei, was mit infizierten Nachrichten passieren soll, und löscht oder speichert sie in einem Quarantänebereich. Dieser befindet sich in /var/spool/amavis/virusmails/. Wird die Funktion der Antivirenlösung mit echten Viren getestet, so sollten diese in diesem Verzeichnis landen.

Eingekerkert: Die Virusmails landen sicher im Quarantäne-Ordner.

Im Test ist das zunächst nicht der Fall. Der Schlüssel ist das Zusammenspiel zwischen Postfix und Amavis, das in den Einstellungsdateien von Postfix master.cf und main.cf eingerichtet wird. In die Datei main.cf wird nun eine neue Zeile eingetragen, die Amavis zukünftig als Content-Filter für alle notwendigen Instanzen von Postfix vordefiniert:

content_filter = smtp-amavis: [127.0.0.1]:10024

Die Syntax ist genau einzuhalten

Die Einstellungsdateien von Postfix reagieren sensibel auf Änderungen. So reicht ein Leerzeichen am Anfang einer Zeile, damit diese falsch ausgewertet wird. Die Open-Suse-Entwickler haben einen weiteren Stolperstein eingebaut: Sie fügen die Einstellungen, die Suse.Config erzeugt, unkommentiert ans Ende der Datei an. So kann es passieren, dass nach manuellen Änderungen eine Einstellung doppelt vorhanden ist. Passiert das etwa mit Port-Einstellungen, so startet Postfix möglicherweise nicht mehr, weil es sich zweimal an denselben Port binden soll. Beim zweiten Versuch bricht der Startvorgang dann ab, weil der Port schon belegt ist.

Ändern Sie die Konfigurationsdateien zur Sicherheit – und um Fehler auszuschließen – immer nur zeilenweise, und starten Sie nach jeder Änderung den Mailer mit postfix reload neu. Wie sich die Änderungen auswirken, ist in /var/log/mail.warn zu erkennen. Fügen Sie also in die Datei master.cf den nachfolgenden Textblock ein:

smtp-amavis unix - - y - 2 smtp
-o smtp_data_done_timeout=1200
-o smtp_send_xforward_command=yes
-o disable_dns_lookups=yes
-o max_use=20

Dieser Block definiert einen Mailtransportdienst namens smtp-amavis, der die Verbindung von Postfix zu Amavis herstellt. Die eigentliche Ausführung des Transports übernimmt das Postfix-Modul smtp. Die Option unix sorgt dafür, dass der Dienst nur lokal erreichbar ist. Haben Sie Ihren Postfix per chroot abgeschottet, setzen Sie die fünfte Option der ersten Zeile auf y, ansonsten auf n.

Die vorletzte Option bestimmt, in wie vielen Instanzen der Prozess höchstens ausgeführt werden darf. Hier sind es zwei. Die Optionen mit -o in den folgenden Zeilen optimieren den Ablauf, indem sie Postfix zum Beispiel daran hindern, im DNS nachzuschauen, weil das bei lokalen Mails bekanntlich nicht nötig ist.

Amavis und Postfix kombinieren

Es folgt ein längerer Block, der den Rückweg der Mails von Amavis nach Postfix beschreibt. Obwohl auch dieser Dienst nur lokal genutzt wird, wird er nicht als Typ unix definiert, sondern als Typ inet. Er sorgt dafür, dass Postfix die geprüften Mails von Amavis auf Port 10025 wieder in Empfang nimmt.

Diese Mails sind schon auf Viren geprüft, deshalb wird die Option -o content_filter= leer gesetzt. Und bevor Postfix die Mails an Amavis übergeben hat, hat er schon seine Standard-Überprüfungen durchgeführt. Diese werden deshalb abgeschaltet. Dazu dienen die dritte bis letzte Zeile dieses Konfigurations-Blocks. Achtung: Gleichheitszeichen und Kommas dürfen nicht von Leerzeichen umgeben sein. Leerzeichen dienen in der Postfix-Konfiguration als Trennzeichen.

127.0.0.1:10025 inet n - y - - smtpd
-o content_filter=
-o local_recipient_maps=
-o relay_recipient_maps=
-o smtpd_restriction_classes=
-o smtpd_delay_reject=no
-o smtpd_client_restrictions=permit_mynetworks,reject
-o smtpd_helo_restrictions=
-o smtpd_sender_restrictions=
-o smtpd_recipient_restrictions=permit_mynetworks,reject
-o mynetworks_style=host
-o mynetworks=127.0.0.0/8
-o strict_rfc821_envelopes=yes
-o smtpd_error_sleep_time=0
-o smtpd_soft_error_limit=1001
-o smtpd_hard_error_limit=1000
-o smtpd_client_connection_count_limit=0
-o smtpd_client_connection_rate_limit=0
-o receive_override_options=no_header_body_checks,no_unknown_recipient_checks

Feintuning für Amavis

Ist Postfix konfiguriert, steht das Amavis-Tuning an. Das Problem: Es gibt verschiedeneVersionen von Amavis. Das Programm amavisd-new ist kein Modul des Amavis-Pakets, sondern ein Fork aus der Entwicklungslinie. Es ist die beste und neuste Version und wird daher auch in diesem Workshop verwendet.

Die Einstellungen zu Amavis finden sich in /etc/amavisd.conf. Stellen Sie dort die Variable $myhostname auf Ihre Domain ein. Bei Problemen setzen Sie die Variable $log_level auf einen höheren Wert, um detaillierte Fehlermeldungen zu erhalten. Diese werden unter /var/log/amavisd.log gespeichert. Die Konfigurationsdatei von Amavis enthält bereits Voreinstellungen für ein gutes Dutzend Antivirenscanner. Diese versucht das Programm beim Start automatisch einzubinden. Ob das gelungen ist, können Sie mit grep herausfinden:

grep Found.*"av scanner" /var/log/amavisd.log

Aug 4 01:05:43 links.it-journalist.de /usr/sbin/amavisd[4830]: Found secondary av scanner ClamAV-clamscan at /usr/bin/clamscan

Wenn der Mailserver mit Virenschutz rund läuft, sollten Sie noch die Dämonen amavisd und clamd in den Systemstart einbinden. Unter Open Suse ist das mit dem Runlevel-Editor von Yast schnell erledigt. Haben Sie auch an den Cron-Job gedacht, mit dem freshclam jede Stunde die Virensignaturen auf den neusten Stand bringt? Dann ist der virensichere Mailserver fertig. (mja)