Open Source Tipp: Freie Antivirus-Proxy-Lösung

Autor/in Michi Zaugg
Datum 26.01.2012
Lesezeit 5 Minuten

Squid inkl. Antivirus

Ich kenne zwei Open-Source-Lösungen, um den Antivirenscanner Clamav in Squid zu integrieren.
Die eine ist HAVP und die andere squidclamav.

Ersteres läuft soweit gut, jedoch habe ich bei vielen Benutzern hinter dem Proxy Geschwindigkeitsprobleme.
Durch Tuning bekommt man dies einigermassen in den Griff (Dateigrössen zum Scannen runterschrauben, Seiten/Dateiendungen ausklammern, Threads/Servers usw. raufschrauben, mehr CPU/Ram).
Jedoch kann man den Unterschied zwischen direkter Internetverbindung (mit transparentem Squid) und eingeschaltetem Virenscanner mit HAVP immer noch gut erkennen.

Mit der neusten Version von squidclamav habe ich andere Erfahrungen gemacht. Zwar sind es noch nicht ganz so viele wie mit HAVP, aber meine ersten Resultate sind sehr zufriedenstellend.

squidclamav
Getestet und in Betrieb genommen habe ich das System (iptables, squid, squidclamav) unter gentoo. Es läuft aber auch unter allen anderen Linux-Distributionen.

Was braucht es:

  • Linux 😉
  • iptables
  • squid
  • clamav (bzw, clamd, via socket (lokal) oder tcp übers Netz)
  • squidclamav (Version 6.x)
  • icap

Die zusätzlichen Dienste können unter Debian-ähnlichen Systemen mit “apt-get install iptables squid squidclamav c-icap” oder unter gentoo mit “emerge iptables squid squidclamav c-icap
installiert werden. Unter gentoo brauchts die zusätzlichen USE-Flags “icap-client tproxy“.

Squid-Anpassungen
Squid sollte konfiguriert sein und “normal” funktionieren. Ich habe dies “transparent” gemacht, d.h. via iptables wird der Verkehr auf den Squid Proxy umgeleitet. Dies kann mit folgender iptables-Regel geschehen:

iptables -t nat -A PREROUTING -m state --state NEW -i eth0 -s 10.0.0.0/24  
-p tcp -d 0/0 --dport 80 -j REDIRECT --to-port 3128

Wobei hier “10.0.0.0/24” das interne Netz ist und “eth0” die interne Netzwerkkarte des Gateways. Der Proxy Squid läuft auf derselben Maschine.

Squid wird den “c-icap”-Dienst kontaktieren, der dann mit squidclamav die Virenüberprüfung vornimmt. Dies klingt etwas umständlich,
bringt jedoch eine Vielzahl von Möglichkeiten mit sich (Filtering, Anbindung an Antiviruslösung, Integration in LDAP usw.) — darauf wird hier nicht weiter eingegangen.

Um “icap” in Squid zu aktivieren, sind folgende Konfigurationsoptionen nötig:

icap_enable on
icap_send_client_ip on
icap_send_client_username on
icap_client_username_encode off
icap_client_username_header X-Authenticated-User
icap_preview_enable on
icap_preview_size 1024
icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/clamav
adaptation_access service_req allow all
icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/clamav
adaptation_access service_resp allow all

c-icap
Die Standardkonfiguration (“/etc/c-icap.conf“) ist soweit ausreichend, wenn nicht etwas mehr Leistung gebraucht wird (oder andere Spezialitäten von c-icap).
Die Konfigurationsdatei kann ja mal durchgesehen werden. Allenfalls können dann Anpassungen vorgenommen werden.

Für squidclamav muss folgende Zeile reinkommen:

Service clamav squidclamav.so

Nun kann der Squid via icap://127.0.0.1:1344/clamav die Dienste von clamav bzw. squidclamav in Anspruch nehmen.

squidclamav
Die Konfiguration befindet sich standardmässig unter “/etc/squidclamav.conf”. Auch in dieser Datei muss nicht allzu viel geändert werden.

redirect http://irgendeinwebserver.ch/cgi-bin/clwarn.cgi

Im squidclamav-Packet (.tar.gz) kommt unter cgi-bin ein Perlskript mit (clwarn.cgi), das auf einen beliebigen Webserver mit Perl-Unterstützung gelegt werden kann. Wenn dann ein Virus gefunden wird,
wird diese Seite aufgerufen und der Client erhält eine Website im Stil:

Virenscanner: Virus detection

The requested URL http://virentest.com/eicar.txt
contains the virus: Eicar-Test-Signature(69630e4574ec6798239b091cda43dca0:69)

This URL can not be downloaded.

Origin: 10.0.0.10 / -

Powered by SquidClamAv 6.5.

Falls der clamd lokal läuft und einen Socket zur Verfügung stellt, muss dieser angegeben werden (Standardkonfiguration):

clamd_local /var/run/clamav/clamd.sock

Clamd kann auch übers Netz laufen und so eine Failover-Loadbalancing-Funktion bieten (wenn dieser auf zwei Servern zur Verfügung gestellt wird).

clamd

Die installierte Konfiguration sollte eigentlich passen. Sie kann selbstverständlich nach eigenem Gutdünken angepasst werden. “LocalSocket” bzw. TCP/IP-Konfiguration muss aber natürlich gegenüber den anderen Konfigurationsdateien passen. Es muss also allenfalls die Zeile “LocalSocket” angepasst werden:


LocalSocket /var/run/clamav/clamd.sock

Starten der ganzen Geschichte
Folgende Dienste müssen am Laufen sein (in die Startup-Konfiguration einbinden!):

  • squid
  • c-icap
  • clamd

Die Iptables natürlich auch. Allerdings nur, wenn man sie verwendet. Zudem werden die eingelesen und sind dann aktiv; es ist kein eigentlicher Dienst, der dann am Laufen ist.

Unter “/var/log/c-icap“, “/var/log/clamav” und “/var/log/squid” findet man die Protokolldateien zu den entsprechenden Diensten.
Testen kann man unter eicar mit einer Viren-Test-Signatur, um zu verifizieren, ob der Virenscanner auch funktioniert.

Tuning
Falls man schlechte Performance hat, kann an den Diensten geschraubt werden. Auf der Seite squidclamav hat es verschiedene Vorschläge dazu.


Autor/in

Michi Zaugg

Michi Zaugg ist Fachbereichsleiter Linux und Unix bei Digicomp. Er arbeitet seit 12 Jahren in der Informatikbranche. Als Netzwerk- und Sicherheitsadministrator leitete er ein Netzwerkteam und studiert derzeit berufsbegleitend Informatik an der Hochschule Rapperswil (Informatik Ing. FH.). Zudem verfügt er über die LPI-Zertifizierung.