You are on page 1of 9

BTS INFORMATIQUE DE GESTION

Option Administrateur Réseaux


Activité n°1
Benoît VERRON

Mise en place d’un serveur


Proxy
sous Ubuntu / Debian

Présentation d’un Proxy

Un proxy (serveur mandataire) est un serveur situé entre un réseau privé et Internet.
Constituant une protection pour le réseau d'une entreprise, il peut également faire office de
cache. Dans ce dernier cas, il enregistre les pages Web transférées par les utilisateurs pour les
délivrer sans qu'il soit nécessaire de se connecter sur le serveur initial. Ainsi, lorsqu'un
utilisateur se connecte à internet à l'aide d'une application cliente configurée pour utiliser un
serveur proxy, celle-ci va se connecter en premier lieu au serveur proxy et lui donner sa
requête. Le serveur proxy va alors se connecter au serveur que l'application cliente cherche à
joindre et lui transmettre la requête. Le serveur va ensuite donner sa réponse au proxy, qui va
à son tour la transmettre à l'application cliente.

Il offre plusieurs possibilités :


- Le cache
- la journalisation des requêtes (logging)
- la sécurité du réseau local
- le filtrage et l’anonymat.
1) Contexte :
Nous sommes actuellement dans un collège où il m’est demandé de sécuriser,
d’accélérer le réseau, contrôler ses connections en donnant aux professeurs et aux
élèves un accès à Internet mais en veillant que celui-ci soit filtré. Des droits à certains
sites seront autorisés ou non suivant la personne.

Pour cela, j’utilise une plateforme Ubuntu et je choisi d’utiliser Squid pour la mise en
place du proxy. Il est à la fois performant et complet, il offre de très nombreuses
applications.
De plus on lui ajoute son composé SquidGuard afin d’accélérer et d’améliorer le
processus de filtrage des sites à bannir à partir d’une blacklist qui est élaborée à
l’université de Toulouse.
On mettra en place un système d’authentification.

Configuration côté serveur:


2) Installation de Squid :

Après avoir configurer les paramètres réseau du serveur et des machines clientes on
peut procéder à l’installation de squid :
apt-get update && apt-get install squid

Configuration de squid.conf
Il est possible de faire une copie avant toute chose du fichier de configuration pour
des raisons de sécurités.
On ouvre ensuite le fichier de configuration de Squid (squid.conf) afin de le
paramétrer.
Pour cela j’utilise l’éditeur nano (un autre comme vi peut tout à fait convenir) :
nano /etc/squid/squid.conf
Il faut commencer par renseigner le paramètre visible_hostname sous peine que
squid ne démarre pas.
visible_hostname proxy
Mettons maintenant quelques règles :
Il faut savoir que toutes les règles que l’on désire ajouter dans ce fichier se mettent à
un endroit spécifique ; après « Insert your rules ». De plus l’ordre de ces règles est
primordial. Les interdictions se mettent donc avant les autorisations.
Ces règles sont appelées : ACL (Access Control List)
Par défaut squid refuse toute connections sortantes des clients. Il faut donc autoriser
le réseau à sortir sur internet.
acl mon_reseau src 192.168.0.0/24
http_access allow mon_reseau
On pourrait ensuite ajouter d’autre acl permettant de filtrer les connexions mais il est
préférable de confier cette tâche à squidGuard par la suite.

Configuration côté client :


Après cela on a plus qu’à configurer le navigateur des machines clientes afin qu’elles
passent par le proxy pour sortir sur internet. Le port par défaut de squid est le 3128.
Nous utiliserons celui-ci.
Il est possible de désactiver le cache du navigateur en le mettant à 0 car celui du
proxy est suffisant.

3) Authentification :

Créons des comptes utilisateurs afin de gérer les droits d’accès aux sites :
eleve ; prof ; admin.
Le fait d’authentifier les utilisateurs va permettre une surveillance accrue de notre
réseau et surtout, la possibilité de gérer des règles quels que soient le poste de travail
et le navigateur utilisé.
Le mode d’authentification que j’utilise est le NCSA.
NCSA : Utilise un fichier d’utilisateurs et de mot de passe de type NCSA
La commande suivante permet de créer un répertoire où les comptes et mot de
passe y seront stockés.
htpasswd –c /etc/squid/passwords admin
Ainsi de suite pour chaque compte. ( on enlèvera l’option –c car le répertoire est crée
qu’ une seule fois)
On active maintenant l’authentification :
auth_param basic program /usr/lib/squid/ncsa_auth /etc/squid/passwords
acl mes_utilisateurs proxy_auth REQUIRED
acl monreseau src 192.168.0.0/24
http_access deny !mes_utilisateurs
http_access allow monreseau
On peut ensuite démarrer squid. /etc/init.d/squid start
Configuration côté serveur:

4) Installation de squidGuard :

On revient sur le serveur pour y intégrer dans Squid le plugin SquidGuard. Celui-ci
est un filtre, un redirecteur qui permet de soulager squid afin d’accélérer la connexion.

On installe maintenant squidGuard :


apt-get update && apt-get install squidGuard
On télécharge par exemple sur le ftp de l’université de Toulouse la blacklist qui est
réputée.
ftp://ftp.univ-tlse1.fr/pub/reseau/cache/squidguard_contrib/

On l’installe ensuite dans le répertoire : /var/lib/squidguard/db/blacklists


On crée un utilisateur proxy du groupe proxy. Et on le rend propriétaire du fichier
blacklists.
chown –R proxy:proxy /var/lib/squidGuard /usr/bin/squidGuard /usr/bin/squid
/var/log/squid

Dans certain cas, on peut avoir à réinitialiser la base de données de squidGuard


