Squid

De DokuWikiExperience.

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 :

  1. La première ligne est la plus compliqué / interessante, elle permet d'aller chercher les utilisateurs pour leurs demander le mot de passe.
  2. Message pour la demande d'auth
  3. Max 10 enfants (demandes)
  4. Important, durée d'inactivité autorisé sans demande de réauthentification
  5. On crée l'ACL pour dire qu'on utilise une authentification
  6. Tout le monde est refusé si on ne s'est pas authentifié

Liens Interne

DansGuardian (filtrage de contenu + antivirus)

Slapd (OpenLDAP)

LDAP

Liens Externe

SquidOfficiel

SquidReverseProxy Last.fm

Outils personnels