Installation eines lokalen ClamAV Servers

Ein Viren-Scanner unter Linux ist wie der Typ auf der WG-Party, den niemand kennt. Seine Gastgeber iptables, SELinux und AppArmor wundern sich jedesmal auf neue, wieso der schon wieder eingeladen wurde. Also, wieso sollte man sich überhaupt einen solchen Gast ins Haus holen?
Nun, da gibt es schon einige Gründe. Nicht nur werden Linux-spezifische Viren, Malware, Trojaner etc. erkannt, sondern auch jene von Windows. Somit läuft Linux selbst nicht Gefahr, selbst zur Virenschleuder zu werden (ohne dabei selbst krank zu sein).
Außerdem kann die IT-Compliance besser schlafen wenn ein Viren-Scanner da ist.

Vorwort

ClamAV lässt sich auf unterschiedliche Arten und Weisen einrichten und betreiben. In Unternehmen kann man sich einen zentralen Server einrichten, der die Viren-Signaturen bereitstellt und wahlweise den Viren-Scan für die Clients übernimmt. Er kann beide Aufgaben übernehmen, muss es aber nicht. Auch wird die Möglichkeit geboten, einen On-Access-Scanner für die Clients einzurichten, der live Zugriffe auf Ordner und Dateien überwacht und wahlweise sperrt.
Für den privaten Anwender genügt es, den Virenscanner lokal laufen zu lassen und sich die Signaturen aus dem Internet zu laden. Hier wird kein weiterer Server benötigt.
Im folgenden werden wir allerdings die etwas ausufendere Variante wählen und uns einen zentralen ClamAV-Server einrichten, der die Viren-Signaturen für seine Clients bereitstellt. Darüber hinaus schauen wir uns die On-Access-Scanner Funktion für die Clients an.
Installations-Grundlage für den ClamAV-Server wird ein Ubuntu 24.04 Server mit dem Hostnamen clamav-server sein.
Der Client ist ein Linux Mint XFCE 22.2 mit dem Namen clamav-client.

Installation des ClamAV-Servers

Zunächst benötigen wir 2 Pakete für den Remote-Scan …

sudo apt install clamav clamav-daemon

… und eines für das herunterladen der Viren-Signaturen:

sudo apt install clamav-cvdupdate

Außerdem benötigen wir noch einen nginx Webserver:

sudo apt install nginx

Dieser nginx-Server wird über HTTP die Signaturen bereitstellen.

Einrichtung des ClamAV-Servers

Für den Ablageort der heruntergeladenen Signaturen erzeugen wir uns einen neuen Standardpfad und legen ihn über die Einstellung von cvdupdate darauf fest (ihr könnt den Pfad nach belieben setzen):

mkdir -p /var/lib/cvdupdate
chown clamav:clamav /var/lib/cvdupdate
cvdupdate config set --dbdir /var/lib/cvdupdate init

Als nächstes werden die Virensignaturen heruntergeladen:

cvdupdate update

Damit sollte der festgelegte Ordner folgende Dateien umfassen:

Als nächstes verlinken wir den Ordner mit den Signaturen nach nginx …

ln -s /var/lib/cvdupdate/ /var/www/clamav

… legen die Konfigurationsdatei im sites-available Ordner an …

nano /etc/nginx/sites-available/clamav.conf

### Folgender Inhalt
server {
              listen 80;
              server_name clamav-server;
              root /var/www/clamav;
              access_log /var/log/nginx/clamav_access.log;
              error_log /var/log/nginx/clamav_error.log
              autoindex on;
}

… verlinken diesen im sites-enabled Ordner …

sudo ln -s /etc/nginx/sites-available/clamav.conf /etc/nginx/sites-enabled/clamav.conf

… und löschen die darunter liegende default Datei (falls vorhanden):

sudo rm /etc/nginx/sites-enabled/default

Testet die Syntax und startet den Dienst einmal neu:

### Syntax testen ...
nginx -t

### ... und nginx neustarten
sudo systemctl restart nginx.service

Nun sollten die Signaturen schonmal über die Adresse …

erreichbar sein.
Zum Schluß richten wir noch einen Cronjob ein, der uns alle 4 Stunden die aktuellen Viren-Signaturen bereitstellt:

### Erstellung der Cronjobs-Datei
nano /etc/cron.d/cvdupdate

### Der Cronjob wird alle 4 Stunden ausgeführt
* */4 * * * cvdupdate update

Einrichtung des ClamAV-Clients

Viren-Signaturen (freshclam)

Nun widmen wir uns unserem Client.
Wir installieren zunächst alle notwendigen Pakete:

sudo apt install clamav clamav-daemon

Als nächstes passen wir die Konfigurationsdatei für die Beschaffung der Virensignaturen /etc/clamav/freshclam.conf von ClamAV an.
Setzt zunächst das Write Bit …

chmod 644 /etc/clamav/freshclam.conf

… und editiert die Datei wie untenstehend.

### Signaturen werden hier abgespeichert
DatabaseDirectory /var/lib/clamav

### Kommentiert den offiziellen Spiegel aus ...
# DatabaseMirror database.clamav.net
# DNSDatabaseInfo current.cvd.clamav.net

### ... und kommentiert den eigenen lokalen ClamAV-Server ein
PrivateMirror http://clamav-server

UpdateLogFile /var/log/clamav/freshclam.log
Checks 6          # Schaut 6 mal am Tag nach neuen Viren-Signaturen

