Mettre en place un serveur Squid

Squid est complémentaire aux pare-feux et à généralement pour rôle de mandataire en se faisant passé pour les utilisateurs qui se trouvent sur son réseau. Ainsi les utilisateurs du réseau privé qui naviguent sur Internet seront représenté par le mandataire. Bien que les PF agissent au niveau 3 et 4 des couches du modèle OSI, Squid agit à la couche 7 (applicative) de manière plus précise en définissant des règles et des droits d'accès.

Squid est le meilleur outil de gestion de cache sur le marché. Il y a également ces points forts :

  • Authentification et suivi des utilisateurs
  • Capable d'utiliser un anvivirus
  • Accélère la navigation Internet (grâce au cache)
  • Réalise une économie sur l'utilisation de la bande passante

Cependant, il peut y avoir de fort ralentissements s'il est mal configuré et ne disposant pas assez de mémoire par exemple.

Il dispose de 3 modes de fonctionnement :

  • Solitaire (adapté pour les réseaux à faible débit)
  • Filiation (adapté lors de grandes infrastructures)
  • Collatéral (adapté pour l'équilibre de charge)

Comportement et retours d'expériences :

  • S'il rencontre trop de problèmes, le processus s'arrête (ex trop de création de dossiers pour son cache)
  • Il est nécessaire de faire un restart du service pour qu'il prennent en compte les changements importants écrit dans le fichier de configuration.

Installer Squid en mode solitaire

Le paquet est disponible dans les dépôts Debian :

apt-get install squid3

Le fichier de configuration se situe dans le dossier suivant :

nano /etc/squid3/squid.conf

En renseignant au minimum ces paramètres :

  • L'emplacement du cache
cache_dir ufs /var/spool/squid3 100 16 256
  • Le port d'écoute
http_port 3128

Il est possible d'être plus précis en lui disant sur quel IP écouter : http_port 192.168.1.200:3128

Voici par exemple lefichier de configuration que j'utilise chez moi :

Cliquez pour afficher ⇲

Cliquez pour masquer ⇱

squid.conf
acl localnet src 192.168.0.0/24 # 10.0.0.0/24 RFC1918 possible internal network
 
acl SSL_ports port 443
acl Safe_ports port 443         # https
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
 
http_access allow Safe_ports
 
http_access allow SSL_ports
 
http_access allow localhost manager
http_access deny manager
 
http_access allow localnet
 
http_access deny all
 
http_port 0.0.0.0:3128
 
cache_dir ufs /var/spool/squid3 100 16 256
 
coredump_dir /var/spool/squid3
 
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

Il nous reste plus qu'a recharger le service :

service squid3 reload

La journalisation des évènements se situe dans le dossier suivant :

multitail /var/log/squid3/*

Mode filiation et collatéral

Il suffit seulement d'utiliser ces lignes :

  • L'utiliser en tant que “enfant” au près d'un père :
cache_peer 192.168.1.254 parent 3128 0 proxy-only
  • Faire de la redondance en utilisant le protocol ICP :
icp_port 3129
cache_peer 192.168.1.254 sibling  3128 0 default

Pour voir d'autres paramètres, il est recommandé de lire la documentation officielle : http://www.squid-cache.org/

Définir des droits (ACL)

  • Autoriser une plage d'adresse à utiliser Squid

syntaxe :

acl nom type détail

exemple :

acl localnet src 172.17.0.0/16
acl users dst 192.168.2.0/24 192.168.1.0/24

Puis on défini la règle explicitement :

http_access allow localnet
  • Bloquer un domaine
acl google.url url_regex -i *.google.*
http_access deny google.url

Il est également possible de faire la même chose :

http_access allow !google.url

Authentification

Définissons en premier le mot de passe d'un utilisateur. Mais avant téléchargeons le paquet qui va nous permettre de faire cela :

apt-get install apache2-utils

Créons le mot de passe :

htpasswd -c /etc/squid3/mdp mon_utilisateur

Il suffit par la suite de rajouter dans la configuration de squid :

nano /etc/squid3/squid.conf
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid3/mdp
auth_param basic children 5 startup=5 idle=1
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours

acl authentification proxy_auth REQUIRED
http_access allow authentification

Enfin on relance la configuration :

service squid3 restart

Blacklist d'URL

Ce site ou celui-ci dispose de plusieurs listes pour bloquer un grand nombre de domaines rapidement où il suffira simplement de les mettre à jour avec une commande par la suite.

Cette méthode de mise en place st peut-être adapté ? https://michauko.org/blog/squidguard-filtre-durl-et-listes-a-jour-le-plus-dur-313/

L’académie de Toulouse maintient une liste, utilisée par toute l’Education Nationale, de sites dont l’utilisation est à déconseiller aux élèves. Elle fournit aussi des scripts de mise à jour automatique de ces listes.