Squid
Sommaire |
Général
Squid est un proxy cache permettant énormement de chose, d'optimisations etc ... Il peut aussi fonctionner en reverse proxy. En règle générale (comme dit sur la doc) très peu d'administrateur utilise plus de 10% des fonctionnalités implémentés dans squid. Le but de cette doc n'est pas de remplacer l'excellente doc mais des spécifité, ainsi que des mises en route rapides
Access Control List
La gestion des ACLs est simple sous squid et défini par :
acl <nom> src <ip du réseau>/<masque sous réseau>
Ce qui donne par exemple pour autoriser le réseau 192.168.1.0/24 :
acl home src 192.168.1.0/255.255.255.0
On peut également faire des ACL sur un/plusieurs port(s) des plages horaires, les extensions (MP3) etc ...
acl irc port 667 acl week_end time A-S acl url_zik regex -i \.mp3$
Une fois les "objets" crées il faut les utiliser
http_access allow/deny <objet>
Limitations de bande passante
Squid permet de limiter la bande passante, sans faire de QoS mais tout simplement en limitant la vitesse de download des fichiers passant, ceci peut être limiter par range IP, etc ...
########Delay Pools######### # a simple global throttle, users sharing 256 Kbit/s delay_pools 1 delay_class 1 1 # 256 Kbit/s fill rate, 1024 Kbit/s reserve delay_parameters 1 32000/128000 acl All src 0/0 delay_access 1 allow All
SNMP
Il est possible de monitorer squid grâce à SNMP, cacti peut faire l'affaire Le fichier squid_mib.txt se trouve sur le serveur dans /usr/share/squid/mib.txt
$ snmpwalk squid:3401 -c public -v2c -m squid_mib.txt .1.3.6.1.4.1.3495
Cache Manager
Une gestion des ACL permet d'effectuer des opérations de managments sur squid tel que le préfetch d'une url, vider le cache d'une url etc...
Il n'est pas possible en l'état actuel d'éffectuer une purge via un wildcard (*) du style http://wiki.ismaya.fr/*
How can i purge multiple objects from my cache? It's not possible; you have to purte the objects one by one by URL. This is because squid doesn't keep in memory the URL of every object it stores, but only a compact representation of it (a hash). Finding the hash given the URL is easy, the other way around is not possible. Purging by wildcard, by domain etc. are unfortunately not possible at this time.
Implémentation de squidclient en PHP (par exemple)
Il est possible de recréer la fonction :
squidclient -m PURGE http://wiki.ismaya.fr/index.php
Après étude du code source grâce à :
apt-get source squid
on ouvre le fichier source squidclient.c (ou .cc si version 3 de squid) ligne 344 on peut observer :
snprintf(msg, BUFSIZ, "%s %s HTTP/1.0\r\n", method, url);
On peut donc voir qu'une requête de type purge s'effectue par :
PURGE http://wiki.ismaya.fr/index.php HTTP/1.0
Plus qu'à transposer en PHP :
<?php
function purge($url,$ip,$port)
{
# PURGE Method (works on squid 2.6 and 3.0)
$url = "PURGE ".$url." HTTP/1.0\r\n"; # Purge method to 2.6 Squid
$hdl = fsockopen($ip,$port, $errno, $errstr, 30);
if (!$hdl)
{
echo "$errstr ($errno)\n";
$return = false;
{
else
{
fwrite($hdl,$url);
while(!feof($hdl))
$out .= fgets($hdl,20);
if(preg_match("/200 OK/",$out)) # Purge OK
echo 'x';
else
echo'.';
fclose($hdl); // fermeture du socket
$return = true;
}
return $return;
}
?>
Authentification
L'authentification par le biais d'un fichier grâce au module NSCA est possible, mais pour aller plus loin une authentification avec l'annuaire LDAP est plus pérenne surtout si le nombre d'users est important.
auth_param basic program /usr/lib/squid/ldap_auth -b ou=squid,dc=yanntech,dc=net -f &(objectclass=shadowAccount)(uid=%s)(description=internet)) -H ldap://localhost -v3 auth_param basic realm Authentification requise ! auth_param basic children 10 auth_param basic credentialsttl 2 hours acl ldapauth proxy_auth REQUIRED http_access deny !ldapauth
Avec un peu d'explications voila qui sera mieux donc :
- La première ligne est la plus compliqué / interessante, elle permet d'aller chercher les utilisateurs pour leurs demander le mot de passe.
- Message pour la demande d'auth
- Max 10 enfants (demandes)
- Important, durée d'inactivité autorisé sans demande de réauthentification
- On crée l'ACL pour dire qu'on utilise une authentification
- Tout le monde est refusé si on ne s'est pas authentifié
Liens Interne
DansGuardian (filtrage de contenu + antivirus)
Slapd (OpenLDAP)