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

120 lines
3.5 KiB
Markdown
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

---
title: "Administration réseaux : Le firewall et le NAT"
date: 2022-02-07
tags: ["IPv4", "iptables"]
categories: ["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.