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-cvdupdateAußerdem benötigen wir noch einen nginx Webserver:
sudo apt install nginxDieser 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 initAls nächstes werden die Virensignaturen heruntergeladen:
cvdupdate updateDamit 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/defaultTestet die Syntax und startet den Dienst einmal neu:
### Syntax testen ...
nginx -t
### ... und nginx neustarten
sudo systemctl restart nginx.serviceNun sollten die Signaturen schonmal über die Adresse …
http://clamav.local/main.cvd
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 updateEinrichtung des ClamAV-Clients
Viren-Signaturen (freshclam)
Nun widmen wir uns unserem Client.
Wir installieren zunächst alle notwendigen Pakete:
sudo apt install clamav clamav-daemonAls 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-SignaturenDer 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-freshclamMit der oben stehenden Konfig schaut der Client nun auf dem Server (in unserem Fall der clamav-server) nach den folgenden 3 Dateien:
http://clamav.local/main.cvd
http://clamav.local/daily.cvd
http://clamav.local/bytecode.cvd
Virenscanner (clamd)
Neben dem clamav-freshclam benötigen wir noch den clamav-daemon:
sudo systemctl enable --now clamav-daemonZwar 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-freshclamund führen freshclam im verbose Modus aus:
sudo freshclam -vDie 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:
main.cvd / main.cld
daily.cvd / daily.cld
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 rootSomit 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 /homeDer 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:
https://docs.clamav.net/manual/Usage/Scanning.html
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 clamavLeider 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.confDamit 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.txtHinweis: 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
