Squid : gestion whitelist et redirection URL

Boris HUISGEN
Boris HUISGEN
|

Pour faire suite à mon précédent article de configuration Squid, je vous présente ici la configuration d’une whitelist afin de limiter les URL acceptées (vous pouvez aussi faire une liste de domaines) sur mon reverse proxy et la redirection des clients (redirection URL) depuis Squid.

Dans le premier cas, rien de bien compliqué, cela se joue sur deux ACL. Par la première, je vérifie les URL selon une liste d’expressions régulières regroupées dans un fichier texte et je bloque par une seconde ACL toutes celles n’y figurant pas :

acl ALLOW_URL url_regex -i "/etc/squid/allow_url.txt"
[...]
http_access allow ALLOW_URL
http_access deny !ALLOW_URL
http_access allow all

Exemple de liste :

# more allow_url.txt

www.monsite.fr
media.monsite.fr/img/

Seconde étape, le reverse proxy doit rediriger les clients selon certaines URL, plus précisément selon certains paramètres en GET. Pour ce faire, Squid propose l’emploi d’un programme de redirection externe, dit redirecteur. Aucun redirecteur n’est activé par défaut, il faut donc en écrire un. Le principe est assez simple : quelque soit le langage utilisé, l’URL demandée est soumise en entrée et Squid attend en retour l’URL ou l’erreur HTTP à renvoyer au client. Ainsi si l’URL est différente, le client est redirigé automatiquement. Dans le cas d’une erreur, la chaîne est du type : 302:. Dernier point, le script ne doit pas rendre la main.

Pour ma part, j’ai fait le choix d’un script Perl, étant donné que j’ai seulement besoin de rediriger sur un domaine unique. Si vous avez plusieurs tests à effectuer, je vous invite plutôt à vous tourner vers Squirm.

# more redirector.pl

#!/usr/bin/perl
#
# Boris HUISGEN <bhuisgen@hbis.fr>
#

$|=1;

while (<>)
{
    my @X = split;
    my $url = $X[0];

    if ($url =~ /^http:\/\/www\.monsite\.fr\/\?url=(.[^\?]*)/)
    {
        print "$1\n";
    }
    else {
        print "$url\n";
    }
}

# chmod +x redirector.pl

Le test du redirecteur peut se faire en console (sans toucher à squid) en saisissant au moins en premier paramètre l’URL :

# perl redirector.pl

http://www.monsite.fr/?url=www.wikipedia.fr 127.0.0.1/- - GET
www.wikipedia.fr

Ici, le client est donc redirigé sur le site de Wikipédia.

Reste à activer le redirecteur dans la configuration Squid et à préciser le nombre d’instances à exécuter (10 est un bon début) :

redirector_program /etc/squid/redirector.pl
redirector_children 10

Fichier de configuration Squid : [download id=“2” ]

Boris HUISGEN
Boris HUISGEN
Blog owner
  • #squid