36
Netfilter/Iptables Introduction

Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Embed Size (px)

Citation preview

Page 1: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Netfilter/Iptables

Introduction

Page 2: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Présentation – 1

Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction d'adresse (NAT) et de ports (PAT) historisation du traffic

Netfilter fonctionne en mode noyau il récupère les paquets grâce à des hooks et

peut les manipuler avant et après le routage Netfilter constitue un framework utilisé par de

nombreux pare-feux

Page 3: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Présentation – 2

Iptables est la commande en espace utilisateur qui permet de paramétrer Netfilter

on fait très souvent l'amalgame entre Netfilter et Iptables

Page 4: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Historique

NetFilter/Iptables est intégré au noyau Linux depuis la version 2.4 (1998)

Il est le successeur de ipchains

Page 5: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Caractéristiques -1

Netfilter est le pare-feu standard de Linux et est mis en oeuvre dans de nombreuse solutions commerciales.

Netfilter est un pare-feu à états (stateful): il peut prendre des décisions de routage/filtrage en fonction de l'état d'une connexion TCP

très flexible et modulaire il est très largement utilisé et dispose d'une

abondante documentation.

Page 6: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Caractéristiques - 2

on trouve de nombreuses solutions permettant de simplifier son utilisation

interfaces graphiques (Firestarter, Firebuilder, .... méta-langages (Firehol, ...) solutions intégrées

Netfilter ne joue pas le rôle de proxy ni d'IDS sa configuration peut être complexe (plusieurs

centaines de règles pour les cas complexes)

Page 7: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction
Page 8: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Principes

Netfilter utilise des listes d'accès qui sont regroupées dans des "chaînes", elles mêmes contenues dans des tables.

Chaque paquet IP qui arrive, traverse, sort de du noyau Linux est analysé et traité (accepté, rejeté, refusé, modifié, redirigé) en fonction des règles qui lui sont applicables. Netfilter permet de faire de la translation d'adresses et du masquage (translation de ports).

Page 9: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Netfilter : le filtrage

Netfilter peut filtrer sur Les adresses/blocs d'adresse IP Les ports source et/ou destination Les protocoles (TCP, UDP, ICMP) Les adresses MAC L'état éventuel de la connexion TCP

Page 10: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Les 3 tables

FILTER : table par défaut, contient les chaines de règles de filtrage

NAT : contient les règles de translation d'adresses /ports

MANGLE : contient les règles de modification de paquets (peu utilisée)

Page 11: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

La table FILTER

3 chaines prédéfinies : FORWARD : contient les règles à appliquer aux

paquets qui traversent (routage) INPUT : contient les règles à appliquer aux paquets

destinés aux processus locaux OUTPUT : contient les règles à appliquer aux

paquets émis par les processus locaux

Page 12: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

La table NAT permet d'effectuer toutes les translations

d'adresses nécessaires. La chaîne PREROUTING.

Permet de faire de la translation d'adresse de destination (DNAT).

La chaîne POSTROUTING. permet de faire de la translation d'adresse de la

source (SNAT), comme du masquage d'adresse (MASQUERADE).

La chaîne OUTPUT. permet de modifier la destination de paquets générés

localement (par la passerelle elle-même).

Page 13: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

La table MANGLE

permet de marquer l'en-tête des paquets (gestion de la QOS, ...)

Page 14: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Les chaînes

5 chaînes prédéfinies

PREROUTING

INPUT

FORWARD

OUTPUT

POSTROUTING

nat, mangle

Par cette chaîne passeront les paquets entrant dans la machine avant routage.

filterCette chaîne traitera les paquets entrants avant qu'ils ne soient passées aux couches supérieures (les applications).

filterCe sont les paquets uniquement transmis par la machine sans que les applications n'en aient connaissance.

filter, nat, mangle

Cette chaîne sera appelée pour des paquets envoyés par des programmes présents sur la machine.

nat Les paquets prêts à être envoyés (soit transmis, soit générés) seront pris en charge par cette chaîne.

Page 15: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Les cibles – 1 ACCEPT : Les paquets envoyés vers cette cible seront

tout simplement acceptés et pourront poursuivre leur cheminement au travers des couches réseaux.

DROP : Cette cible permet de jeter des paquets qui seront donc ignorés.

REJECT : Permet d'envoyer une réponse à l'émetteur pour lui signaler que son paquet a été refusé.

LOG : Demande au noyau d'enregistrer des informations sur le paquet courant. Cela se fera généralement dans le fichier /var/log/syslog (selon la configuration du programme syslogd).

Page 16: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Les cibles – 2 MASQUERADE : Cible valable uniquement dans la

chaîne POSTROUTING de la table nat. Elle change l'adresse IP de l'émetteur par celle courante de la machine pour l'interface spécifiée. Cela permet de masquer des machines et de faire par exemple du partage de connexion.

SNAT : Egalement valable pour la chaîne POSTROUTING de la table NAT seulement. Elle modifie aussi la valeur de l'adresse IP de l'émetteur en la remplaçant par la valeur fixe spécifiée.

