Add NAT course
This commit is contained in:
parent
895880be98
commit
c35fe63d5b
1 changed files with 120 additions and 0 deletions
120
content/admin_reseau/index.md
Normal file
120
content/admin_reseau/index.md
Normal file
|
@ -0,0 +1,120 @@
|
||||||
|
---
|
||||||
|
title: "Administration réseaux : Le NAT"
|
||||||
|
date: 2022-02-07
|
||||||
|
tags: ["IPv2", "relation"]
|
||||||
|
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.
|
Loading…
Add table
Add a link
Reference in a new issue