Squid avec ssl
Squid avec ssl jpp
Note avril 2020 : Squid (version 4.9-20200102) est toujours actif et j'ajoute régulièrement quelques données dans les fichiers de filtrage pour définir quelques origines gênantes et je récupère toutes les semaines les informations sur les serveurs de pub depuis https://pgl.yoyo.org
Note juin 2018 : j'utilise toujours Squid (version 4.0.25) sur mon système frontal ce qui permet de bloquer certains sites de pub un peu trop intrusifs et aussi d'accélérer l'affichage. Pour voir le principe des "ACL" et quelques exemples aller ici.
Note septembre 2017, en cas d'ennui de compilation vérifier l'installation de :
libssl-dev et libcrypto++-dev
apt-get install libssl-dev libcrypto++-dev
La version qui "tourne" actuellement est la version 3.5.19-20160618-r14061. Je recompile une nouvelle version de temps en temps, quelques "trucs" que j'utilise sont décrits en annexe.
Surtout ne pas oublier d'installer votre certificat sur les postes client !
J'ai voulu essayer d'utiliser Squid3 en proxy SSL, mais malheureusement le binaire proposé par Debian est compilé sans l'option SSL. Pour persister dans mon idée il m'a fallu passer par les sources et je vous conte ci-après l'histoire correspondante.
Cette opération a été réalisée sur une machine Debian 7.4, pour d'autres distributions les répertoires peuvent varier.
Télécharger la dernière archive (pour moi : squid-3.5.02.tar.xz) et la décompresser dans un répertoire tranquille, j'utilise /usr/src/PGM/BUILD comme répertoire de base et ne touche pas à la disposition "classique des programmes locaux dans /usr/local/....
J'ai mis les options de configuration qui m'intéressent dans le petit script suivant :
#!/bin/bash OPTIONS=' --with-default-user=squid ' cd squid-3.5 ./bootstrap.sh ./configure $OPTIONS 2>&1 | tee LOG.CONFIGURE make clean 2>&1 | tee LOG.CLEAN make 2>&1 | tee LOG.MAKE exit |
Il ne reste plus qu'à vérifier les logs et lancer un "make install" (en root).
Ainsi je pourrais compiler d'autres versions sans ennuis, du moins en principe.
Après un essai de compilation "direct" j'ai eu des ennuis à la première exécution. Après recherche j'ai suivi la procédure conseillée (internet dixit) : lancer avant toute chose dans le répertoire de Squid la commande "./bootstrap.sh" qui configure elle même plein de trucs ... en résultat tout est OK (Le script ci-dessus vous évite ce genre d'ennui.
Après ce petit baratin on lance le truc et on commence pas aller dans le répertoire de Squid et on lance la grande magie :
./bootstrap.sh
On lance le petit script de configuration créé précédemment. Puis le fatidique :
make 2>&1 | tee MAKE.LOG
La compilation est assez longue, presque autant que celle d'un noyau Linux!
Ensuite on peut passer au "make install" en "root" bien sûr !
On reste "root" pour la suite, il faut, dans le répertoire par défaut (pour moi /usr/local/squid) :
- Créer un répertoire pour stocker le certificat racine de notre autorité
mkdir ssl_cert - Créer un certificat
Voir le script joint - Créer un repertoire "lib" dans /usr/local/squid/var
mkdir lib - initialiser le répertoire de cache des certificats créés
/usr/local/squid/libexec/ssl_crtd -c -s /usr/local/squid/var/lib/ssl_db
Note : Si le répertoire existe, tout le monde peut faire des erreurs ! Il faut le détruire avant de relancer la commande. Dans ce cas ne pas oublier :
chown -R squid:squid /usr/local/squid/var/lib/ssl_db"
- Initialiser les pages de messages d'erreur dans /usr/local/squid/share/errors
- Créer un répertoire "fr" et un lien de "fr" vers "fr-fr"
- copier le répertoire "templates" dans "fr" et, pour bien faire traduire les pages !
cd /usr/local/squid/share/errors
mkdir fr
ln -s fr fr-fr
cp ./templates/* ./fr
- Créer un user "squid" groupe "squid" sans droit de login
- Comme le user d'exécution prévu est "squid" faire un "chown -R squid:squid /usr/local/squid"
Pour la suite je considère que vous avez déjà un fichier de config qui fonctionne en HTTP classique avec les "acl" et filtres qui vous conviennent. Si ce n'est pas le cas commencer par ce point pour que le cache fonctionne selone vos désirs en HTTP. Pour tester configurez votre navigateur avec Squid comme proxy, dans ce cas otez l'option "transparent" de la configuration, vous la remettrez plus tard avant d'activer le système de redirection.
Ajouter les paramètres adéquats dans le fichier de configuration "squid.conf" :
# # # INSERT YOUR OWN RULE(S) HERE TO ALLOW ACCESS FROM YOUR CLIENTS # Squid normally listens to port 3128 |
Il faut alors mettre en place une redirection de ports des ports entrants 80 et 443 vers la machine "Squidifiée" sur les ports 3128 et 3129.
Voir le script joint "Redirection iptables".
Récupérer un script d'init (il n'y en a pas dans le paquet source) ou bien récupérez celui joint ici (repris de Debian avec quelques adaptations à "/usr/local/squid") puis lancer :
service squid start
Et c'est parti ... enfin presque il vous faut avant tout usage HTTPS aller installer votre fichier ".crt" dans le magasin de certificats des browsers du réseau.
Sinon c'est le blocage assuré de tous les sites HTTPS !
C'est le seul inconvénient du proxy HTTPS, comme il doit signer les certificats qu'il vous envoie en lieu et place de ceux qu'il a négociés avec le site il faut qu'il dispose d'une autorité adéquate. Tous les navigateurs disposent de cette possibilité, mais c'est une contrainte importante.
Pour "curl" et "wget" il faut copier votre certificat de CA dans /etc/ssl/certs, puis l'ajouter à la fin du fichier /etc/ssl/certs/ca-certificates.crt.
A part cela c'est le seul moyen de cacher efficacement les pages HTTPS.
Remarque :
Depuis la version du 2 juillet 2015 il est nécessaire d'effectuer une petite modif pour éviter un plantage fatal au démarrage avec message :
"icmp_sock: (1) Operation not permitted".
Il suffit de passer le binaire "pinger" (dans squid/libexec) en mode suid root :
cd le_repertoire_de_squid cd libexec chown root:squid pinger chmod 4755 pinger |
ou de réaliser un "make install-pinger".
Comme "pinger" utilise des ports "au hasard" (?) j'ai préféré ajouter l'option "pinger_enable false" dans mon fichier "squid.conf".
Scripts joints :
- Création certificat
- Script d'init
- Exemple de redirection IPTABLES