SQUID – Installation et configuration serveur proxy

Définition
Les serveurs proxy permettent de sécuriser et d’améliorer l’accès à certaines pages Web en les stockant en cache (ou copie). Ainsi, lorsqu’un navigateur envoie une requête sur la demande d’une page Web qui a été précédemment stockée, la réponse et le temps d’affichage en sont améliorés. L’utilisateur accède plus rapidement au site et ne sature pas le proxy pour sortir. Les serveurs proxy renforcent également la sécurité en filtrant certains contenus Web et les logiciels malveillants.
Filtrage
Le filtrage est appliqué en fonction de la politique de sécurité en place sur le réseau. Ceci permet de bloquer selon une liste noire, les sites considérés comme malveillants et/ou inutiles au contexte de travail de l’entreprise (pornographie … etc)
Authentification
Afin de limiter l’accès au réseau extérieur, et de renforcer ainsi la sécurité du réseau local, il peut être nécessaire de mettre en place un système d’authentification pour accéder aux ressources extérieures. Ceci est assez dissuasif pour les utilisateurs souhaitant visiter des sites contraires à la charte de leur système d’information. Ils se sentent suivis et restent « sages » dans leurs recherches.
Stockage des Logs
Le stockage, des logs des sites visités et des pages vues, permet à l’administrateur du réseau de redéfinir la politique de sécurité du réseau et/ou d’intervenir auprès d’un utilisateur qui visite fréquemment des sites malveillants ou sans rapport avec l’activité de l’entreprise.
Installation
- Mettre à jour la distribution Debian :
Installation du proxy Squid :
Configuration
Avant la modification du fichier de configuration, faire une copie de celui-ci.
# cp /etc/squid/squid.conf /etc/squid/squid.conf.old |
Ensuite, retirer tous les commentaires du fichier pour une meilleure lisibilité.
# vi /etc/squid/squid.conf |
Ensuite :
le fichier /etc/squid/squid.conf ressemblera à cela :
# mise en place d'un proxy server
# Config du proxy parent avec authentification
cache_peer 192.168.20.100 parent 8080 0 default no-query login=user:mdp!strong
# règle d'autorisation pour notre réseaux booktic
never_direct allow all
# nom spécial utilisé dans les logs d'erreur
visible_hostname squid_mous
# fourni l'e mail de l'admin en cas d'arrêt du serveur
cache_mgr user@mail.ovh
# squid ajoute l'ip dans la requête http
forwarded_for off
# avoir les messages d'erreur en francais
error_directory /usr/share/squid/errors/French
# le tag acl qui permet de définir un contrôle d'accès.
acl monreseaux src 172.16.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
#donne l'autorisation d'accés au Web au machine appartenant au 172.16.0.0/8
http_access allow monreseaux
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny all
# Port d'écoute
http_port 3128
# mémoire alloué à squid
cache_mem 50 MB
# gestion de fichiers :
coredump_dir /var/spool/squid
# tag pour la gestion du rafraichissement des objets en cache.
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
Explications :
http_port écoute sur toutes les interfaces réseau sur le port 3128
coredump_dir indique le répertoire pour les fichiers d’erreur.
refresh_pattern précisent les règles qui établissent si un fichier est “frais” ou “périmé”. Un fichier “périmé” est supprimé du cache. laissez les règles par défaut.
refresh_pattern ne contrôle le cache disque qu’indirectement. Il aide Squid à décider si une requête donnée peut ou non être un mise de cache ou doit être traitée comme une erreur. Les paramètres libéraux augmentent votre taux de réponse du cache mais augmentent également les chances que les utilisateurs reçoivent une réponse périmée. Les paramètres conservateurs, par contre, diminuent les taux de réussite et les réponses désuètes.
visible_hostname : définit le nom du serveur squid
Gopher est assez rares de nos jours. Squid connaît aussi WAIS et whois, mais ceux-ci sont encore plus obscurs.
Apres configuration pour un usage simple, sans squidguard ni authentification :
Dans cette nouvelle configuration,
Ci-dessous une configuration qui prend en compte :
- Un proxy parent
- Authentification AD
- Squidguard
- cache pour accélérer la navigation
#mise en place d'un proxy server
cache_peer 192.168.20.100 parent 8080 0 default no-query login=user:mdp!strong
never_direct allow all
#nom special utilisé dans les logs d'erreur
visible_hostname squid_mous
#fourni l'email de l'admin en cas d'arret d serveur
cache_mgr user@mail.ovh
#squid ajoute l'ip dans la requette http
forwarded_for on
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
acl monreseaux src 172.16.0.0/16
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 1025-65535 # unregistered ports
acl CONNECT method CONNECT
http_access allow monreseaux
#http_access allow ncsa
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny all
#Port d'écoute
http_port 3128
#mémoire alloué a squid
cache_mem 50 MB
coredump_dir /var/spool/squid
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
#utiliser le cache pour accélérer le transfert de données
cache_dir ufs /opt/squid 1000 16 256
maximum_object_size 100 MB
#refresh_pattern .*\.(mp4|iso) 2880
Exemple de message d’erreur : 
Débug avec la commande :
Mise en place d’une authentification AD
reference : https://doc.ubuntu-fr.org/tutoriel/comment_mettre_en_place_un_proxy_squid_avec_authentification_active_directory
Pour cela, nous donnerons des noms à certains éléments comme suit :
- Le nom du domaine, s’appelera ici mabooktic.lan ;
- Le nom du DC (Contrôleur de domaine), s’appelera ici ad ;
- Le compte administrateur du DC, s’appelera ici Administrateur ;
- Le nom de la machine Squid s’appelera ici PROXY_FTP ;
Installer les paquets sur le serveur squid
# apt install samba krb5-user libpam-krb5 ntpdate winbind |
mettre l’heure a la même heure entre la machine proxy et l’ad
sudo ntpdate 172.16.2.110 |
Modifier le fichier /etc/hosts
ajouter cette ligne ( pour la résolution du fqdn)
172.16.2.110 ad.mabooktic.lan
172.16.2.6 PROXY_FTP.mabboktic.lan ad
|
Ouvrir et modifier le fichier /etc/krb5.conf
[libdefaults]
default_realm = MABOOKTIC.LAN
clock_skew = 300
ticket_lifetime = 24000
dns_lookup_realm = false
dns_lookup_kdc = false
default_tgs_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
default_tkt_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
permitted_enctypes = aes256-cts-hmac-sha1-96 rc4-hmac des-cbc-crc des-cbc-md5
[realms]
MABOOKTIC.LAN = {
kdc = ad.MABOOKTIC.lan
admin_server = ad.MABOOKTIC.lan
default_domain = MABOOKTIC.LAN
}
[domain_realm]
.MABOOKTIC.LAN = MABOOKTIC.LAN
MABOOKTIC.LAN = MABOOKTIC.LAN
[login]
krb4_convert=true
krb4_get_tickets=false
[logging]
kdc = FILE:/var/log/krb5kdc.log
admin_server = FILE:/var/log/kadmin.log
default = FILE:/var/log/krb5lib.log
Ouvrir et modifier le fichier /etc/nsswitch.conf
# /etc/nsswitch.conf
#
# Example configuration of GNU Name Service Switch functionality.
# If you have the `glibc-doc-reference' and `info' packages installed, try:
# `info libc "Name Service Switch"' for information about this file.
passwd: compat winbind
group: compat winbind
shadow: compat
gshadow: files
hosts: files dns
networks: files
protocols: db files
services: db files
ethers: db files
rpc: db files
netgroup: nis
lancer la commande :
sudo kinit Administrateur |
(saisir le mot de passe associé à Administrateur dans l’Ad)
Commande pour voir les tickets kerberos :