DNAT : Valable uniquement pour les chaînes PREROUTING et OUTPUT de la table nat. Elle modifie la valeur de l'adresse IP du destinataire en la remplaçant par la valeur fixe spécifiée.

Page 17: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Les cibles - 3

RETURN : Utile dans les chaînes utilisateurs. Cette cible permet de revenir à la chaîne appelante. Si RETURN est utilisé dans une des chaînes de base précédente, cela est équivalent à l'utilisation de sa cible par défaut.

Page 18: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Iptables – Syntaxe de base – 1 Syntaxe : Fonction : iptables -h aide en ligne iptables -L lister les chaînes et règles actives iptables -N chain créer une nouvelle chaîne

utilisateur iptables -X chain supprimer chaîne utilisateur iptables -F [chain] vider une chaîne (ou toutes) iptables -P chain cible traitement par défaut pour

une règle iptables -A chain règle ajouter une règle à la

chaîne

Page 19: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Iptables – Syntaxe de base – 2 Syntaxe : Fonction : iptables -A chain règle ajouter une règle à la

chaîne iptables -I chain [numéro] règle insérer une

chaîne en position numéro iptables -D chain [numéro] [règle] effacer une

règle iptables -R chain [numéro] [règle] remplacer une

règle iptables -C chain tester un paquet dans une règle iptables -Z [chain] remettre à zéro les compteurs

Page 20: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Iptables – Les options-i interface : appliquer la règle sur cette interface d'entrée

-o interface : appliquer la règle sur cette interface de sortie

-t table : table concernée ( filter par défaut)

-s [!] X.X.X.X/lg adresse source, longueur du masque, ! signifie la négation

-d [!] X.X.X.X/lg adresse dest (et longueur du masque)

-p protocole tcp / udp / icmp / all

--source-port [!] [port[:port]] port source (ou intervalle de ports)

--destination-port [!] [port[:port]] port destination (ou interv.de ports)

--tcp-flags [!] masq comp flags de paquets tcp ( ex. SYN)

-j cible ACCEPT/DROP/QUEUE/RETURN/REDIRECT/MASQUERADE / DNAT/ SNAT/ LOG

Page 21: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Sauvegarde-Restauration

les règles sont stockées en mémoire pour les sauvegarder : iptables-save pour les restaurer : iptables-restore

Page 22: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Iptables – Exemples -1

vidage chaine INPUT

iptables -F INPUT politique par défaut pour la chaine INPUT

iptables -P INPUT ACCEPT

Page 23: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Le filtrage à états – 1

Iptables permet d’effectuer du filtrage à états : c’est à dire qu’il permet de tenir compte de l’état de la connexion TCP pour prendre une décision de filtrage

--state : Permet de spécifier l'état du paquet à faire correspondre parmi les états suivants :

ESTABLISHED : paquet associé à une connexion déjà établie

NEW : paquet demandant une nouvelle connexion INVALID : paquet associé à une connexion inconnue RELATED : Nouvelle connexion mais liée, idéal pour

les connexions FTP

Page 24: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Le filtrage à états – 1

Exemples :

# iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT

# iptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT

Page 25: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Filtrage de base

iptables -t filter -F

iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED --jump ACCEPT

iptables -t filter -A INPUT --protocol tcp --destination-port 80 --jump ACCEPT

iptables -t filter -A INPUT -m state --state NEW,INVALID --jump DROP

Page 26: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

La NAT - SNAT

SNAT : cible valable dans la table NAT dans la chaîne POSTROUTING – à utiliser avec un adresse fixe

syntaxe :

--to-source <adresse-ip>[-<adresse-ip>][:port-port]

Ex :

iptables -t nat -A POSTROUTING -o ppp0 -j SNAT --to-source 193.15.24.156

Page 27: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

La NAT - DNAT Cette cible n'est valable que dans la table nat , dans les

chaînes PREROUTING et OUTPUT , et dans les chaînes définies par l'utilisateur qui sont appelées par celles-ci. Elle spécifie que l'adresse de destination du paquet doit être modifiée (ainsi que tous les paquets à venir dans le cadre de cette connexion ), et que les règles doivent cesser d'être examinées. Elle reçoit une option :

--to-destination <adresse-ip>[-<adresse-ip>][:port-port]

qui peut spécifier une seule adresse IP de destination, une série d'adresse IP inclusive , et optionnellement, une plage de ports (qui n'est valide que si la règle spécifie aussi -p tcp ou -p udp). Si aucune plage de port n'est spécifiée, le port de destination ne sera jamais modifié.

Ex : iptables -t nat -p tcp -A PREROUTING -j DNAT --destination-port 80 --to-destination 192.168.1.3:80

Page 28: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

La NAT - MASQUERADE Cette cible n'est valable qu'avec la table nat , dans la chaîne

POSTROUTING à utiliser uniquement avec une adresse dynamique: si vous

