Différences entre versions de « Squid »
Ligne 359 : | Ligne 359 : | ||
* un serveur Web hébergeant un wiki (''Wiki''); | * un serveur Web hébergeant un wiki (''Wiki''); | ||
* un pare-feu qui redirige tout le trafic TCP/80 vers le proxy. | * un pare-feu qui redirige tout le trafic TCP/80 vers le proxy. | ||
− | == | + | == Accélérateur basique (un site ''Web'') == |
Tout ce passe dans ''/etc/squid/squid.conf'' et les lignes suivantes doivent être insérer en début de fichier sinon certaines règles peuvent empêcher les client d'accéder au site accéléré. | Tout ce passe dans ''/etc/squid/squid.conf'' et les lignes suivantes doivent être insérer en début de fichier sinon certaines règles peuvent empêcher les client d'accéder au site accéléré. | ||
Ligne 381 : | Ligne 381 : | ||
</pre> | </pre> | ||
− | == | + | == Accélérateur multi-site == |
− |
Version du 2 mars 2014 à 00:25
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éseau duquel parviennent les requêtes HTTP.
Pour cela, remplacez 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 permissives 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'ils passent par le proxy. Il n'y a rien d'autre à 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 plus 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 remplacez-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'à 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 noms 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émarré 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écuté toutes les 10 minutes !
Blocage des pubs
La blacklist
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&mimetype=plaintext'
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
Juste après la ligne
# # Recommended minimum Access Permission configuration: # # Only allow cachemgr access from localhost http_access allow manager localhost
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 blacklist dans le sens où il va 'filtrer' les requêtes du client et demander à Squid de ne chercher que le contenu utile. Cette recherche à base de REGEX se fait 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'abord, 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 fichier 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
Configuration de Squid
redirect_program /opt/squid/wrapzap redirect_children 20
L'option redirect_children permet de spécifier le nombre de processus créé par le programme redirecteur
Test
Si on fait un tail du fichier /var/log/squid/access.log on peut voir les lignes suivantes:
# tail -f /var/log/squid/access.log 1390754440.930 417 192.168.1.1 TCP_MISS/200 11408 GET http://labaiedespirates.se/search/windows%202012/0/99/0 - DIRECT/194.71.107.27 text/html 1390754441.082 1 192.168.1.1 TCP_DENIED/403 3097 GET http://syndication.exoclick.com/ads.php? - NONE/- text/html 1390754441.083 0 192.168.1.1 TCP_DENIED/403 3097 GET http://syndication.exoclick.com/ads.php? - NONE/- text/html 1390754441.096 1 192.168.1.1 TCP_DENIED/403 3097 GET http://syndication.exoclick.com/ads.php? - NONE/- text/html 1390754441.096 1 192.168.1.1 TCP_DENIED/403 3097 GET http://syndication.exoclick.com/ads.php? - NONE/- text/html 1390754441.098 0 192.168.1.1 TCP_DENIED/403 3097 GET http://syndication.exoclick.com/ads.php? - NONE/- text/html
Le gros avantage du redirecteur est qu'il bloque également les popups qui ne s'ouvrent même plus côté client et l'image suivante viendra remplacer les pubs bloquées
Parcours des logs
Les messages de Squid
Quand quelque chose ne tourne pas rond, Squid le dit dans le fichier /var/log/squid.out:
2014/01/22 06:47:57| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'. FATAL: Bungled squid.conf line 61: http_port 3128 transaprent Squid Cache (Version 3.1.10): Terminated abnormally. CPU Usage: 0.023 seconds = 0.010 user + 0.013 sys Maximum Resident Size: 22848 KB Page faults with physical i/o: 0 2014/01/22 08:03:41| WARNING cache_mem is larger than total disk cache space! squid: ERROR: No running copy 2014/01/22 08:03:52| Creating Swap Directories 2014/01/22 08:03:52| /var/spool/squid exists 2014/01/22 08:03:52| Making directories in /var/spool/squid/00 2014/01/22 08:03:52| Making directories in /var/spool/squid/01 2014/01/22 08:03:52| Making directories in /var/spool/squid/02 2014/01/22 08:03:52| Making directories in /var/spool/squid/03 2014/01/22 08:03:52| Making directories in /var/spool/squid/04 2014/01/22 08:03:52| Making directories in /var/spool/squid/05 2014/01/22 08:03:52| Making directories in /var/spool/squid/06 2014/01/22 08:03:52| Making directories in /var/spool/squid/07 2014/01/22 08:03:52| Making directories in /var/spool/squid/08 2014/01/22 08:03:52| Making directories in /var/spool/squid/09 2014/01/22 08:03:52| Making directories in /var/spool/squid/0A 2014/01/22 08:03:52| Making directories in /var/spool/squid/0B 2014/01/22 08:03:52| Making directories in /var/spool/squid/0C 2014/01/22 08:03:52| Making directories in /var/spool/squid/0D 2014/01/22 08:03:52| Making directories in /var/spool/squid/0E 2014/01/22 08:03:52| Making directories in /var/spool/squid/0F
Souvent, les erreurs sont facilement corrigées, comme par exemple:
2014/01/22 06:47:57| WARNING: Could not determine this machines public hostname. Please configure one or set 'visible_hostname'.
Il suffit de rajouter la directive visible_hostname dans le fichier squid.conf
Ou encore l’absence de l'option cache_mem provoque l'erreur suivante:
2014/01/22 08:03:41| WARNING cache_mem is larger than total disk cache space!
Les accès HTTP
Tous les accès sont consignés dans le fichier /var/log/squid/access.log
1392570666.167 746 192.168.1.2 TCP_MISS/200 413 GET http://www.lesclesdumidi.com/updatestats.php? - DIRECT/94.23 1392570668.165 784 192.168.1.2 TCP_MISS/200 413 GET http://www.lesclesdumidi.com/updatestats.php? - DIRECT/94.23 1392570675.655 206 192.168.1.1 TCP_MISS/200 261 POST http://vl.ff.avast.com/F/AAHwy7oPFEJHZIaA4ipWFKJy - DIRECT/ 1392570682.608 109 192.168.1.2 TCP_MISS/200 413 GET http://www.lesclesdumidi.com/updatestats.php? - DIRECT/94.2
On peut voir:
- le temps
- la durée de la requête
- l'adresse du client
- le code / status
- le volume de données (octet)
- la méthode
- l'URL demandée
- le status du peer
Ce qui nous fait:
Time | elapsed | client address | code / status | bytes | method | URL | peer status |
---|---|---|---|---|---|---|---|
1392570682.608 | 109 | 192.168.1.2 | TCP_MISS/200 | 413 | GET | http://www.lesclesdumidi.com/updatestats.php? | DIRECT/94.2 |
Vérification du cache
Il peut être judicieux de vérifier régulièrement si le cache de votre proxy est toujours adapté à l'utilisation que vous en faites.
Cela se passe dans le fichier /var/log/squid/cache.log
2014/02/16 18:17:01| Starting Squid Cache version 3.1.10 for x86_64-redhat-linux-gnu... 2014/02/16 18:17:01| Process ID 21458 2014/02/16 18:17:01| With 1024 file descriptors available 2014/02/16 18:17:01| Initializing IP Cache... 2014/02/16 18:17:01| DNS Socket created at [::], FD 7 2014/02/16 18:17:01| DNS Socket created at 0.0.0.0, FD 8 2014/02/16 18:17:01| Adding nameserver 192.168.1.254 from /etc/resolv.conf 2014/02/16 18:17:01| Adding nameserver 212.27.40.244 from /etc/resolv.conf 2014/02/16 18:17:01| Adding domain tala-informatique.fr from /etc/resolv.conf 2014/02/16 18:17:01| helperOpenServers: Starting 30/30 'wrapzap' processes 2014/02/16 18:17:01| User-Agent logging is disabled. 2014/02/16 18:17:01| Referer logging is disabled. 2014/02/16 18:17:01| Unlinkd pipe opened on FD 73 2014/02/16 18:17:01| Local cache digest enabled; rebuild/rewrite every 3600/3600 sec 2014/02/16 18:17:01| Store logging disabled 2014/02/16 18:17:01| Swap maxSize 102400 + 102400 KB, estimated 15753 objects 2014/02/16 18:17:01| Target number of buckets: 787 2014/02/16 18:17:01| Using 8192 Store buckets 2014/02/16 18:17:01| Max Mem size: 102400 KB 2014/02/16 18:17:01| Max Swap size: 102400 KB 2014/02/16 18:17:01| Version 1 of swap file with LFS support detected... 2014/02/16 18:17:01| Rebuilding storage in /var/spool/squid (CLEAN) 2014/02/16 18:17:01| Using Least Load store dir selection 2014/02/16 18:17:01| Set Current Directory to /var/spool/squid 2014/02/16 18:17:02| Loaded Icons. 2014/02/16 18:17:02| Accepting intercepted HTTP connections at 0.0.0.0:3128, FD 76. 2014/02/16 18:17:02| HTCP Disabled. 2014/02/16 18:17:02| Squid plugin modules loaded: 0 2014/02/16 18:17:02| Adaptation support is off. 2014/02/16 18:17:02| Ready to serve requests. 2014/02/16 18:17:03| Store rebuilding is 62.28% complete 2014/02/16 18:17:04| Done reading /var/spool/squid swaplog (6576 entries) 2014/02/16 18:17:04| Finished rebuilding storage from disk. 2014/02/16 18:17:04| 6576 Entries scanned 2014/02/16 18:17:04| 0 Invalid entries. 2014/02/16 18:17:04| 0 With invalid flags. 2014/02/16 18:17:04| 6576 Objects loaded. 2014/02/16 18:17:04| 0 Objects expired. 2014/02/16 18:17:04| 0 Objects cancelled. 2014/02/16 18:17:04| 0 Duplicate URLs purged. 2014/02/16 18:17:04| 0 Swapfile clashes avoided. 2014/02/16 18:17:04| Took 2.49 seconds (2639.67 objects/sec). 2014/02/16 18:17:04| Beginning Validation Procedure 2014/02/16 18:17:04| Completed Validation Procedure 2014/02/16 18:17:04| Validated 13177 Entries 2014/02/16 18:17:04| store_swap_size = 92156 2014/02/16 18:17:04| storeLateRelease: released 0 objects
Ci-dessus, un démarrage de cache, mais tout ne se passe pas toujours bien. Dans l'exemple ci-dessous, on s'aperçoit que le nombre de processus redirecteurs est trop faible.
2014/02/16 17:43:20| WARNING: All redirector processes are busy. 2014/02/16 17:43:20| WARNING: 5 pending requests queued 2014/02/16 17:43:20| Consider increasing the number of redirector processes in your config file.
Reverse Proxy
Dans ce cas de figure, Squid va recevoir toutes les requêtes HTTP et les distribuer au bon serveurs Web. Il utilise également son système de cache pour accélérer les requêtes et ainsi décharger les serveurs Web.
On a :
- un proxy squid (Proxy);
- un serveur Web par défaut (Web);
- un serveur Web hébergeant un wiki (Wiki);
- un pare-feu qui redirige tout le trafic TCP/80 vers le proxy.
Accélérateur basique (un site Web)
Tout ce passe dans /etc/squid/squid.conf et les lignes suivantes doivent être insérer en début de fichier sinon certaines règles peuvent empêcher les client d'accéder au site accéléré.
http_port 80 accel defaultsite=wiki.tala-informatique.fr cache_peer web.tala-informatique.fr/wiki parent 80 0 no-query originserver name=accel_wiki
- http_port → Squid écoute sur le port 80;
- accel → Squid agit comme s'il était le serveur Web;
- defaultsite → utilise ce domaine si le client n'envoie pas un header correcte.
Enfin, il ne reste plus qu'a faire un ACL qui autorise la trafic vers le serveur Web
acl wiki dstdomain web.tala-informatique.fr http_access allow wiki cache_peer_access accel_wiki allow wiki cache_peer_access accel_wiki deny all