Logo English Web Page
Accueil Association BSD Linux Dev Reseau Infologisme Mac OSX
tl tr
Sujet Sécurité Date 02-07-2011
Titre Le Firewall Netfilter de GNU/Linux Section BSD Linux
Article

Historique

Contrairement au préjugé de beaucoup de personnes, le pare-feu de Linux n‘est pas IPTables, mais bien Netfilter qui est un ensemble de logiciels assurant le filtrage et le suivi de chaque Paquet ou Datagramme IP transitant par la Pile TCP/IP du Système d‘exploitation. Netfilter est intégré dans le Kernel Linux pour les versions 2.4 et 2.6. Il est le successeur de Ipchains pour les anciens Kernels de Linux en version 2.2 et en version 2.0 de Ipfwadm.

IPTables est un programme en ligne de commande utilisé pour configurer en mode Console le Firewall de Linux Netfilter, destiné aux Administrateurs système et réseau, pour élaborer des règles de filtrage de paquets.

Fonctionnement

Netfilter est composer de trois tables de traitements de paquets :
MANGLE Permet de modifier les tables
FILTER Action de filtrage composé par trois chaînes de traitement :
FORWARD (transfert) fait transiter les paquets vers un (des) réseau(x) situé(s) derrière le Firewall.
INPUT (entrée) qui filtre les paquets entrants du Firewall.
OUTPUT (sortie) qui filtre les paquets sortants du Firewall.
NAT Permet la translation d‘adresse réseau et possède aussi trois chaînes de traitement :
PREROUTING (pré-routage) qui traite les paquets venant de l‘extérieur vers un réseau local (DNAT).
POSTROUTING (post-routage) qui traite les paquets venant d‘un réseau local vers l‘extérieur (SNAT).
OUPUT (sortie) comme pour la table FILTER.

Prérequis

Version de logiciel et serveur requis :

Système d‘exploitation : Arch Linux, Fedora ou autre Linux
Noyau : kernel 2.6.x
Logiciel : IPTables
Administration Serveur : Webmin


Architecture matériel et logiciel nécessaires


Configuration pour deux interfaces Ethernet physiques

Interface pour héberger – eth0 192.168.1.1/24
Interface pour être utiliser en local – eth1 172.16.20.1/24

Les règles proposées ci-dessous de Netfilter permettront aux machines du réseau local eth1 LAN et d‘accéder par eth0 au réseau externe WAN.

IPTables – Installation

Les commandes iptables pour IPV4 et ip6tables pour IPV6 servent à entrer les règles dans les tables de Netfilter. La plupart des règles de filtrage concerne le filtrage. La table FILTER est donc celle par défaut.

Remarque : Précisons néanmoins que les commandes iptables et ip6tables doivent coexister et qu‘en aucune manière la dernière ne se substitue à la première, chacune s‘applique pour une Stack ou Pile réseau différente.

Arch Linux

# pacman -S iptables


Autre Linux

Remarque : Installation facilement transposable pour chaque Linux, exemple :

# yum install iptables

Variante IPV6

# yum install ip6tables

Syntaxe pour Linux Centos, Fedora ou RedHat

IPTables – Configuration

Fichier /etc/syctl.conf

#
# Kernel sysctl configuration
#
# Disable packet forwarding
net.ipv4.ip_forward = 1    * Modifier la ligne ; remplacer 0 par 1

# Disable the magic-sysrq key (console security issues)
kernel.sysrq = 0

# Enable TCP SYN Cookie Protection
net.ipv4.tcp_syncookies = 1



Activer les modification

# sysctl -p


Fichier /etc/conf.d/iptables

# Configuration for iptables rules
IPTABLES=/usr/sbin/iptables
IP6TABLES=/usr/sbin/ip6tables

IPTABLES_CONF=/etc/iptables/iptables.rules
IP6TABLES_CONF=/etc/iptables/ip6tables.rules
IPTABLES_FORWARD=1    * Modifier la ligne ; remplacer 0 par 1

IPTables – Script de règles Arch Linux

Créer un scripts avec les règles suivantes

# vim /sbin/iptables.sh

#!/bin/sh -x

# Vider les tables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Règles par défaut - on rejette tout
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT DROP

# tables NAT
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P INPUT ACCEPT
iptables -t nat -P OUTPUT ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -A POSTROUTING -t nat -o eth0 -s 172.16.20.0/24 -j MASQUERADE

