Wildpark RekenSeit ein paar Tagen versuche ich schon Squid und ClamAV zusammenzubringen.
Ende Dezember gab es auf heise.de einen Artikel zu Squid3, der nahelegte, dass man damit das Viren scannen im Proxy verbessern kann.

Gestern fand ich bei juergens( http://www.how2blog.de/?p=19 ) einen interessanten Artikel dazu. Er endete zwar mittendrin, aber immerhin ein Anfang. Außerdem gab es auf der c-icap-HomePage auf sourceforge.net auch noch ein paar Hinweise.

c-icap Installation

~ # apt-get remove clamav clamav-base clamav-freshclam
Diese Pakete muste ich erst deinstallieren, um erst das ‘dev’-Paket installieren zu können. Dann die Pakete von eben wieder installiert und alles ist gut. _WUNDER_
~ # apt-get install libclamav2 libclamav-dev
~ # apt-get install clamav clamav-base clamav-freshclam
~ # groupadd -g 65535 nobody
~ # wget -N http://x.sf.net/sourceforge/c-icap/c_icap-xxx.tar.gz
~ # tar xzf c_icap-180407.tar.gz
~ # cd c_icap-180407
~/c_icap-180407 # ./configure --enable-static --with-clamav --prefix=/usr/local/icap
...
checking for clamav 0.90.x or newer... yes
...
~/c_icap-180407 # make
~/c_icap-180407 # make install
....
make: *** [install-recursive] Fehler 1

Huch, ein Fehler!
Ich konnte aber die Fehlermeldung nicht deuten, also hatte ich es einfach nochmal versucht und siehe da, es ging:

~/c_icap-180407 # make install
....
make[1]: Leaving directory `/root/c_icap-180407/services'
~/c_icap-180407 # cd
~ # mv /usr/local/icap/var/log /var/log/icap
~ # ln -fs /var/log/icap /usr/local/icap/var/log
~ # mv /usr/local/icap/etc /etc/icap
~ # ln -s /etc/icap /usr/local/icap/etc
~ # vi /etc/icap/c-icap.conf

...
Port 1344
#User wwwrun
User proxy
Group nobody
...
#ServerLog /usr/local/icap/var/log/server.log
#AccessLog /usr/local/icap/var/log/access.log
ServerLog /var/log/icap/icap-server.log
AccessLog /var/log/icap/icap-access.log

#DebugLevel 3
...
#AclControllers default_acl
acl localsquid_respmod src 127.0.0.1 type respmod
acl localsquid src 127.0.0.1
acl externalnet src 0.0.0.0/0.0.0.0
icap_access allow localsquid_respmod
icap_access allow localsquid
icap_access deny externalnet

...
# And here the viralator-like mode.
# where to save documents
#srv_clamav.VirSaveDir /srv/www/htdocs/downloads/
srv_clamav.VirSaveDir /var/www/downloads/
# from where the documents can be retrieved (you can find the get_file.pl script in contrib dir)
#srv_clamav.VirHTTPServer "http://fortune/cgi-bin/get_file.pl?usename=%f&remove=1&file="
srv_clamav.VirHTTPServer "http://proxy/cgi-bin/get_file.pl?usename=%f&remove=1&file="
# The refresh rate....
srv_clamav.VirUpdateTime 15
# For which filetypes the "virelator like mode" will be used.
srv_clamav.VirScanFileTypes ARCHIVE EXECUTABLE

~ # mkdir /var/www/downloads/
~ # cp -p ~/c_icap-180407/contrib/get_file.pl /usr/lib/cgi-bin/
~ # vi /usr/lib/cgi-bin/get_file.pl

...
#$filename="/srv/www/htdocs/downloads/".$args{"file"};
$filename="/var/www/downloads/".$args{"file"};
...

Nun versuchen wir mal einen Start des ICAP-Deamon:
~ # /usr/local/icap/bin/c-icap -d 3 -f /etc/icap/c-icap.conf
Initialization of echo module......
Initialization of url_check module......
gefühlte 10 Minuten später
~ # lsof -i :1344
c-icap 26311 proxy 5u IPv4 10321584 TCP *:1344 (LISTEN)
c-icap 26312 proxy 5u IPv4 10321584 TCP *:1344 (LISTEN)
c-icap 26316 proxy 5u IPv4 10321584 TCP *:1344 (LISTEN)
c-icap 26319 proxy 5u IPv4 10321584 TCP *:1344 (LISTEN)
~ # cat /var/log/messages | grep icap
NICHTS
~ # ps fax | grep icap
21669 pts/12 SN 0:00 /usr/local/icap/bin/c-icap -d 3 -f /etc/icap/c-icap.conf
21670 pts/12 SNl 0:00 \_ /usr/local/icap/bin/c-icap -d 3 -f /etc/icap/c-icap.conf
21674 pts/12 SNl 0:00 \_ /usr/local/icap/bin/c-icap -d 3 -f /etc/icap/c-icap.conf
21678 pts/12 SNl 0:00 \_ /usr/local/icap/bin/c-icap -d 3 -f /etc/icap/c-icap.conf

erster Trocken-Test mit einer sauberen Datei:
~ # /usr/local/icap/bin/icap-client -f /bin/ls -s "srv_clamav?allow204=on&force=on&sizelimit=off&mode=simple"
ICAP server:localhost, ip:127.0.0.1, port:1344
No modification needed (Allow 204 responce)

und jetzt noch eine virulente Datei:
~ # /usr/local/icap/bin/icap-client -f /home/ftp/pub/virus/virus/RTL-DSDS-anmelde.bat.virus -s "srv_clamav?allow204=on&force=on&sizelimit=off&mode=simple"
ICAP server:localhost, ip:127.0.0.1, port:1344
<H1>VIRUS FOUND</H1>
You try to upload/download a file that contain the virus<br>
Worm.Sober.C1
<p>This message generated by C-ICAP srvClamAV/antivirus module

Das scheint er ja alles zu checken ;-)

Die Benutzung der ‘Datei’ c-icap.ctl klappte bei mir noch nicht!:

  • Neueinlesen der Konfiguration:
    «echo -n “reconfigure” > /var/run/c-icap/c-icap.ctl»
  • «echo -n “srv_clamav:dbreload” > /var/run/c-icap/c-icap.ctl»
  • stoppen des Dienstes:
    «echo -n “stop” > /var/run/c-icap/c-icap.ctl»

Squid Anpassen

~ # apt-get install squid3

Nun ist nur die Frage, wie geht es weiter? Queabyplleabypabyp:

In the configuration file of Squid enter the following lines:
....
icap_enable on
icap_preview_enable on
icap_preview_size 128
icap_send_client_ip on
#icap_send_auth_user on
icap_send_auth_username on
#icap_auth_scheme Local://%u
icap_service service_avi_req reqmod_precache 0 icap://localhost:1344/srv_clamav
icap_service service_avi respmod_precache 1 icap://localhost:1344/srv_clamav
#icap_class class_antivirus service_avi service_avi_req
#icap_access class_antivirus allow all
icap_class class_antivirus service_avi
icap_access class_antivirus allow all

icap_class class_antivirus_req service_avi_req
icap_access class_antivirus_req allow all
...

Wichtig ist scheinbar auch, dass auf den Clients der Proxy beim download vom Proxy selbst ausgeschalten ist. Sonst gibt es scheinbar ein Lastproblem, wegen der Schleife die man erzeugt…
Das sollte aber bei der obigen Konfiguration gegeben sein, wenn man im Browser den Haken bei ‘..lokale Adressen umgehen…’ drin hat.
~ # top
top - 18:16:28 up 148 days, 9:57, 4 users, load average: 4.37, 4.23, 3.83
Tasks: 175 total, 4 running, 171 sleeping, 0 stopped, 0 zombie
Cpu(s): 0.0%us, 17.2%sy, 75.8%ni, 0.0%id, 0.0%wa, 3.3%hi, 3.6%si, 0.0%st
Mem: 515824k total, 509256k used, 6568k free, 16956k buffers
Swap: 1465088k total, 392772k used, 1072316k free, 107392k cached
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
31334 proxy 17 2 161m 69m 1060 S 75.4 13.9 9:28.33 c-icap
29559 root 27 12 6220 3576 1776 R 4.0 0.7 0:06.73 ssh
26235 root 17 2 0 0 0 S 1.7 0.0 3:00.94 nfsd
26232 root 17 2 0 0 0 R 1.3 0.0 2:49.81 nfsd
26228 root 17 2 0 0 0 S 0.7 0.0 3:07.88 nfsd
....

c-icap mit VirusViren erkennt er schon ganz gut, wenn man das dann alles so hat. Aber leider funktioniert es dann nicht transparent. Man muss nach dem Download noch auf einen weiteren Link klicken: Download über den c-icap

Solches Verhalten kann man kaum seinen Usern ‘zumuten’, aber Automaten, wie ‘apt-get’ funktionieren damit gleich gar nicht. Also habe ich die Konfiguration wieder zurueck geschraubt und werde mir demnächst mal HAVP ansehen.

Ach ja:
Wenn man auch die MSI-Files gescannt haben möchte, muss man die Datei ‘/etc/icap/c-icap.magic‘ noch um folgende Zeile erweitern!:
‘0:\320\317:MSI:MSI/W32 executable/library/driver:EXECUTABLE’

Nachtrag:
Inzwischen habe ich mir den HAVP an den Squid3 ‘angeflanscht’ und der (HAVP) fragt den Virenscanner. Das funktioniert jetzt deutlich besser und auch so, dass die ‘User’ nichts davon mitbekommen.