M3102 - TP 4
Filtrer les connexions réseaux
1 Introduction
Le but de ce TP est de manipuler le firewall Netfilter qui est intégré au noyau Linux et dont le but est de filtrer les paquets entrant, sortant ou transitant par une machine.
2 Création des serveurs virtuels de TP
Activez l'environnement de travail via les commandes suivantes exécutées dans le shell de votre machine à l'IUT
source /home/public/m3102/tp4.env
Cela vous donne accès à la commande vmiut
dont la documentation
est accessible via l'appel vmiut doc
.
3 Préparation des serveurs virtuels de TP
Dans la suite du TP vous allez devoir travailler avec deux machines simialaires à celles des TP précédents.
Via la commande vmiut
et en utilisant vos différentes procédures,
créez deux machines différentes.
- La première doit être nommée
client
, avoir son adresse IPv4 terminant par10
et n'offrir comme seul service un accès =ssh. - La seconcde doit être nommée
serveur
, avoir son adresse IPv4 terminant par200
et offrir un service d'accèsssh
ainsi qu'un service d'accès web (via Apache).
Sur chacune de vos machines assurez-vous :
- d'être capable de pouvoir vous y connecter en ssh en tant que
root
depuis votre machine physique de TP ; - que le système APT soit opérationnel via les proxys HTTP et HTTPS
de l'Université
http://cache.univ-lille.fr:3128
; - les outils suivants soient installés :
less
w3m
etfirefox
netcat
nmap
Pour les commandes que vous ne connaissez pas dans la liste précédente prenez le temps de lire rapidement leur utilité et leur fonctionnement via leur documentation (dans |/usr/share/doc| et dans le manuel).
4 Documentation
Nous n'avons pas vu le fonctionnement de Netfilter en cours. Vous allez donc devoir commencer par appréhender son fonctionnement seul. Pour cela vous devez d'abord lire les documentations suivantes :
- l'intégralité de la section 2 du chapitre 14 du «Cahier de l'administrateur Debian»
iptables(8)
iptables-save(8)
iptables-restore(8)
iptables-apply(8)
Par ailleurs l'imposant et complet iptables tutorial d'Oskar Andreasson est une référence particulièrement utile et bien conçue.
5 Filtrage sur le serveur
Dans cet exercice vous n'avez pas le droit d'installer ou d'utiliser
fwbuilder
ou quelque autre outils graphiques de création ou
gestion des règles de filtrages.
Pour mémoire la liste des ports standards utilisés par les services
réseaux est définie dans le fichier /etc/services
.
Sauvegarder les règles de filtrages en cours dans le script shell
nommé /usr/local/sbin/filtre-debian-standard
.
Sans arrêter aucun service sur la machine, faites en sorte que les filtrages suivants soit appliqués sur votre serveur, en vérifiant bien la validité de vos filtrages depuis votre client, votre machine physique et votre serveur à chaque étape :
- depuis le client seules les connexions web sont acceptées (c'est-à-dire que par exemple aucune connexion ssh du client vers le serveur n'est possible) ;
- depuis une autre machine distante quelconque, seules les connexions ssh sont acceptées (c'est-à-dire par exemple que toutes les connexions sont acceptées depuis le serveur lui même, qu'il est impossible de se connecter au serveur web via votre machine physique, etc.) ;
- depuis le serveur seules les connexions ssh vers l'extérieur sont acceptées (on interdit notamment les connexions web, ce qui doit empêcher le fonctionnement du Reverse Poxy mis en place lors de la dernière question du TP précédent).
Sauvegarder l'état courant de vos règles de filtrages dans un script
shell nommé /usr/local/sbin/filtre-serveur
.
Faites en sorte que les règles de filtrage définies dans cet exercice soient mises en place à chaque démarrage de la machine.
6 Filtrage sur le client
Installer fwbuilder
sur votre client.
En utilisant fwbuilder
créer un ensemble de règles filtrant les
connexions sortant de votre client de façon à n'autoriser les
connexions web que vers le serveur et à loguer toutes les autres
tentatives de connexion web à l'extérieur.
Vérifiez bien la validité de votre filtrage.
Réinitialisez le filtrage de votre machine aux règles initiales.
Écrivez un script nommé /usr/local/sbin/acces-dns
acceptant un
paramètre pouvant être stop
ou start
. Quand il reçoit stop
ce
script interdit toutes connexions DNS vers une machine
distante. Quand il reçoit start
ce script autorise les connexions
DNS vers n'importe quelle machine distante.
Quand acces-dns stop
est appelé pouvez-vous vous connecter à un
serveur web distant (par exemple http://duckduckgo.com ou
https://www.ffdn.org) depuis votre client ?
Écrivez un script nommé /usr/local/sbin/acces-web
acceptant un
paramètre pouvant être stop
ou start
. Quand il reçoit stop
ce
script interdit toutes connexions web vers une machine
distante. Quand il reçoit start
ce script autorise les connexions
web uniquement vers le serveur (même filtrage que dans la question
1).
Une fois acces-web stop
appelé, proposez une solution permettant à
un utilisateur autre que root
d'accéder au web (c'est-à-dire de
contourner le filtrage mis en place par l'administrateur). Un étude
détaillée de la page man de ssh
pourrait vous aider.