Mesure 2

Mise en place d'un Firewall

La deuxième mesure que nous devons mettre en place est un ensemble de règles sur chaque serveur pour filtrer les paquets entrants et sortants de nos différentes machines.

Le noyau de Linux intègre des fonctionnalités de pare feu réseau appelés Netfilter.

Netfilter permet de gérer les paquets IPV4, IPV6, ARP et les trames Ethernet.

Pour nos besoins de filtrage des paquets IPV4 nous allons utiliser l'outils iptables pour créer nos différentes règles.

Action N°1 : tout interdire et autoriser une machine

Nous allons mettre en place un pare feu restreignant tous les accès réseau entrants venant de l'extérieur de la machine.

iptables vous permet d'afficher les règles présentent sur votre système. Pour afficher ces règles il vous suffit de taper (en root)

iptables -L

Vous verrez alors apparaître 3 "chaînes" qui sont configurée par défaut dans votre système.

Commencez par lancer un ping continu avec cmd de windows (ping -t VOTRE_IP_LINUX)

Nous allons maintenant créer une règle qui và bloquer tous les paquets entrants de la machine Linux

iptables --policy INPUT DROP
iptables --policy FORWARD DROP
iptables --policy OUTPUT DROP

Vous devriez normalement voir le ping lancé depuis votre windows s'arrêter.

Nous allons maintenant créer une règle pour autoriser UNIQUEMENT votre PC Windows à se connecter (ou pinguer) votre machine Linux.

iptables -A INPUT -s VOTRE_IP_WINDOWS -j ACCEPT

Le problème ICI est que l'on accepte les connections mais les sorties sont refusées.

Nous allons autoriser toutes les sorties pour votre machine windows

iptables -A OUTPUT -d VOTRE_IP_WINDOWS -j ACCEPT

Si vous voulez supprimer toutes les règles que vous avez créé (à l'exception de la POLICY) vous pouvez faire iptables -F -X

Nous devons maintenant nous assurer que les connexions persistantes (TCP) persistent

iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT

Pour faire croire que votre machine est éteinte vous pouvez bloquer les ping ICMP

iptables -t filter -A INPUT -p icmp -j DROP

La console iptables -L vous permet de voir le statut de votre firewall. iptables lit les règles du haut vers le bas et s'arrête à la première occurence correspondant à une règle valide.

Action N°2 : n'autoriser que les services nécessaires

L'idéal pour un serveur est de n'autoriser en entrant et en sortie que les ports qui sont nécessaires.

Par exemple dans le cadre d'un serveur web ne seront autorisés que les ports 80, 443 et 53

iptables -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -A INPUT -p udp --dport 53 -j ACCEPT

Faites la même chose pour les ports 80 et 443.

Flusher vos règles (-F -X) et n'autoriser le port 80 qu'a une machine et les ports 443 et 53 à tout le monde.

Supprimer des règles

Pour faire nos règles nous avons flusher à chaque fois iptables pour recréer l'ensemble des règles.

Heureusement pendant vos tests vous pouvez supprimer des règles à la volée.

Pour supprimer une règle il suffit de taper

iptables -D INPUT 1

Faire persister nos règles au démarrage de la machine

Pour faire persister nos règles au démarrage, il va falloir créer un script BASH et le mettre au démarrage.

Un script BASH est un script qui va executer des commandes dans l'ordre désiré.

#!/bin/bash echo "Demarrage du Firewall" iptables --policy INPUT DROP ..... echo "Firewall Demarre"

Un script doit avoir le flag executable pour pouvoir se lancer.

chmod +x monscript.sh

Pour lancer un script il suffit de taper

./monscript.sh

Une fois votre script validé, il faut le mettre au démarrage de la machine Debian. Debian lance tous les scripts qui sont présents dans /etc/rcS.d/ au démarrage de la machine.

Pour que votre script se lance au démarrage il faut donc :

mv monscript.sh /etc/rcS.d/S90firewall.sh
chmod +x /etc/rcS.d/S90firewall.sh

Faire un router avec une machine Linux

Vous pouvez facilement créer un routeur avec Linux et un ordinateur possédant au moins deux cartes réseaux.

Pour commencer il faut dire à votre Linux qu'il a le droit de faire passer les paquets d'une carte réseau à l'autre :

echo 1 > /proc/sys/net/ipv4/ip_forward

A partir de ce moment les paquets d'une cartes passent vers l'autre carte.

Imaginons que eth0 soit la carte connectée à votre réseau local et eth1 la carte connecté au routeur Internet

Nous allons créer le script firewall qui va faire transiter les paquets non destinés à notre réseau local vers la carte connectée à Internet

iptables -F -X

# Autoriser les connexions qui sont déjà établies
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

# Autoriser les connections de l'intérieur vers l'extérieur
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT

# Faire du NAT pour les connexion de l'intérieur vers l'extérieur
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE

# Rejeter toutes les connexions entrantes
iptables -A FORWARD -i eth1 -o eth1 -j REJECT

Avec votre passerelle vous pouvez par exemple rediriger les requêtes de vos utilisateurs directement vers votre proxy squid

iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to 3128

Vous pouvez également faire de la redirection de port sur votre passerelle pour par exemple autoriser les gens de l'extérieur à se connecter :

iptables -t nat -A PREROUTING -i eth1 -p tcp --dport 80 -j DNAT --to-destination 192.168.12.2:80

Continuer »