# table MANGLE
iptables -t mangle -P PREROUTING ACCEPT
iptables -t mangle -P INPUT ACCEPT
iptables -t mangle -P OUTPUT ACCEPT
iptables -t mangle -P FORWARD ACCEPT
iptables -t mangle -P POSTROUTING ACCEPT

# Autoriser toutes les connexions loopback
iptables -A INPUT -i lo -m state ! --state INVALID -j ACCEPT
iptables -A OUTPUT -o lo -m state ! --state INVALID -j ACCEPT

# LAN
iptables -A INPUT -i eth1 -s 172.16.20.0/24 -d 172.16.20.1 -j ACCEPT
iptables -A OUTPUT -o eth1 -s 172.16.20.1 -d 172.16.20.0/24 -j ACCEPT

# Autoriser les connexions vers l‘extérieur
iptables -A OUTPUT -o eth0 -m state ! --state INVALID -j ACCEPT
iptables -A FORWARD -t filter -o eth0 -m state ! --state INVALID -j ACCEPT

# Autoriser Internet seulement si une requête émane du système
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

# Accès au serveur web
iptables -A INPUT -i eth0 -p tcp --dport http -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --dport http -j ACCEPT
iptables -A INPUT -i eth0 -p tcp --dport http -j ACCEPT
iptables -A OUTPUT -o eth1 -p tcp --dport http -j ACCEPT

# Rejetter toute demande venant de l‘extérieur
iptables -A INPUT -i eth0 -m state --state NEW -j DROP

# Scan de port : protection du type de scan de port dit XMAS et NULL ; implémentation :
iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP

# Limite TCP, UDP, ICMP Flood ! - Une attaque possible est de saturer une interface réseau.
iptables -A INPUT -i eth0 -p tcp --syn -m limit --limit 3/s -j ACCEPT
iptables -A INPUT -i eth0 -p udp -m limit --limit 10/s -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-reply -m limit --limit 1/s -j ACCEPT

# Rejeter le ping depuis Internet
iptables -A INPUT -i eth0 -p icmp --icmp-type destination-unreachable -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-reply -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type time-exceeded -j DROP
iptables -A INPUT -i eth0 -p icmp --icmp-type source-quench -j DROP



Remarque : Rendre executable le script de règles et le lancer :

# chmod u+x /sbin/iptables.sh
# /sbin/iptables.sh

IPTables – Script de règles Fedora

Variante pour Fedora qui stock les script IPTables dans les répertoires suivants :

/etc/sysconfig/iptables
/etc/sysconfig/ip6tables


Ces script sont les mêmes que ceux pré-cité, sauf qu‘ils n‘ont pas besoins que l‘on précise l‘exécutable (iptables, ip6tables).

Exemple :

-A INPUT -i eth0 -p icmp --icmp-type destination-unreachable -j DROP
-A INPUT -i eth0 -p icmp --icmp-type echo-reply -j DROP
-A INPUT -i eth0 -p icmp --icmp-type echo-request -j DROP
-A INPUT -i eth0 -p icmp --icmp-type time-exceeded -j DROP
-A INPUT -i eth0 -p icmp --icmp-type source-quench -j DROP


De plus ip6tables supporte /etc/services qui référence des correspondances service/port/protocole.

Conseillons pour plus de maintenabilité d‘utiliser :

iptables -A INPUT -i eth0 -p tcp --dport http -j ACCEPT

Sinon en IPV6 les requêtes icmp diffèrent de celle en IPv4, ce sujet sera abordé prochainement.


Rubrique en cours de validation



Sauvegarde et restauration – Règles de démarrage

En l‘état, les règles ne sont pas inscrites de façon permanente, pour les sauvegarder, exécuter :

# iptables-save > /etc/iptables/iptables.rules

Pour les restaurer en cas de redémarrage :

# vim /etc/rc.conf

# -----------------------------------------------------------------------
# DAEMONS
# -----------------------------------------------------------------------
DAEMONS=(... iptables network ...)

Epilogue

Pour la sérénité d‘une pléiade de Systèmes d‘Information, une directive sera toujours amplement justifiable et couramment sollicitée, une « Isolation Réseau » de certains services ou protocoles de connexions « Ethernet ».


Article connexe du sujet

Arch Linux - Installer et Configurer un Serveur Web
BIND Système Nom Domaine - Arch Linux
Configuration Oracle VM VirtualBox pour Arch Linux
Webmin - Administration Serveur - Installation Arch Linux

Auteur
Jean-Michel Marques
Début de page
bl br
C-extra.com v. 1.2.2 © 2000-2014, tous droits réservés  –  Mise à jour le 12 Avril 2014 Infologisme.com