IPTables – Un firewall pour Linux

GNU/Linux est reconnu depuis longtemps comme un système stable et sécurisé. Ceci est en partie dû à l’intégration d’instructions à l’intérieur même du kernel de Linux. Afin de mettre en place cette sécurité il suffit de mettre en place les scripts correspondants. Le script d’Arno, relativement facile à mettre en place et adaptable à vos besoin, permet d’activer une de ses instructions du noyau: IPTables.

Nota: toutes les manipulations effectuées ici on été testées avec succès sur Debian et Ubuntu, le site officiel d’Arno est ici.

1 – Introduction

1.1 – Le routage trois pattes

Lorqu’on parle de routage, on considère généralement un certains nombre de pattes. Il s’agit donc, dans ce cas, noeud entre trois réseaux définis en LAN, WAN et DMZ

Pour mémoire…

  • Le LAN est le réseau local
  • Le WAN est le réseau Internet
  • La DMZ est la zone démilitarisée

Le rôle de la DMZ est de recevoir toutes les requêtes provenant du WAN et n’ayant pas le droit d’accéder au LAN, on y place généralement les serveurs auxquels on veut accéder depuis Internet, comme les serveurs Web, Mail etc.

1.2 – L’intérêt du script d’Arno

IPTables est un élément du noyau Linux qui a pour fonction d’assurer le filtrage du trafic réseau comme n’importe quel firewall. Cette fonctionnalité, implémentée à un niveau très bas du système d’exploitation est très performante mais nécessite un configuration particulièrement complexe car exhaustive. Le script d’Arno, comme son nom l’indique, est un script réalisé par « Arno » qui à pour fonction de simplifier au maximum l’utilisation d’IPTables sans qu’il soit nécessaire de connaître par coeur la syntaxe de configuration de ce dernier. Sa mise en place relativement facile est intéressante pour tout système de routage composant jusqu’à trois pattes (LAN, WAN et DMZ).

2 – Mise en place du script

2.1 – Prérequis

  • Un noyau avec IPTables activé en module ou en dur
  • L’interpréteur /bin/sh (installé partout par défaut)
  • Un certain nombre d’application (ifconfig, modprobe, grep, uname, sed, date et cut)
  • Nota: IPTables n’est pas compatible avec IPChains

2.2 – Récupération

Tout ceci tient en un petit fichier compressé de 50Ko:

wget http://rocky.eld.leidenuniv.nl/iptables-firewall/arno-iptables-firewall-1.8.4d-stable.tgz 

2.3 – L’archive en details

Commencez donc par la décompresser:

tar xvzf arno-iptables-firewall-1.8.4d-stable.tgz

Contenu non exaustif de cette archive:

  • CHANGELOG – Modifications depuis la version précédente
  • README – Guide de mise en place
  • fwfilter – Filtre pour la consultation des logs
  • gpl_licence.txt – Texte de la licence GPL
  • iptables-firewall.conf – Fichier de configuration
  • iptables-firewall.conf-exemple – Exemple de configuration
  • arno-iptables-firewall – Le script lui même
  • syslog.conf.* – Exemple de configuration des logs pour différentes distributions

3 – Installation et configuration

3.1 – Copie des fichiers

  • Mise en place du script
    sudo cp arno-iptables-firewall /etc/init.d/
  • Mise en place du fichier de configuration:
    sudo cp arno-iptables-firewall.conf /etc/
  • Afin d’assurer un minimum de sécurité, il est nécessaire de reserver les droit de ce fichier pour l’utilisateur root:
    sudo chown root /etc/arno-iptables-firewall.conf
    sudo chmod 600 /etc/arno-iptables-firewall.conf
  • Préparation du lancement d’IPTables au boot:
    sudo update-rc.d arno-iptables-firewall start 99 2 . stop 00 2 0 1 6 .
  • Toute la configuration d’IPTables s’effectuera dans ce fichier(/etc/iptables-firewall.conf).

3.2 – Configuration des interfaces réseau

La premiére étape de configuration concerne bien sûr la déclaration des interfaces réseau. Comme il est dit en introduction, ce script peut gérer jusqu’à trois interfaces, mais, en fonction des besoins, vous pouvez en activer moins. Dans le cas d’un seul ordinateur connecté à internet que l’on veut protéger avec le Firewall, il suffit de configurer l’interface WAN. À partir du moment où vous faites du partage de connexion, il est judicieux de pousser un peu plus loin la configuration du script

WAN: La connexion vers l’extérieur

Sa configuration s’effectue dans la rubrique External (internet) interface settings. Vous devez y renseigner votre mode de connexion à Internet, et les eventuels paramétres IP. Si vous vous connectez en ppp, comme avec l’ADLS, il n’est généralement pas nécessaire d’activer le DHCP, l’adresse IP fixe ou le sous-réseau. Par contre, dans le cas d’un connexion permanente par le câble, le ppp ne sera pas activé mais le le DHCP oui. À vous de voir en fonction de votre fournisseur d’accés et de votre abonnement. Sachez toutefois que la configuration d’IPtables ne vous dispense pas de configurer votre connexion internet avec votre outil habituel

