SquidClamav

SquidClamav permet l'envoi du contenu du serveur mandataire vers un antivirus (ici ClamAV) via un serveur ICAP.

Nous utiliserons c-icap ici.

Github de squidClamav

Fonctionnement

Squid est capable de communiquer avec un serveur ICAP. Nous allons ainsi lui envoyer les requêtes qui passent par le serveur afin de l'analyser par ClamAV.

Un serveur ICAP est capable de recevoir des flux chiffrés ou non. Ainsi, dans l'exemple qui suit, nous interagirons avec le serveur ICAP sur la loopback, ainsi il n'est pas nécessaire de chiffrer les flux. Il faut garder à l'esprit qu'ici, le client attend une réponse du serveur et celle-ci doit arriver le plus rapidement possible.

Enfin, le serveur ICAP enverra le flux à l'antivirus.

Installation

Il est nécessaire de compiler le code source présent sur le git. Il est conseillé de le faire sur la machine qui hébergera le serveur ICAP, afin d'être dans le bon environnement directement.

./configure --with-c-icap CFLAGS=-O2

make

make install

Maintenant que squidClamav est présent, il faut installer c-icap. Il suffit de prendre le paquet c-icap.

Configuration

c-icap

c-icap nécessite de connaitre squidClamav pour fonctionner. On va doc ajouter cette ligne dans /etc/c-icap/c-icap.conf :

Service squidclamav squidclamav.so

Ainsi, nous avons la configuration suivante :

PidFile /run/c-icap/c-icap.pid
CommandsSocket /run/c-icap/c-icap.ctl
Timeout 300
MaxKeepAliveRequests 100
KeepAliveTimeout 600
StartServers 3
MaxServers 10
MinSpareThreads     10
MaxSpareThreads     20
ThreadsPerChild     10
MaxRequestsPerChild  0
Port 127.0.0.1:1344
User proxy
Group proxy
ServerAdmin you@your.address
ServerName YourServerName
TmpDir /tmp
MaxMemObject 131072
DebugLevel 0
Pipelining on
SupportBuggyClients off
ModulesDir /usr/lib/x86_64-linux-gnu/c_icap
ServicesDir /usr/lib/x86_64-linux-gnu/c_icap
TemplateDir /usr/share/c_icap/templates/
TemplateDefaultLanguage en
LoadMagicFile /etc/c-icap/c-icap.magic
RemoteProxyUsers off
RemoteProxyUserHeader X-Authenticated-User
RemoteProxyUserHeaderEncoded on
Service echo srv_echo.so

Service squidclamav squidclamav.so

squidClamav

Ensuite, il faut configurer squidClamav pour envoyer les données à ClamAV dans /etc/c-icap/squidclamav.conf

maxsize 500M
redirect http://local.domain/virus.html
clamd_ip 192.168.10.100
clamd_port 3310
timeout 1
logredir 0
dnslookup 0
safebrowsing 0
multipart 0
scan_mode ScanAllExcept
enable_libarchive 0
banmaxsize 2M

Ici, ClamAV est hébergé sur le port 3310 sur le serveur 192.168.10.100.

squid

Enfin, il faut configurer squid pour utiliser le serveur ICAP :

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_avi_req reqmod_precache icap://127.0.0.1:1344/squidclamav bypass=off
adaptation_access service_avi_req allow all
icap_service service_avi_resp respmod_precache icap://127.0.0.1:1344/squidclamav bypass=on
adaptation_access service_avi_resp allow all

Tester

Pour tester le bon fonctionnement du serveur antivirus et de squidclamav, il est possible d'utiliser le site de l'EICAR qui possède un fichier de test, disponible ici.