Différences entre versions de « Squid »
Ligne 273 : | Ligne 273 : | ||
== Le redirecteur == | == Le redirecteur == | ||
+ | |||
+ | Le redirecteur est un peu plus performant que la 'blackliste' dans le sens ou il va 'filtrer' les requêtes du client et demander à 'Squid' de ne chercher que le contenu. | ||
+ | Cette recherche à base de 'REGEX', ce fais en amont et remplacera l'écran d'erreur de 'Squid' (ci-dessus), par un carré vide (peut-être mieux visuellement). | ||
+ | |||
+ | == Récupération == | ||
+ | |||
+ | Tout d'abords on va récupérer l'archive contenant [http://adzapper.sourceforge.net/#download ''Adzaper''], le programme que l'on va utiliser. | ||
+ | |||
+ | <pre> | ||
+ | # wget http://adzapper.sourceforge.net/adzap-20110915.tar.gz | ||
+ | # tar -zxf adzap-20110915.tar.gz | ||
+ | </pre> | ||
+ | |||
+ | == Installation == | ||
+ | |||
+ | Une fois l'archive décompressée, on va: | ||
+ | * copier le fichiers 'wrapzap' | ||
+ | * se déplacer dans le répertoire '/opt/squid' | ||
+ | * télécharger le redirecteur 'squid_redirect' | ||
+ | * rendre les deux fichiers exécutables | ||
+ | * éditer le fichier 'wrapzap' | ||
+ | |||
+ | <pre> | ||
+ | # cp adzap-20110915/scripts/wrapzap /opt/squid | ||
+ | # cd /opt/squid | ||
+ | # wget http://adzapper.sourceforge.net/scripts/squid_redirect | ||
+ | # chmod +x wrapzap squid_redirect | ||
+ | # vi wrapzap | ||
+ | </pre> | ||
+ | |||
+ | Dans le fichier 'wrapzap', on va adapter la directive 'zapper' : | ||
+ | |||
+ | <pre> | ||
+ | zapper=/opt/squid/squid_redirect | ||
+ | </pre> | ||
+ | |||
+ | Enfin on va ajouter la ligne suivante dans '/etc/squid/squid.conf' | ||
+ | |||
+ | <pre> | ||
+ | redirect_program /opt/squid/wrapzap | ||
+ | </pre> |
Version du 26 janvier 2014 à 18:39
Mode basic | Mode transparent | |
---|---|---|
Protocole | tcp | tcp |
Port | 3128 | 80 |
Configuration Iptables | iptables -I INPUT 2 -p tcp --dport 3128 -j ACCEPT | iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 3128 |
Préparation
Dans un premier temps, il faudra avoir une connexion à Internet, utiliser un serveur DNS et désactiver SELinux.
Pour ceux qui auraient manqué des étapes les voici:
Une fois ces étapes effectuées, entrons dans le vif du sujet !
Installation
# yum -y install squid
Configuration
Réseaux source
Commençons par spécifier le réseaux duquel parviennent les requêtes HTTP.
Pour cela, remplacer les lignes suivantes dans le fichier /etc/squid/squid.conf
acl localnet src 10.0.0.0/8 # RFC1918 possible internal network acl localnet src 172.16.0.0/12 # RFC1918 possible internal network acl localnet src 192.168.0.0/16 # RFC1918 possible internal network
un peu trop permissive par
acl localnet src 192.168.1.0/24 # RFC1918 possible internal network
Pour autoriser le réseau 192.168.1.0/24
Mode proxy basique
Dans ce mode, il est obligatoire de configurer les navigateurs des clients pour qu'il passent par le proxy. Il n'y a rien d'autre a faire qu'ouvrir le port 3128 du pare-feu et configurer le navigateur en conséquence.
# iptables -I INPUT 2 -p tcp --dport 3128 -j ACCEPT # service squid start
On vérifie que Squid écoute sur le bon port
# netstat -atnp | grep squid tcp 0 0 0.0.0.0:3128 0.0.0.0:* LISTEN 8432/(squid)
Mode proxy transparent
Ce mode est beaucoup plu intéressant car il ne nécessite aucune configuration au niveau des navigateurs clients.
L'astuce consiste à rediriger le trafic passant sur le port TCP/80 vers le port TCP/3128
# iptables -t nat -A PREROUTING -s 192.168.1.0/24 -p tcp --dport 80 -j REDIRECT --to 3128
Il faut ensuite modifier la ligne suivante dans le fichier /etc/squid/squid.conf
http_port 3128 intercept transparent
Pour plus d'informations sur les avantages / inconvénients de la transparence vous pouvez consulter ces liens:
Les options intéressantes
Activation du cache
Pour que le proxy puisse mémoriser le contenu statique des requêtes et ainsi accélérer le trafic, il faut activer le cache.
Pour cela, repérez la ligne
# cache_dir ufs /var/spool/squid 100 16 256
et remplacer la par
cache_dir ufs /var/spool/squid 100 16 256 cache_mem 100 MB cache_effective_user squid cache_effective_group squid
Avant de lancer Squid, il faut qu'il génère les fichiers du cache
# squid -z 2014/01/23 08:17:23| Creating Swap Directories 2014/01/23 08:17:23| /var/spool/squid exists 2014/01/23 08:17:23| Making directories in /var/spool/squid/00 2014/01/23 08:17:23| Making directories in /var/spool/squid/01 2014/01/23 08:17:23| Making directories in /var/spool/squid/02 2014/01/23 08:17:23| Making directories in /var/spool/squid/03 2014/01/23 08:17:23| Making directories in /var/spool/squid/04 2014/01/23 08:17:23| Making directories in /var/spool/squid/05 2014/01/23 08:17:23| Making directories in /var/spool/squid/06 2014/01/23 08:17:23| Making directories in /var/spool/squid/07 2014/01/23 08:17:23| Making directories in /var/spool/squid/08 2014/01/23 08:17:23| Making directories in /var/spool/squid/09 2014/01/23 08:17:23| Making directories in /var/spool/squid/0A 2014/01/23 08:17:23| Making directories in /var/spool/squid/0B 2014/01/23 08:17:23| Making directories in /var/spool/squid/0C 2014/01/23 08:17:23| Making directories in /var/spool/squid/0D 2014/01/23 08:17:23| Making directories in /var/spool/squid/0E 2014/01/23 08:17:23| Making directories in /var/spool/squid/0F
Cela créera un cache de 100Mo, vous pouvez le modifiez en fonction de votre trafic.
Il ne reste plus qu'a tester le cache pour un fichier statique (ici photo.jpg)
# cat /var/log/squid/access.log | grep photo.jpg 1390462989.170 859 192.168.50.101 TCP_MISS/200 35435 GET http://www.squid.org/wp-content/uploads/2009/03/photo.jpg - DIRECT/204.10.35.1 image/jpeg 1390463000.043 1 192.168.50.101 TCP_MEM_HIT/200 35442 GET http://www.squid.org/wp-content/uploads/2009/03/photo.jpg - NONE/- image/jpeg
La première fois que le fichier est demandé on a un TCP_MISS et, en revanche, la deuxième fois on a bien un TCP_MEM_HIT !
Préciser le nom de la machine
Quand le proxy possède plusieurs nom dans le DNS (CNAME) il peut être utile de préciser celui qui est utilisé dans les fichiers de logs ou s'il existe plusieurs caches dans un cluster.
visible_hostname squid
Réduire le downtime
Si vous avez déjà redémarrer Squid, le temps d'arrêt n'a pas du vous échapper ! 30 secondes... il est possible de réduire ce temps en utilisant la directive shutdown_lifetime
shutdown_lifetime 2 seconds
Enregistrement dans le chargeur de démarrage
# chkconfig squid on
Génération de rapports
Comme vous avez pu le constater, le fichier /var/log/squid/access.log contient beaucoup d'informations mais n'est pas très lisible. Pour extraire et formater les données de ce fichier nous allons utiliser Calamaris.
Pré-requis
Avant d'aller plus loin, il sera nécessaire d'installer le dépôt EPEL et d'avoir un serveur Web pour afficher le rapport
Installation
# yum -y install calamaris
Génération de rapport
# calamaris -a -F html -l '<img src="http://wiki/skins/common/images/labo-logo.jpg"/>' /var/log/squid/access.log > /var/www/html/index.html
Cela donne un rapport qui contient toutes les informations nécessaires:
- -a → pour extraire toutes les informations ;
- -F → pour préciser le format de sortie (ici HTML);
- -l → pour spécifier un logo
Automatisation
Maintenant il ne reste plus qu'à automatiser cette génération avec un cron
On va créer le script 'calamaris.sh' dans le répertoire '/opt/squid'
# mkdir -p /opt/squid # vi /opt/squid/calamaris.sh
Pour y placer les lignes suivantes:
#!/bin/bash
calamaris -a -F html -l '<img src="http://wiki/skins/common/images/labo-logo.jpg"/>' /var/log/squid/access.log > /var/www/html/index.html
chown apache.apache /var/www/html/index.html
A le rendre exécutable
chmod +x /root/calamaris.sh
Et le mettre dans le crontab avec la commande crontab -e (plus d'information sur cron)
*/10 * * * * /root/calamaris.sh
Le script sera exécuter toutes les 10 minutes !
Blocage des pubs
La blackliste
Principe
C'est le même système que pour les mails et qui consiste en une liste, pas toujours exhaustive, de tous les noms de domaines qui servent aux publicistes. Cette liste est disponible ici
Création du script
On va créer un script dans le répertoire '/opt/squid' qui va:
- télécharger ce fichier dans le répertoire de Squid
- recharger la configuration de Squid
#!/bin/bash
wget -O /etc/squid/ad_block.db 'http://pgl.yoyo.org/adservers/serverlist.php?hostformat=squid-dstdom-regex&showintro=0'
squid -k reconfigure
Configuration de Squid
On va ajouter les lignes suivantes dans le fichier de configuration de Squid
acl ads dstdom_regex "/etc/squid/ad_block.db" http_access deny ads
Automatisation
Enfin on ajoute une entrée dans le crontab avec la commande crontab -e (plus d'information sur cron):
* 0 * * * /opt/squid/ad-updater.sh
Tous les jours à minuit le script sera exécuté !
Test
Maintenant, lorsqu'une page de pub fait son apparition, vous devriez avoir ceci:
Le redirecteur
Le redirecteur est un peu plus performant que la 'blackliste' dans le sens ou il va 'filtrer' les requêtes du client et demander à 'Squid' de ne chercher que le contenu. Cette recherche à base de 'REGEX', ce fais en amont et remplacera l'écran d'erreur de 'Squid' (ci-dessus), par un carré vide (peut-être mieux visuellement).
Récupération
Tout d'abords on va récupérer l'archive contenant Adzaper, le programme que l'on va utiliser.
# wget http://adzapper.sourceforge.net/adzap-20110915.tar.gz # tar -zxf adzap-20110915.tar.gz
Installation
Une fois l'archive décompressée, on va:
- copier le fichiers 'wrapzap'
- se déplacer dans le répertoire '/opt/squid'
- télécharger le redirecteur 'squid_redirect'
- rendre les deux fichiers exécutables
- éditer le fichier 'wrapzap'
# cp adzap-20110915/scripts/wrapzap /opt/squid # cd /opt/squid # wget http://adzapper.sourceforge.net/scripts/squid_redirect # chmod +x wrapzap squid_redirect # vi wrapzap
Dans le fichier 'wrapzap', on va adapter la directive 'zapper' :
zapper=/opt/squid/squid_redirect
Enfin on va ajouter la ligne suivante dans '/etc/squid/squid.conf'
redirect_program /opt/squid/wrapzap