netfilter/iptables introduction. présentation – 1 netfilter est un module du noyau linux qui...
Post on 04-Apr-2015
117 Views
Preview:
TRANSCRIPT
Netfilter/Iptables
Introduction
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
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
Historique
NetFilter/Iptables est intégré au noyau Linux depuis la version 2.4 (1998)
Il est le successeur de ipchains
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.
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)
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).
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
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)
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
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).
La table MANGLE
permet de marquer l'en-tête des paquets (gestion de la QOS, ...)
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.
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).
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.
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.
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
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
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
Sauvegarde-Restauration
les règles sont stockées en mémoire pour les sauvegarder : iptables-save pour les restaurer : iptables-restore
Iptables – Exemples -1
vidage chaine INPUT
iptables -F INPUT politique par défaut pour la chaine INPUT
iptables -P INPUT ACCEPT
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
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
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
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
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
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
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.
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
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.
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
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
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
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
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
top related