cours/content/admin_reseau/1_NAT/index.md

3.5 KiB

title date tags categories
Administration réseaux : Le NAT 2022-02-07
IPv2
relation
Administration Réseaux
Cours

Historique

  • 1990 ipfwadm: creation des tables INPUT, OUTOUT, FORWARD. Support de TCP, UDP et ICMP.
  • ipchains: evolution de ipfwadm, ajout du supportd'IP et des chaines. Les paquets pouvaient passer plusieurs fois par les tables lors du NAT
  • 2004 iptables: ajout des tables filter, nat, mangle
  • 2012 nftables: supression des commandes satellites (gestion de l'arp). Ajout de flexibilité (creation de tables, regles avec plusieurs actions ...)
  • now BPF: machine virtuelle dans le noyau pour gérerle filtrage

IPTable

table

Regroupement de règles ayant un but commun: filter pour le filtrage, nat pour la translation d'adresses et mangle pour le marquage de paquets:

  • filter
    • OUTPUT
    • INPUT
    • NAT
  • nat
    • POSTROURING
    • PREROUTING
    • OUTPUT

La translation d'adresse

Dans le cas du NAT statique

# paquet sortant
# On fait la modification du paquet le plus tard possible
iptables -t nat -A POSTROUTING -s <@A> -j SNAT --to-source <@P>

# paquet entrant
# On fait la modification le plus tot possible
iptables -t nat -A PREROUTING -d <@P>-j DNAT --to-destination <@A>

Dans le cadre du NAT dynamique

# Paquets sortants
iptables -t nat -A POSTROUTING -s <@Net_priv> -o eth1 -j MASQUERADE

Il est possible de faire plusieurs commande MASQUERADE si l'on a plusieurs sorties et plusieurs réseau interne par exemple

Maitenant si on veut rendre une machne accessible de l'exterieur sur le port 80 par exemple :

iptables -t nat-A PREROUTING -p tcp --dport 80 -d<@IP_gateway> -j DNAT --to <@>

Le pare-feu

Premiere ligne de defense de notre infrastructure. Philosophie generale: ce qui vient de l'exterieur n'est pas de confiance, ce qui sort de notre reseau l'est.

Les services accessibles depuis l'exterieurs (serveur web par ex.) sont positionnés dans une DMZ.

Les polices par defaut d'iptable

  • ACCEPT
  • DROP
  • REJECT

On preferera utiliser DROP que REJECT : non seulement on donne des information sur la machine, mais en plus on consomme de la ressource (trame ICMP envoyee en retour).

technique avancée

Il est possible de limiter les connexions vers le serveur web à 10 par minutes

iptables -A FORWARD -p tcp --dport 80 -d <@srv_web> -m limit --limit 10/m -j
ACCEPT

Il est aussi possible de filtrer les paquets en fonction de leur état. Via le tuple <@source, @destination, src_port, dest_port> le pare-feu est en mesure de stocker l'état de la connexion. Elle peut être de 3 formes:

  • NEW (paquet SYN reçu du client)
  • ESTABLISHED (SYN + ACK complet -- poignée de main terminée)
  • RELATED (connexion relative à une déjà établie)
  • INVALID
# autoriser les nouvelles connexions en HTTP
iptables -A FORWARD -p tcp --dport 80 -d <@srv_web> -m state --state NEW, ESTABLISHED

# On peut factoriser tous les established, on ne peut de toutes manière pas
# passer en ESTABLISHED dans passer avant par un NEW
iptables -A FORWARD -m state --state ESTABLISHED -j ACCEPT

INVALID: le cas du scan de port

Une premiere facon de faire du scan avec la methodedu SYNScan : on envoie des syn sur un ensemblede ports.

Il est aussi possile de faire du NULLScan: On envoie un segment TCP avec tous les champs mis à null Si le port est ouvert alors il n'y aura pas de reponse, S'il est ferme, le serveur renvoie un RST-ACK

INVALID permet donc de gérer le cas du NullScan explicitement.