avec la commande :
squidGuard –C all

On peut éventuellement rajouter des urls ou des noms de domaines à interdire dans
la blacklist.
Le plus simple pour ajouter des domaines à interdire serait de créer un fichier (par
exemple : divers) et d’inclure dans le fichier de configuration de squidGuard ce fichier
perso à refuser. Nous le feront plus bas.

Il faut indiquer à squid de passer par son composant squidGuard.


redirect_program /usr/bin/squidGuard –c /etc/squid/squidGuard.conf
5) Configuration de squidGuard :

En page suivante, je propose une configuration du fichier squidGuard qui permettra


d’autoriser ou non les personnes à accéder aux sites internet.

Notre proxy est maintenant opérationnel, une fois bien sûre que l’on a redémarré
squid. On peut tester différents sites depuis une machine cliente.

J’ai ensuite ajouté un dossier divers (mkdir /home/ben/divers) puis le fichier domains
(touch /home/ben/divers/domains) où tous les utilisateurs peuvent ajouter des
domaines à interdire. Cela est fait grâce un formulaire en html et un script en php.
De cette sorte, il suffit qu’ils se connectent à partir d’un navigateur sur le serveur puis
qu’ils rentrent un domaine à interdire dans le formulaire. Squid se recharge ensuite
automatiquement lors de la validation.
Pour cela, j’ai dans le répertoire d’Apache créé les 2 fichiers ajoutdomain.html et
ajoutdomain.php. L’utilisateur qui sera utilisé lors du lancement du script est celui
d’Apache donc « www-data ». Il faudra veiller à lui donner les droits d’écrire dans ce
fichier « domains » et de recharger squid sans quoi les modifications ne seront pas
prises en compte.
Editer avec visudo /etc/sudoers et ajouter la ligne www-data ALL=NOPASSWD :
/etc/init.d/squid. Puis chown www-data /home/ben/divers/domains et enfin chmod 755
/home/ben/divers/domains.
# Fichier /etc/squid/squidGuard.conf
# Répertoire acceuillant les bases de données
dbhome /var/lib/squidguard/db/blacklists
# Répertoire accueillant le fichier de log
logdir /var/log/squid

# on crée les entrées à interdire


dest violence {
domainlist violence/domains
urllist violence/urls
expressionlist violence/expressions
}
dest porn {
domainlist porn/domains
urllist porn/urls
expressionlist porn/expressions
}
dest divers { domainlist /home/ben/divers/domains
}

src admin {
user admin }
src prof {
user prof }
src eleve {
user eleve }

acl { admin {
Pass all
}
prof {
Pass !divers !porn all
redirect http://www.192.168.0.1/index.html
}
eleve {
Pass !divers !porn !violence all
redirect http://192.168.0.1/index.html

}
default {
pass none all
}
}
On pourrait aussi programmer à partir d’un simple script une mise à jour automatique
de la blacklist. Ce qui peut être intéressant sachant que chaque jour des sites internet
se créent et qu’ils ne sont pas forcement recommandables.
Pour les élèves surtout si l’âge moyens des utilisateurs est faible, il serait aussi
intéressant de non pas utiliser une liste noire mais plutôt une liste blanche qui
n’autoriserait que les sites internet que l’on aurait choisi au préalable. Et par exemple
continuer à utiliser la liste noire simplement pour les professeurs.
De plus il est possible d’utiliser un proxy transparent qui ne laisse même pas savoir
aux utilisateurs que ceux-ci passent par le proxy et donc devient impossible à
contourner.

En résumé :
De nombreuses applications encore existent mais celles que nous avons vu ici en
sont les principales. Le proxy est donc utile pour préserver les individus et même
parfois obligatoire. Il est pratique grâce à l’authentification de contrôler les accès
quelque soit le poste utilisé. Il est aussi tout à fait modulable suivant nos exigences. Et
permet en plus d’utiliser le cache afin de stocker les pages récemment consultées et
donc d’accélérer le vitesse de la connexion.

/home/ben/divers/ajoutdomain.html
SCRIPT HTML:
<html>
<body bgcolor="#FFFFCC">
<center>
<form method="POST" action="ajoutdomain.php" name="ajoutdomain">
<h1>ajouter un domaine à interdire:</h1>

<input type="text" name="ajoutdomain">

<input type="submit" value="envoyer" name="envoyer">


</form>
</center>
</body>
</html>
/home/ben/divers/ajoutdomain.php
SCRIPT PHP:
<html>
<body bgcolor="#FFFFCC">
<center>
<font size="5" color="blue">
<tt>
<?php
clearstatcache();
$domains = '/home/ben/divers/domains';
$reload = 'sudo /etc/init.d/squid reload'; //redémarrage de squid

if (is_writable($domains)) {
echo "Le fichier est accessible en ecriture<br>";
if ( !$fichier = fopen ( $domains, 'a' ) ) {
echo "Je n'ai pas réussi à ouvrir le fichier!<br>";
exit;
} else {
echo "J'ai bien ouvert le fichier<br>";
$texte = $_POST['ajoutdomain'] . "\n";
if ( $ecriture = fwrite ( $fichier, $texte ) ) {
echo "J'ai pu ecrire sur le fichier<br>";
fclose($fichier);
system($reload);
echo "<br>La configuration de Squid est bien rechargée.";
} else {
echo "Je n'ai pas reussi a ecrire...";
fclose ( $fichier ) ;
}
}

} else {
echo "Le fichier n'est pas accessible en ecriture.";
}

echo "<br>Le domaine $texte à été ajouté à la liste des domaine à interdire."
?>
</tt>
</font>
</center>
</body>
</html>

You might also like