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 par 10 et n'offrir comme seul service un accès =ssh.
  • La seconcde doit être nommée serveur, avoir son adresse IPv4 terminant par 200 et offrir un service d'accès ssh 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 et firefox
    • 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 :

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 :

  1. 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) ;
  2. 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.) ;
  3. 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.

Date: 14 décembre 2021

Author: Bruno BEAUFILS

Created: 2022-01-05 mer. 10:44

Validate