Der freshclam-Dienst lädt uns nun vollautomatisch die Signaturen von unserem Server herunter, sofern wir diesen einmal starten bzw. neustarten.

sudo systemctl enable --now clamav-freshclam

Mit der oben stehenden Konfig schaut der Client nun auf dem Server (in unserem Fall der clamav-server) nach den folgenden 3 Dateien:

Virenscanner (clamd)

Neben dem clamav-freshclam benötigen wir noch den clamav-daemon:

sudo systemctl enable --now clamav-daemon

Zwar lässt sich ein Viren-Scan auch ohne den Daemon durchführen, allerdings auf Kosten der Performance. Außerdem benötigt der On-Access-Scan ohnehin diesen Dienst.
Bevor es weitergeht, kann noch mit einem kleinen Trick herausgefunden werden, ob auch tatsächlich der lokale Signaturen-Server als Quelle verwendet wird. Hierzu stoppen wir den clamav-freshclam-Dienst

sudo systemctl stop clamav-freshclam

und führen freshclam im verbose Modus aus:

sudo freshclam -v

Die Ausgabe sollte dann in etwa so aussehen:

Es kann sein, dass einige Dateien nicht gefunden werden. Das ist völlig normal. Seht nur zu, dass die folgenden Dateien erfolgreich geladen werden können:

Sorgt außerdem dafür, dass der Parameter User auf root innerhalb der /etc/clamav/clamd.conf gesetzt ist:

### On-Access-Scans werden als root Benutzer ausgeführt
User root

Somit wären wir gerüstet, unsere ersten Virenscans zu starten. Da die Palette der Optionen gigantisch ist, gebe ich an dieser Stelle nur eine kleine Übersicht einiger gängiger Möglichkeiten.

### Gesamtes Home-Verzeichnis scannen
clamdscan --fdpass /home

### Infizierte Dateien außerdem löschen
clamdscan --fdpass --remove /home

### Multiscan nutzen (erlaubt schnellere Scans)
clamdscan --fdpass --multiscan /home

Der Parameter –fdpass ist grundsätzlich wichtig, da der clamd-Dienst ansonsten keinen Zugriff auf die Dateien hat.
Eine Liste mit weiteren Parametern findet ihr mit Hilfe des –help-Parameters …

Oder in der offiziellen Dokumentation, zu finden unter folgendem Link:

On-Access-Scanner (clamonacc)

Bevor wir an dieser Stelle mit dem On-Access-Scanner weitermachen sei zuvor noch erwähnt, dass für diesen das Kernel -Feature fanotify benötigt wird. Dieses sollte jedoch mit jedem Kernel ab Version 2.6.37 ohnehin mitgeliefert werden.

Wie bereits weiter oben erwähnt, nutzt der On-Access-Scanner den clamav-daemon, weswegen wir an dieser Stelle keinen weiteren Dienst installieren jedoch aber konfigurieren müssen.
Und hierzu gehen wir auf dem Client nochmals in die Datei /etc/clamav/clamd.conf und ergänzen folgende Zeilen:

### Hindert den Benutzer daran, weiterhin auf eine infizierte Datei zuzugreifen
OnAccessPrevention yes

### Der On-Access-Scanner werkelt in diesem Verzeichnis herum
OnAccessIncludePath /home

### Folgender Benutzer soll vom On-Access-Scan ausgeschlossen werden (wichtig um Endlosschleifen beim Scannen zu vermeiden)
OnAccessExcludeUname clamav

Leider gibt es keinen eigenen Dienst, der uns den On-Access-Scanner startet. Dies muss manuell erledigt werden:

sudo clamonacc --fdpass --config-file=/etc/clamav/clamd.conf

Damit läuft der On-Acccess-Scanner. Testen können wir ihn, indem wir uns probeweise eine Virus-Datei erzeugen.

echo 'X5O!P%@AP[4\PZX54(P^)7CC)7}$EICAR-STANDARD-ANTIVIRUS-TEST-FILE!$H+H*' > ~/eicar.txt

Hinweis: Benutzt unbedingt den cat Befehl, sonst wird diese Datei hinterher nicht als (false-positive)Virus erkannt!

Versucht nun als nicht root-Benutzer darauf zuzugreifen. Dieses Vorhaben sollte in die Hose gehen und in etwa so aussehen …
Aus der Sicht des Benutzers …

…als Ausgabe des On-Access-Scanners (sofern mit dem –foreground-Parameter gestartet) …

… und als Eintrag in den Logs (/var/log/clamav/clamav.log):

Fazit

ClamAV ist ein modularer und recht stark konfigurierbarer Viren- und On-Access-Scanner, dem es leider an einer vorgefertigten all-inclusive Lösung mangelt. Eine vorhandene aber unzureichende Quarantänisierung der Dateien, eine fehlende Benachrichtigungsfunktion, keine Zero-Day-Erkennung, eine fehlende grafische Oberfläche (für Server), usw. lässt ClamAV eher wie ein Baukasten erscheinen, der erst noch mit weiteren Tools verfeinert werden muss um auch in größeren Netzwerken das volle Potential entfalten zu können.
Auf der anderen Seite steht uns eine kostenfreie Open-Source Lösung zur Verfügung, die zwar Zeit zur Einarbeitung erfordert, jedoch gut in Skripte und sonstige Automatisierungen integrierbar ist.

Bildquellen:
Virus-Bild von iXimus auf Pixabay
Stop-Bild von iXimus auf Pixabay

Kommentar verfassen

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Nach oben scrollen