M1 MIAGE - Réseaux et Protocoles - FireWall et Filtrage

Auteur(s):
Sébastien CHOPLIN

Avant tout, lisez les explications situées à cette URL: http://www.commentcamarche.net/protect/firewall.php3

Exercice 1: Questions

  1. Quelle(s) couche(s) du modèle TCP/IP est(sont) concernée(s) par le filtrage de port ?
  2. Si on met en place un filtre empêchant l'établissement de socket vers l'extérieur sur le port 80, qu'est ce qu'on ne pourra plus faire ?
  3. Si on met en place un filtre empêchant l'établissement de socket entrant sur le port 80, qu'est ce qu'on ne pourra plus faire ?

Exercice 2: iptable

Infos récupérées sur http://lea-linux.org/reseau/iptables.html.

IpTables est une application permettant de mettre en place un firewall sous GNU/Linux. IpTables permet de faire du firewalling stateful (à états), de la translation de port et d'adresse, du filtrage au niveau 2 et beaucoup d'autres choses que nous n'allons pas aborder comme le "Mangle" ou modification des paquets à la volée.

IpTables s'utilise en ligne de commande, en utilisant plusieurs tables (NAT,FILTER,MANGLE), nous n'allons nous intéresser qu'à la table FILTER.
Cette table contient toutes les règles de filtrage, il existe 3 types de chaînes:

Les actions disponibles sont: ACCEPT, REJECT, LOG ....

NB: Les règles sont appliquées dans l'ordre, par défaut la table FILTER est vide et donc accepte tout.

Syntaxe globale:
iptables -A nom_de_la_chaine -p protocole ...  -j action (ACCEPT/REJECT/LOG)
Exemple: rejeter les connexion sur le port 80 vers l'extérieur
iptables -A OUTPUT -p tcp --dport 80 -j REJECT
Remarque: --dport concerne le port destination, on peut aussi utiliser --sport pour utiliser le port source

Exemple: Filtrage IP: garder en mémoire (log) chaque accès à la station depuis la machine d'IP 10.42.42.42:
iptables -A INPUT --source 10.42.42.42 -j LOG
On peut voir ces accès en tapant la commande
dmesg

Exemple: Filtrage d'adresse MAC: interdiction à l'adresse 42.42.AA.42.42.AA d'avoir une communication entrante vers notre station:
iptables -A INPUT -m mac --mac-source 42:42:AA:42:42:AA  -j REJECT
Pour vide une chaîne:
iptables -F INPUT (ou OUTPUT ou FORWARD)
(-F pour "flush")

Pour liste une chaîne:
iptables -L INPUT (ou OUTPUT ou FORWARD)
Pour plus d'infos sur iptables: entre autres: le HOW-TO en français

  1. Démarrez le serveur web apache sur votre station avec la commande apachectl start
  2. Mettez en place une règle empêchant (action REJECT) votre voisin de droite d'accéder à votre port 80.
  3. Mettez en place une règle mémorisant (action LOG) les connexions de votre voisin de droite sur le port 80.
  4. Listez les chaînes. Vérifiez avec vos voisins que les règles sont bien appliquées.
  5. Regardez les derniers messages de connexion (dans le cas de l'action LOG) sur votre machine avec la commande: dmesg
  6. Vider toutes les chaînes.
  7. Interdisez toutes les communications entrantes, sur tous les protocoles. Que ce passe-t-il si l'un de vos camarades "ping" votre station ?
  8. Mettez en place des règles pour que seul le protocole utilisé par ping soit autorisé (attention à l'ordre des règles, elles sont appliquées de haut en bas par rapport à l'affichage de iptables -L)