diff --git a/content/admin_reseau/index.md b/content/admin_reseau/index.md new file mode 100644 index 0000000..dd272df --- /dev/null +++ b/content/admin_reseau/index.md @@ -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.