Un proxy est le premier élément que nous mettrons en place pour protéger notre réseau.
Le proxy aura deux rôles
Le proxy que nous installerons est Squid sur notre distribution Debian
Pour installer Squid il vous suffit d'utiliser apt-get :
apt-get install squid3
apt
và alors vous installer Squid et toutes ses dépendances et démarrer le service
Votre proxy est dès l'installation opérationnel. Pour le tester, vous pouvez configurer votre navigateur Internet. Dans les options de votre navigateur, choisissez "Avancé", puis "Réseau". Dans paramètres vous pourrez configurer le proxy.
Par défaut Squid écoute sur le port 3128. Vous pouvez le vérifier avec un nmap localhost
Par défaut la configuration de Squid est très restrictive et nous interdit toute navigation
Si vous essayez de vous connectez à Internet, le serveur Squid vous renverra vers une page d'interdiction.
Les fichiers de configuration de Squid se trouve dans /etc/squid3/
. Le fichier de configuration principal est squid.conf
Commençons par partir d'un fichier vide :
cd /etc/squid3/
mv squid.conf
> squid.conf
Ensuite nous allons créer notre première ACL :
acl estem src 10.10.221.0/24 # My lan Network
acl SSL_ports port 443
acl Safe_ports port 80 # http
acl Safe_ports port 443 # https
acl CONNECT method CONNECT
http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access allow estem
http_access deny all
http_port 3128
Pour que squid prenne en charge les modifications de configuration /etc/init.d/squid3 restart
Si vous essayez de naviguer depuis une IP du réseau que vous avez autorisé c'est ok !
Nous allons maintenant interdire certains domaines. Pour celà nous allons ajouter une acl avec les autres acl, puis ajouter une règle de filtrage au début des règles de filtrage.
acl ban_domains dstdomain .facebook.com .youtube.com
http_access deny ban_domains
Rédémarrer votre Squid, vous n'avez plus accès à Facebook et Youtube !
Il est difficile de maintenir des règles pour tous les sites à mauvaises connotation.
Heureusement des volontaires font se travail et nous offre le résultat.
Squidguard nous permet de télécharger des règles de filtrage et de les appliquer dans notre Squid
apt-get install squidguard
Ceci installe les scripts de filtrage de SquidGuard MAIS
pas les règles
Nous allons télécharger les règle d'une université Française :
cd /root/
wget http://dsi.ut-capitole.fr/blacklists/download/blacklists.tar.gz
Ce fichier de règles est relativement gros (une dizaine de Mo) et contient des milliers de filtres.
Nous allons maintenant décompresser ce fichier et l'incorporer dans les règles de SquidGuard :
tar -xzf blacklists.tar.gz
cp -R blacklists/* /var/lib/squidguard/db/
Nous allons maintenant dire à SquidGuard qu'elles règles nous voulons utiliser :
mv /etc/squidguard/squidGuard.conf /etc/squidguard/squidGuard.conf.orig
> /etc/squidguard.conf
Le contenu de notre squidGuard.conf :
#
# CONFIG FILE FOR SQUIDGUARD
#
dbhome /var/lib/squidguard/db
logdir /var/log/squid3
# les règles de filtrage
dest adult {
domainlist adult/domains
urllist adult/urls
expressionlist adult/very_restrictive_expression
}
dest publicite {
domainlist publicite/domains
urllist publicite/urls
}
###Forcer la réécriture de https vers http pour les moteurs de recherche et pouvoir analyser les
mots
rew safesearch {
s@(google..*/search?.*q=.*)@ &safe=active@i
s@(google..*/images.*q=.*)@ &safe=active@i
s@(google..*/groups.*q=.*)@ &safe=active@i
s@(google..*/news.*q=.*)@ &safe=active@i
s@(yandex..*/yandsearch?.*text=.*)@ &fyandex=1@i
s@(search.yahoo..*/search.*p=.*)@ &vm=r&v=1@i
s@(search.live..*/.*q=.*)@ &adlt=strict@i
s@(search.msn..*/.*q=.*)@ &adlt=strict@i
s@(.bing..*/.*q=.*)@ &adlt=strict@i
log block.log
}
#La règle avec les interdictions: !porn !adult !publicite !violence !agressif !aggressive
acl {
default {
pass !adult !publicite all
redirect http://google.fr ##tout ce qui est inderdit est rediriger vers google
}
}
Il nous reste maintenant à dire à Squid d'utiliser ces règles :
ln -s /etc/squidguard/squidGuard.conf /etc/squid3/
chown -R proxy:proxy /var/log/squid3 /var/lib/squidguard
squidGuard -C all
Vous devez également dire à Squid de passer par SquidGuard. Ajouter dans /etc/squid3/squid.conf
avant http_port 3128
url_rewrite_program /usr/bin/squidGuard -c /etc/squid3/squidGuard.conf
Les règles sont maintenant compilés et squidGuard est chargé.
Nous avons actuellement un problème. Si l'utilisateur ne configure pas son proxy, il và pouvoir outrepasser les règles de filtrages.
Nous allons devoir configurer un proxy TRANSPARENT
Pour celà notre serveur devra avoir deux cartes réseaux.
Il devra également devenir la passerelle de notre réseau.
Pour qu'un ordinateur Debian devienne une passerelle vous allez devoir router les paquets d'une carte réseau, vers l'autre carte réseau.
Pour celà nous devons activer le "forward" dans le noyau de notre réseau puis traiter les paquets. (eth0 est sur le réseau interne, eth1 est sur le réseau externe)
iptables -F
iptables -t nat -F
iptables -t mangle -F
iptables -X
iptables -A INPUT -i lo -j ACCEPT
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -m state --state NEW -i ! eth1 -j ACCEPT
iptables -A FORWARD -i eth1 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth1 -j REJECT
echo 1 > /proc/sys/net/ipv4/ip_forward
Notre machine Linux est maintenant un routeur / firewall !
Il faut maintenant lui dire que quand une requête arrive de l'intérieur pour le port HTTP (80) ou HTTPS(443) on redirige vers Squid
iptables -t nat -F PREROUTING
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j REDIRECT --to-port 3128
Enfin il faut que Squid "sache" qu'il est transparent. Il faut ajouter à votre Squid.conf :
httpd_accel_host virtual
httpd_accel_port 80
httpd_accel_with_proxy on
httpd_accel_uses_host_header on
httpd_accel_single_host off
ATTENTION : la configuration ci dessous marche en HTTP. En HTTPS il faut générer des certificats SSL ...
Actuellement le rôle de cache n'est pas activé. Pour que Squid optimise votre connexion Internet ajoutez à la fin du fichier :
cache_mem 128 MB
maximum_object_size_in_memory 128 KB
cache_replacement_policy heap GDSF
cache_dir ufs /var/spool/squid3 15360 16 256
maximum_object_size 32 MB
cache_swap_low 85
cache_swap_high 90
access_log /var/log/squid3/access.log squid
half_closed_clients off
cache_mgr admin@example.com
hosts_file /etc/hosts
memory_pools off
client_db off