avez une adresse IP statique, vous devez utiliser la cible SNAT. Le masquerading revient à spécifier une translation (mapping) vers l'adresse IP de l'interface par laquelle le paquet va sortir, mais implique aussi que les connexions sont perdues lorsque l'interface tombe.

option : --to-ports <port>[-<port>]

qui spécifie une série de ports source à utiliser, qui prend le pas sur la sélection heuristique de port source SNAT (voir ci dessus). Ceci n'est valide que si la règle spécifie aussi -p tcp ou -p udp.

Ex : iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

Page 29: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Les chaines utilisateurs – 1 Création de la chaîne sur laquelle les filtres

seront appliqués ;

# iptables -N internet Ensuite, on associe la chaîne 'internet' à la

chaîne INPUT, c'est à dire en entrée sur l'interface 'eth0' ;

# iptables -A INPUT -i eth0 -j internet Permet :

ESTABLISHED : permet d'avoir le mode 'stateful', c'est à dire qui regarde la validité des paquets retour par rapport aux fenêtres ;

RELATED : permet d'accepter les paquets ICMP d'erreur concernant la transaction.

Page 30: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Les chaines utilisateurs – 2# iptables -A internet -m state --state

ESTABLISHED,RELATED -j ACCEPT Tout ce qui arrive sur cette interface, matché par cette

chaîne, est journalisé.

# iptables -A internet -p all -s any/0 -d any/0 -j LOG Il est nécessaire maintenant d'autoriser les flux (ici, le service

SSH de 'any 0/0' vers 'yoda 10.0.0.1/32') ;

# iptables -A internet -i eth0 -p tcp -s 0/0 -d 10.0.0.1/32 --source-port 1023: --destination-port 22 -j ACCEPT

On interdit tout.

# iptables -A internet -i eth0 -p all -s any/0 -d any/0 -j DROP

Page 31: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Le logging Met en service la journalisation du noyau (kernel logging ) pour

les paquets correspondants. Lorsque cette option est positionnée pour une règle, le noyau Linux affichera certaines informations sur tous les paquets correspondants à cette règle (comme la plupart des champs de l'en-tête IP) par l'intermédiaire des journaux du noyau.

--log-level niveau

Niveau de journalisation (cf syslog.conf(5)). --log-prefix préfixe

Préfixe les messages de journalisation avec le préfixe spécifié; utile pour distinguer les différents messages d'un fichier de log.

--log-tcp-options

Option de journalisation de l'en-tête de paquets TCP. --log-ip-options

Option de journalisation de l'en-tête de paquets IP.

Page 32: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Blocage des adresses privées

# On refuse les paquets des classes privées

iptables –A INPUT –i eth0 –s 10.0.0.0/8 –j DROP

iptables –A INPUT –i eth0 –s 172.16.0.0/12 –j DROP

iptables –A INPUT –i eth0 –s 192.168.0.0./16 –j DROP

Page 33: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Remarques de mise en oeuvre - 1

Toute mise en place de pare-feu doit débuter par la remise à zero des chaines standard

iptables -F

iptables -F -t nat

iptables -F -t mangle

Des chaines utilisateurs iptables -X

iptables -X -t nat

iptables -X -t mangle

Remise à zero des compteurs iptables -Z

Page 34: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Remarques de mise en oeuvre - 2

Stratégie par défaut : Drop

iptables -P INPUT DROP

iptables -P OUTPUT DROP

iptables -P FORWARD DROP Autorisation sur loopback

iptables -A INPUT -i lo -j ACCEPTiptables -A OUTPUT -o lo -j ACCEPT Utilisation d’outils : nmap pour effectuer un scan

de ports

Page 35: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Exemple 1 – un pare feu de base Bloque toutes les connexions entrantes depuis l'extérieur

Hyp. : eth0 : LAN, eth1 : extérieur

Réseau local en 192.168.x.y , passerelle en 192.168.1.1

On crée une chaine pour filtrer selon l'état des paquets :

iptables -N block

iptables -A block -m state --state ESTABLISHED,RELATED -j ACCEPT

iptables -A block -m state --state NEW -i ! eth1 -j ACCEPT

iptables -A block -j DROP

iptables -A INPUT -j block

iptables -A FORWARD -j block

Page 36: Netfilter/Iptables Introduction. Présentation – 1 Netfilter est un module du noyau Linux qui assure les fonctionnalités suivantes : pare-feu traduction

Example 2PRIVPORTS=“0:1023” # ports système

UNPRIVPORTS=“1024:65535” #ports standard

#DNS autorisé

iptables –A OUTPUT -o eth0 –p udp –s $MY_IP -sport 53 -d $NAMESERVER - dport 53 –j ACCEPT

iptables –A INPUT -I eth0 –p udp –s $NAMESERVER -sport 53 -d $MY_IP -dport 53 –j ACCEPT

#connexion SSH autorisée

iptables –A INPUT -I eth0 –p tcp -sport $UNPRIVPORTS - -dport 22 –j ACCEPT

iptables –A OUTPUT -o eth0 –p tcp –s $MY_IP -sport 22 -dport $UNPRIVPORTS –j ACCEPT