Un Calamar dans mon serveur ?

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&amp;clientname=%n&amp;clientident=%i&amp;srcclass=%s&amp;targetclass=%t&amp;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&amp;clientname=%n&amp;clientident=%i&amp;srcclass=%s&amp;targetclass=%t&amp;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&amp;clientname=%n&amp;clientident=%i&amp;srcclass=%s&amp;targetclass=%t&amp;url=%u
}

default {
pass none
redirect http://IPDEVOTRESERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&amp;srcclass=%s&amp;targetclass=%t&amp;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&amp;clientname=%n&amp;clientident=%i&amp;srcclass=%s&amp;targetclass=%t&amp;url=%u
}

workers within workhours {
pass !ads !social_networks !porn any
redirect http://ADRESSEIPDUSERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&amp;clientname=%n&amp;clientident=%i&amp;srcclass=%s&amp;targetclass=%t&amp;url=%u
}
else {
pass !ads !porn any
redirect http://ADRESSEIPDUSERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&amp;clientname=%n&amp;clientident=%i&amp;srcclass=%s&amp;targetclass=%t&amp;url=%u
}
default {
pass none
redirect http://ADRESSEIPDUSERVEUR/cgi-bin/squidGuard.cgi?clientaddr=%a&amp;srcclass=%s&amp;targetclass=%t&amp;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

Your email address will not be published.




Le temps imparti est dépassé. Merci de recharger le CAPTCHA.

Ce site utilise Akismet pour réduire les indésirables. En savoir plus sur comment les données de vos commentaires sont utilisées.