Arrêter les services samba et winbind

Joindre la machine proxy au domaine :

Relancer le service winbind et samba :
/etc/init.d/winbind start |
Tester avec la commande :

Tester la commande wbinfo -u pour voir la liste des utilisateurs
Tester la connexion :
/usr/bin/ntlm_auth –helper-protocol=squid-2.5-basic |
Vérifier si la machine proxy est jointe à l’AD :

#mise en place d'un proxy server
cache_peer 192.168.20.100 parent 8080 0 default no-query login=user:mdp!strong
acl kelkserver dstdomain epbooktic.local
always_direct allow kelkserver
#regle d'autorisation pour notre reseaux booktic
never_direct allow all
#nom special utilisé dans les logs d'erreur
visible_hostname squid_mous
#fourni l'email de l'admin en cas d'arret d serveur
cache_mgr user@mail.ovh
#squid ajoute l'ip dans la requette http
forwarded_for on
url_rewrite_program /usr/bin/squidGuard -c /etc/squid/squidGuard.conf
append_domain .mabooktic.lan
#config authentification ad
auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp
auth_param ntlm children 5
auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic
auth_param basic children 5
auth_param basic credentialsttl 2 hours
# infos
# Pour n'autoriser le surf qu'à un groupe d'Active Directory spécifique,
#rajouter le paramètre require-membership-of au programme ntlm_auth comme ceci :
#auth_param ntlm program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-ntlmssp --require-membership-of=DOMAINEAD\\groupead
#auth_param basic program /usr/bin/ntlm_auth --helper-protocol=squid-2.5-basic --require-membership-of=DOMAINEAD\\groupead
acl monreseaux src 172.16.0.0/8
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 21 # ftp
acl Safe_ports port 443 # https
acl ntlm proxy_auth REQUIRED
#??
acl CONNECT method CONNECT
#?
http_access allow monreseaux
http_access allow ntlm
http_access deny CONNECT !SSL_ports
http_access deny !Safe_ports
http_access deny all
#Port d'ecoute
http_port 3128
#memoire alloué a squid
cache_mem 50 MB
coredump_dir /var/spool/squid
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
#utiliser le cache pour accelerer le transfert de données
cache_dir ufs /opt/squid 1000 16 256
maximum_object_size 100 MB
#refresh_pattern .*\.(mp4|iso) 2880