Squid + SquidGuard + SquidClamav + Lightsquid
Chose promise, chose due !! Voici un petit tuto sur la mise en place d’un proxy cache et de quelques fonctionnalités supplémentaires !
Nous allons installer ici :
Squid – Le proxy
SquidGuard – C’ est un redirecteur qui utilise la librairie Berkeley Database de sleepycat.
Squidclamav – Plugin antivirus pour Squid
Lightsquid – Pour visualiser quelques statistiques
Sources:
https://doc.ubuntu-fr.org/squid
https://doc.ubuntu-fr.org/tutoriel/comment_mettre_en_place_un_proxy_squid_avec_authentification_ncsa
www.ophyde.com
https://sites.google.com/site/guillaumepriou
http://lightsquid.sourceforge.net/
http://www.squidguard.org/Doc/extended.html/
Pour commencer il faut mettre à jour votre Debian.
apt-get update apt-get upgrade
Puis lancer l’installation de Squid:
apt-get install squid
La configuration de Squid s’effectue via le fichier de conf.
Mais il faut toujours garder les fichiers originaux, donc faite un Backup avant (si j’oublie de vous le préciser pensez y!!):
cp /etc/squid/squid.conf /etc/squid/squid.conf.ori
Puis :
nano /etc/squid/squid.conf
La configuration qui suit est faite pour un serveur héberge en local, nous verrons peut être plus tard les modifications à apporter pour un serveur hébergé en ligne.
Ce tuto tient donc compte du fait que vous êtes passé par le tuto « ici » d’installation de votre serveur géré avec ISPConfig, mais il n’est pas pour autant complétement intégré à ISPConfig, il me reste des tests à faire, je reviendrais sur ce tuto une fois la configuration stable trouvée.
Modifiez le fichier avec les lignes suivantes :
#acl localhost src 127.0.0.1/32 ::1 #acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1 acl SSL_ports port 443 acl Safe_ports port 80 # http acl Safe_ports port 21 # ftp acl Safe_ports port 443 # https acl Safe_ports port 70 # gopher acl Safe_ports port 210 # wais acl Safe_ports port 1025-65535 # unregistered ports acl Safe_ports port 280 # http-mgmt acl Safe_ports port 488 # gss-http acl Safe_ports port 591 # filemaker acl Safe_ports port 777 # multiling http acl CONNECT method CONNECT acl LocalNet src 192.168.X.X/24 #<-- A modifier suivant votre réseau http_access deny manager http_access deny !Safe_ports http_access allow CONNECT !SSL_ports http_access allow localhost http_access allow LocalNet http_access deny all http_port 3128 hierarchy_stoplist cgi-bin ? refresh_pattern ^ftp: 1440 20% 10080 refresh_pattern ^gopher: 1440 0% 1440 refresh_pattern -i (/cgi-bin/|\?) 0 0% 0 refresh_pattern . 0 20% 4320 cache_mem 512 MB cache_dir ufs /var/cache/squid/ 2048 16 256 coredump_dir /var/spool/squid minimum_object_size 3 KB maximum_object_size 8 MB cache_store_log /var/log/squid/store.log connect_timeout 30 seconds request_timeout 30 seconds persistent_request_timeout 30 seconds read_timeout 2 minutes ipcache_size 10240 fqdncache_size 10240 positive_dns_ttl 8 hours negative_ttl 4 minutes half_closed_clients off server_persistent_connections off client_persistent_connections on client_lifetime 1 minutes max_filedescriptors 4096 visible_hostname LENOMDEVOTREPROXY # <--- A modifier icon_directory /usr/share/squid/icons httpd_suppress_version_string on cache_mgr admin@DEVOTRERESEAU #<--- A modifier cache_log /var/log/squid/cache.log access_log /var/log/squid/access.log
Redémarrer Squid:
service squid restart
Lors ce que vous faites des modifications dans le fichier de conf de Squid si vous ne voulez pas redémarrer Squid pour recharger la configuration, vous pouvez utiliser la commande suivante:
squid -k reconfigure
Pour vérifier que le service Squid est bien lancé, tapez la commande suivante:
netstat -antp | grep squid
Vous devriez avoir un résultat similaire :
tcp6 0 0 :::3128 :::* LISTEN 8034/(squid-1)
Une fois Squid fonctionnel nous pouvons installer SquidGuard.
Lancer l’installation:
apt-get install squidguard
Ajouter les deux lignes suivantes au fichier de conf de squid:
nano /etc/squid/squid.conf
url_rewrite_program /usr/bin/squidGuard -c /etc/squidguard/squidGuard.conf url_rewrite_children 5
Il faut maintenant télécharger et installer les blacklistes de SquidGuard:
cd /var/lib/squidguard/db wget -q http://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz tar zxvf blacklists.tar.gz chown proxy:proxy -R /var/lib/squidguard/db/blacklists rm blacklists.tar.gz
Liste et explications de chaque blacklistes:
http://dsi.ut-capitole.fr/blacklists/
On s’occupe maintenant de la page d’avertissement:
gunzip /usr/share/doc/squidguard/examples/squidGuard.cgi.gz mv /usr/share/doc/squidguard/examples/squidGuard.cgi /usr/lib/cgi-bin/ chmod +x /usr/lib/cgi-bin/squidGuard.cgi
Puis modifier le fichier de conf de SquidGuard par ceci :
On fait un Backup du fichier avant !!!
cp /etc/squidguard/squidGuard.conf /etc/squidguard/squidGuard.conf.ori
nano /etc/squidguard/squidGuard.conf
dbhome /var/lib/squidguard/db/blacklists logdir /var/log/squid/ src admin { ip 192.168.0.10 #<-- modifier avec votre ip } acl { admin { pass any } }
On redémarre Squid et initialise les blacklistes:
service squid restart squidGuard -C all -d
Lors ce que vous faites des modifications directement dans les fichiers des blacklistes il faut réinitialiser les bases une nouvelle fois:
squidGuard -C all -d
Maintenant installons l’antivirus qui va scanner le flux avant de vous l’afficher.
Installation des dépendances:
apt-get install gcc make curl libcurl4-gnutls-dev c-icap libicapapi-dev
Téléchargement et installation du plugin SquidClamav :
cd /tmp/ wget http://blog.razorbreak.com/wp-content/uploads/2020/06/squidclamav-7.1.tar.gz tar zxvf squidclamav-7.1.tar.gz cd squidclamav-7.1 ./configure --with-c-icap make make install
Modifier le fichier d’ic-cap pour qu’il démarre automatiquement :
nano /etc/default/c-icap
START=yes
Ajouter la ligne suivante au fichier de conf:
nano /etc/c-icap/c-icap.conf
Service squidclamav squidclamav.so
Pour faire fonctionner le module ic-cap avec squid il faut ajouter les lignes suivantes au fichier de conf de squid :
nano /etc/squid/squid.conf
icap_enable on icap_send_client_ip on icap_send_client_username on icap_client_username_header X-Authenticated-User icap_service service_req reqmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav adaptation_access service_req allow all icap_service service_resp respmod_precache bypass=1 icap://127.0.0.1:1344/squidclamav adaptation_access service_resp allow all
Ajoutons maintenant la page qui nous informe qu’un virus est détecté :
Copierla page FR:
cp /usr/local/libexec/squidclamav/clwarn.cgi.fr_FR /usr/lib/cgi-bin/clwarn.cgi.fr_FR chmod 755 /usr/lib/cgi-bin/clwarn.cgi.fr_FR
Modifier la fichier de conf:
nano /etc/c-icap/squidclamav.conf
Modifier ceci :
# When a virus is found then redirect the user to this URL redirect http://IPDEVOTRESERVEUR/cgi-bin/clwarn.cgi.fr_FR
Redémarrez les services :
service squid restart service c-icap restart service clamav-daemon restart
Il faut tout de même tester l’antivirus, donc pour ce faire, rendez-vous sur le site: http://securite-informatique.info/virus/eicar/ et télécharger le fichier « Eicar.zip » par exemple, il est possible que votre browser le bloque avant le proxy, dans mon cas FireFox, pour vérifier que le proxy le bloque aussi il faut cliquer sur « Ignorer cet avertissement »
Puis vous devriez obtenir ce message:
Par défaut l’antivirus scan tout ce qui transite par le proxy, vous pouvez modifier la configuration de Squidclamav dans le fichier /etc/squidclamav.conf.
Vous êtes maintenant protégé partiellement contre les virus via votre proxy.
Nous allons maintenant nous pencher sur la configuration de squidguard pour qu’il gère des tranches horaires et des restrictions différentes celons le pc qui accès à internet.
Nous paramétrons SquidGuard pour qu’il laisse l’IP de l’admin accéder à n’importe quels sites.
Puis nous laissons un filtrage pour les autres IP… Bah ouais !!
Nous allons aussi ajouter des tranches horaires.
C’est ici qu’il va être utile d’utiliser la description des blacklistes pour définir ce que vous voulez bloquer ou non !
Ainsi que la documentation http://www.squidguard.org/Doc/extended.html
Exemple de fichier de conf:
dbhome /var/lib/squidguard/db/blacklists logdir /var/log/squid/ # # TIME RULES: # abbrev for weekdays: # s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat # Pour noel c'est libre du 14 à 19 au 25 à minuit et le jour de l'an aussi time SpecialsDays { date *.12.24 19:00-00:00 date *.12.25 date *.01.01 } time workhours { weekly mtwhf 08:00-19:00 #<-- Donc blocage du lundi au vendredi de 8h à 19h } src admin { ip 192.168.X.X #<-- A modifier } src workhours { ip 192.168.X.X/24 #<-- A modifier } dest adult { urllist adult/urls domainlist adult/domains expressionlist adult/very_restrictive_expression logfile /var/log/squid/adult.log } dest associations_religieuses { domainlist associations_religieuses/domains expressionlist associations_religieuses/usage logfile /var/log/squid/associations_religieuses.log } dest hacking { urllist hacking/urls domainlist hacking/domains expressionlist hacking/usage logfile /var/log/squid/hacking.log } dest sect { urllist sect/urls domainlist sect/domains expressionlist sect/usage logfile /var/log/squid/sect.log } dest aggressive { urllist aggressive/urls domainlist aggressive/domains logfile /var/log/squid/aggressive.log } dest ads { urllist ads/urls domainlist ads/domains logfile /var/log/squid/ads.log } dest social_networks { urllist social_networks/urls domainlist social_networks/domains logfile /var/log/squid/social_networks.log } dest filehosting { urllist filehosting/urls domainlist filehosting/domains logfile /var/log/squid/filehosting.log } dest porn { urllist porn/urls domainlist porn/domains logfile /var/log/squid/porn.log } dest drugs { urllist drugs/urls domainlist drugs/domains logfile /var/log/squid/drugs.log } dest phishing { urllist phishing/urls domainlist phishing/domains logfile /var/log/squid/phishing.log } dest marchands_de_guerre { urllist marketingware/urls domainlist marketingware/domains logfile /var/log/squid/marchands_de_guerre.log } dest malware { urllist malware/urls domainlist malware/domains logfile /var/log/squid/malware.log } dest violence { urllist violence/urls domainlist violence/domains # expressionlist violence/usage logfile /var/log/squid/violence.log } dest dangerous_material { urllist dangerous_material/urls domainlist dangerous_material/domains expressionlist dangerous_material/usage logfile /var/log/squid/dangerous_material.log } dest redirector { urllist redirector/urls domainlist redirector/domains #expressionlist redirector/usage logfile /var/log/squid/redirector.log } dest warez { urllist warez/urls domainlist warez/domains #expressionlist warez/usage logfile /var/log/squid/warez.log } dest marketingware { urllist marketingware/urls domainlist marketingware/domains #expressionlist marketingware/usage logfile /var/log/squid/marketingware.log } dest proxy { urllist proxy/urls domainlist proxy/domains #expressionlist proxy/usage logfile /var/log/squid/proxy.log } dest remote-control { urllist remote-control/urls domainlist remote-control/domains #expressionlist remote-control/usage logfile /var/log/squid/remote-control.log } dest strict_redirector { urllist strict_redirector/urls domainlist strict_redirector/domains #expressionlist strict_redirector/usage logfile /var/log/squid/strict_redirector.log } dest mixed_adult { urllist mixed_adult/urls domainlist mixed_adult/domains #expressionlist mixed_adult/usage logfile /var/log/squid/mixed_adult.log } dest publicite { urllist publicite/urls domainlist publicite/domains #expressionlist publicite/usage logfile /var/log/squid/publicite.log } dest strong_redirector { urllist strong_redirector/urls domainlist strong_redirector/domains #expressionlist strong_redirector/usage logfile /var/log/squid/strong_redirector.log } dest chat { urllist chat/urls domainlist chat/domains logfile /var/log/squid/chat.log # expressionlist chat/usage } dest agressif { urllist agressif/urls domainlist agressif/domains expressionlist agressif/usage logfile /var/log/squid/agressif.log } dest drogue { urllist drogue/urls domainlist drogue/domains expressionlist drogue/usage logfile /var/log/squid/drogue.log } dest gambling { urllist gambling/urls domainlist gambling/domains #expressionlist gambling/usage logfile /var/log/squid/gambling.log } dest sexual_education { urllist sexual_education/urls domainlist sexual_education/domains logfile /var/log/squid/sexual_education.log #expressionlist sexual_education/usage } dest tricheur { urllist tricheur/urls domainlist tricheur/domains logfile /var/log/squid/tricheur.log } acl { admin { pass any redirect http://IPDEVOTRESERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u } workers within workhours { pass !adult !associations_religieuses !hacking !sect !aggressive !ads !filehosting !porn !drugs !phishing !marchands_de_guerre !malware !violence !dangerous_material !redirector !warez !marketingware !proxy !remote-control !strict_redirector !mixed_adult !publicite !strong_redirector !chat !agressif !drogue !gambling !sexual_education !tricheur any redirect http://IPDEVOTRESERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u } else { pass !adult !associations_religieuses !hacking !sect !aggressive !ads !filehosting !porn !drugs !phishing !marchands_de_guerre !malware !violence !dangerous_material !redirector !warez !marketingware !proxy !remote-control !strict_redirector !mixed_adult !publicite !strong_redirector !chat !agressif !drogue !gambling !sexual_education !tricheur any redirect http://IPDEVOTRESERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u } default { pass none redirect http://IPDEVOTRESERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u } }
Détail du fichier:
Ceci sert à indiquer l’emplacement des fichiers de la blackliste et des logs:
dbhome /var/lib/squidguard/db/blacklists logdir /var/log/squid/
Ce n’est pas obligé mais vous pouvez indiquer des plage horaires pour les restrictions:
Manager les spécifications des plages horaires:
# # TIME RULES: # abbrev for weekdays: # s = sun, m = mon, t =tue, w = wed, h = thu, f = fri, a = sat # Libre pour noël du 24 à 19h au 25 à 00h # libre le 1 janvier toute la journée time SpecialsDays { date *.12.24 19:00 - 00:00 date *.12.25 date *.01.01 }
Ici nous ajoutons les groupes horaires:
time workhours { weekly mtwhf 08:00-19:00 }
On créés les groupes utilisateurs:
src admin { ip 192.168.X.X #
On déclare les blacklistes à utiliser:
dest ads { urllist ads/urls domainlist ads/domains logfile /var/log/squid/ads.log }
On créé les acl des règles de filtrage:
acl { admin { pass any redirect http://192.168.0.10/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u } workers within workhours { pass !ads !social_networks !porn any redirect http://ADRESSEIPDUSERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u } else { pass !ads !porn any redirect http://ADRESSEIPDUSERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&clientname=%n&clientident=%i&srcclass=%s&targetclass=%t&url=%u } default { pass none redirect http://ADRESSEIPDUSERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&srcclass=%s&targetclass=%t&url=%u } }
On redémarre Squid:
service squid restart
Maintenant vous voudriez peut être avec quelques stats sur les sites bloqués ou visités ?
Voici comment faire !
Source: http://lightsquid.sourceforge.net/
Je ne vais pas détailler ici la manière d’ajouter un site web à ISPConfig je vais faire un article la dessus bientôt.
Donc je pars du principe que vous avez créer votre site.
Suivez le guide (pensez à modifier « PATH » avec le bon chemin):
cd /var/www/PATH/web/ mkdir site wget http://blog.razorbreak.com/wp-content/uploads/2016/12/lightsquid-1.8.tar tar -xvf lightsquid-1.8.tar mv /var/www/PATH/web/site/lightsquid-1.8/* /var/www/PATH/web/site/ rm -rf /var/www/PATH/web/site/lightsquid-1.8 rm /var/www/PATH/web/site/lightsquid-1.8.tar
Donnez les droits d’exécution:
cd site chmod +x *.cgi chmod +x *.pl
Donnez les droits au client du site (j’ai indiqué USER:GROUPE mais vous devez renseigner le bon user et le bon groupe, avec ISPConfig ex: web12:client2 ):
chown USER:GROUP *
Dans les options APACHE des paramètres de votre site sous ISPconfig, renseingez:
<Directory "/var/www/PATH/web/site"> AddHandler cgi-script .cgi AllowOverride All </Directory>
Editer le fichier de conf.
On fais un backup:
cp lightsquid.cfg lightsquid.cfg.ori
On le modifi:
nano lightsquid.cfg
Les lignes suivantes:
# -------------------- GLOBAL VARIABLES --------------------------- #path to additional `cfg` files $cfgpath ="/var/www/PATH/web/site"; #path to `tpl` folder $tplpath ="/var/www/PATH/web/site/tpl"; #path to `lang` folder $langpath ="/var/www/PATH/web/site/lang"; #path to `report` folder $reportpath ="/var/www/PATH/web/site/report"; #path to access.log $logpath ="/var/log/squid"; #path to `ip2name` folder $ip2namepath ="/var/www/PATH/web/site/ip2name";
Ainsi que:
#see `lang` folder (avaible: bg,eng,fr,hu,it,pt_br,ru,sp) $lang ="fr";
Il faut configurer un cron job pour qu’il exécute le script régulièrement, pour avoir des stats à jour:
crontab -e
Ajouter la ligne:
*/20 * * * * /var/www/PATH/web/site/check-setup.pl today
Exécutez la commande suivante:
/var/www/PATH/web/site/check-setup.pl
Vous obtiendrez surement le message suivant à la fin:
no: GD.PM found, please install or set $graphreport=0 to disable
Soit vous le désactiver via la ligne suivante dans le fichier de conf pour changer le 1 en 0:
$graphreport = 0;
Soit nous faisons fonctionner les stats (c’est plus sympa non?)
Donc pour les stats il faut installer ceci:
apt-get install libgd-gd2-perl
Un peu plus d’explications ici
Maintenant vous devriez avoir un résultat similaire:
Un peu plus de paramètres ici.
Voila, vous avez un proxy fonctionnel et efficace et en prime un peu de stats !!! Génial non ?
Un remerciement tout spécial pour le site ophyde.com qui ma énormément aidé à réaliser ce tuto.
DOESIT.
Leave a Reply