Vous trouverez ci-dessous un exemple de connexion avec pppoe (ADSL avec une 9Box après avoir utilisé ppoeconf et configuré mon /etc/network/interfaces)

###############################################################################
# External (internet) interface settings                              
###############################################################################
# Mon type de connexion à internet
EXT_IF="ppp0"
# Mon prestataire ne me distribue pas d'IP en dehors du pppoe...
EXT_IF_DHCP_IP=0
# Je ne dispose pas d'IP fixe
EXTERNAL_NET=""
EXT_NET_BCAST_ADDRESS=""

LAN: Le réseau interne

Il vous faut indiquer ici le nom de votre carte réseau connectée au LAN (si vous n’en avez qu’une il s’agit forcement de eth0), ainsi que votre sous réseau. Pour l’option de broadcast, je ne saurais que vous encourager à la laisser telle quelle.

###############################################################################
# Internal (LAN) interface settings                                           #
###############################################################################
# Mon LAN est connecté à ma carte eth0
INT_IF="eth0"
# Mon sous-réseau (rien de très exotique !)
INTERNAL_NET="192.168.0.0/24"
# Rien de particulier pour le broadcast
INT_NET_BCAST_ADDRESS=""

La DMZ pour les serveurs

C’est ce qu’il y a de plus simple à configurer, il suffit d’indique de nom de la carte réseau concernée et l’adresse du sous réseau. Dans mon cas ce sera rapide car elle n’est pas activée:

###############################################################################
# DMZ (aka DeMilitarized Zone) settings (EXPERT SETTINGS!)                    #
###############################################################################
# Pas de DMZ donc pas d'interface
DMZ_IF=""
# Ni de sous réseau
DMZ_NET=""

Le routage NAT pour partager la connexion Internet

Le routage NAT permet d’activer le partage de la connexion à Internet, c’est lui qui autorisera vos clients à sortir effectuer des requêtes vers Internet. Dans la plupart des cas il suffit de l’activer. Par contre, si vous désirez activer le NAT pour votre DMZ je vous invite à suivre les instructions fournies avec le script

###############################################################################
# NAT (Masquerade, SNAT, DNAT) settings                                       #
###############################################################################
# Le NAT est activé
NAT=1
# Une seule carte d'activée donc pas de Multi-Route
MASQ_MULTI_ROUTE=0
# La configuration par défaut des options avancée me va très bien
# NAT_STATIC_IP="193.2.1.1"
NAT_INTERNAL_NET="$INTERNAL_NET"
# Ma DMZ n'est pas activé donc...
NAT_TCP_FORWARD=""
NAT_UDP_FORWARD=""
NAT_IP_FORWARD=""

3.3 – Configuration avancée

La configuration générale

Dans la rubrique « General settings » vous trouverez un certain nombre d’options concernant toutes vos interfaces. Éditez les en fonction de vos besoins. Je ne peux pas vous donner d’exemple, il s’agit là de vos préférence personnelles. Jetez-y un oeuil tout de même car celà peut servir, à titre d’exemple, le protocole IRC est désactivé. Il en va de même pour la rubrique « Logging options - All logging is rate limited to prevent log flooding » qui concerne la créations de journaux, cette fonction est limitée par défaut afin d’éviter une surcharge de la machine.

Ouvrir des ports

Par défaut tout est fermé, il faut donc ouvrir les ports dont on a besoin. Voici un aperçu des lignes du fichier à éditer. Dans tous les cas de nombreuses informations sont présentes dans le fichier lui même. La configuration du firewall est principalement couverte par deux rubriques du fichier de configuration. La première « Firewall policies for the LAN (EXPERT SETTINGS!)  » concerne les accés de l’extérieur vers le LAN tandis que la seconde « Firewall policies for the DMZ (EXPERT SETTINGS!)  » concerne les ouvertures vers la DMZ.

La syntaxe est ici relativement simple à comprendre, les variables étant des IP ou des numéros de ports séparés par un espace. Les plages de port ou d’IP sont indiquées avec le symbole :.

  • OPEN – Concerne une autorisation
  • DENY – Concerne une interdiction
  • TCP – Applique l’autorisation ou l’interdiction en rapport au protocole TCP
  • UDP – Applique l’autorisation ou l’interdiction en rapport au protocole UDP
  • IP – Applique l’autorisation ou l’interdiction en fonction d’une adresse IP
  • HOST – Applique l’autorisation ou l’interdiction à un hôte en particulier

Les autres options

Les parties du script que je n’aborde pas ici, concernent des réglages beaucoup plus fins et sécifiques à vos besoins en particulier. Ils se configurent, grosso-modo, de la même manière que les options citées ci-dessus

Paramètres de arno-iptables-firewall

Utilisation: /etc/int.d/rc.iptables { start | stop | restart | breread | status }

  • start – Démarre le firewall
  • stop – Arrête le firewall
  • restart – Redémarre le firewall
  • breread – Relire les hôtes bloqués
  • status [-t {table}] [chain] – Afficher les règles du firewall ([chain] et [-t {table}] sont optionnels)