Différences
Ci-dessous, les différences entre deux révisions de la page.
Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente | ||
pratique:informatique:parefeu:nftables [30/05/2024 11:07] – Zatalyz | pratique:informatique:parefeu:nftables [30/01/2025 20:17] (Version actuelle) – [Exemples de fichiers suivant les cas] Zatalyz | ||
---|---|---|---|
Ligne 1: | Ligne 1: | ||
====== Nftables ====== | ====== Nftables ====== | ||
+ | <WRAP center round important 60%> | ||
+ | Les exemples de configuration doivent être validés par des personnes experimentées, | ||
+ | </ | ||
+ | |||
===== Passer de iptables à nftables ===== | ===== Passer de iptables à nftables ===== | ||
Déjà, sur toute nouvelle version de Debian, par défaut c'est nftables derrière (commande '' | Déjà, sur toute nouvelle version de Debian, par défaut c'est nftables derrière (commande '' | ||
Ligne 9: | Ligne 13: | ||
===== nftables.conf ===== | ===== nftables.conf ===== | ||
Ce fichier ''/ | Ce fichier ''/ | ||
+ | |||
+ | ==== Fichier par défaut et fonctionnement ==== | ||
Fichier par défaut sur ma Debian : | Fichier par défaut sur ma Debian : | ||
Ligne 31: | Ligne 37: | ||
* On peut mettre une commande directement (pas n' | * On peut mettre une commande directement (pas n' | ||
* '' | * '' | ||
- | * '' | + | * '' |
* Ici " | * Ici " | ||
- | * Les chaines sont une suite de règles à appliquer dans un contexte précis. Ici, les noms " | + | * Les chaines sont une suite de règles à appliquer dans un contexte précis. Ici, les noms " |
+ | * Les type peuvent être : '' | ||
+ | * Les hook peuvent être : '' | ||
* '' | * '' | ||
+ | * Peu importe l' | ||
+ | |||
+ | Ça c'est donc la version de base et terriblement trop permissive ; suivant les cas d' | ||
+ | |||
+ | Quelque soit la version, je préfère une politique où je refuse tout, en dehors de ce qui est explicitement autorisé. | ||
+ | |||
+ | ==== Options ==== | ||
+ | Je ne vais pas tout décrire, y'a la doc pour ça, juste ce que j'ai trouvé à utiliser et pourquoi (quand ça ne me semblait pas explicite avec un petit commentaire dans la configuration). | ||
+ | |||
+ | === IPv6 === | ||
+ | Sur la partie ipv6, j'ai ajouté la ligne suivante sans trop comprendre((Copié de [[https:// | ||
+ | |||
+ | < | ||
+ | |||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | Ces paquets sont nécessaires au bon fonctionnement d'IPv6 et doivent donc être acceptés, au risque sinon de casser le réseau, d' | ||
+ | |||
+ | < | ||
+ | Cette règle protège contre certaines attaques de spoofing en s' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | * '' | ||
+ | |||
+ | == Smurf Attack == | ||
+ | C'est une attaque assez sournoise. En français " | ||
+ | |||
+ | Il y a deux cas de figures. | ||
+ | |||
+ | On est sur un dédié, pas de réseau sous forme de bridge, on met ces lignes : | ||
+ | < | ||
+ | ip daddr 255.255.255.255 drop | ||
+ | ip daddr 224.0.0.1 drop</ | ||
+ | |||
+ | Mais si on utilise un bridge réseau (cas classique quand on a un hyperviseur), | ||
+ | < | ||
+ | iifname != " | ||
+ | iifname != " | ||
+ | Ou même autoriser explicitement ARP (adresses MAC) et DHCP : | ||
+ | < | ||
+ | # Laisser passer ARP (sinon les VM ne pourront pas résoudre les adresses IP en MAC) | ||
+ | arp accept | ||
+ | |||
+ | # Laisser passer DHCP (car les requêtes DHCP utilisent 255.255.255.255) | ||
+ | ip protocol udp th dport 67 accept | ||
+ | ip protocol udp th dport 68 accept | ||
+ | |||
+ | # Bloquer les broadcasts/ | ||
+ | iifname != " | ||
+ | iifname != " | ||
+ | |||
+ | <WRAP center round info 100%> | ||
+ | L' | ||
+ | </ | ||
+ | |||
+ | ==== Autres éléments de syntaxe ==== | ||
+ | <WRAP center round info 60%> | ||
+ | Je copie des " | ||
+ | </ | ||
+ | |||
+ | |||
+ | Il est possible de déclarer en une ligne plusieurs redirections du même type. Par exemple si suivant les ports tcp redirigent vers diverses ip internes (ou externes !), ça donne ça (exemple issu de ''/ | ||
+ | |||
+ | < | ||
+ | chain prerouting { | ||
+ | type nat hook prerouting priority 0; | ||
+ | #Thanks to nftables maps, if you have a previous iptables NAT (destination NAT) ruleset like this: | ||
+ | # % iptables -t nat -A PREROUTING -p tcp --dport 1000 -j DNAT --to-destination 1.1.1.1: | ||
+ | # % iptables -t nat -A PREROUTING -p udp --dport 2000 -j DNAT --to-destination 2.2.2.2: | ||
+ | # % iptables -t nat -A PREROUTING -p tcp --dport 3000 -j DNAT --to-destination 3.3.3.3: | ||
+ | |||
+ | # It can be easily translated to nftables in a single line: | ||
+ | |||
+ | dnat tcp dport map { 1000 : 1.1.1.1, 2000 : 2.2.2.2, 3000 : 3.3.3.3} : tcp dport map { 1000 : 1234, 2000 : 2345, 3000 : 3456 } | ||
+ | } | ||
+ | chain postrouting { | ||
+ | type nat hook postrouting priority 0; | ||
+ | |||
+ | #Likewise, in iptables NAT (source NAT): | ||
+ | # % iptables -t nat -A POSTROUTING -s 192.168.1.1 -j SNAT --to-source 1.1.1.1 | ||
+ | # % iptables -t nat -A POSTROUTING -s 192.168.2.2 -j SNAT --to-source 2.2.2.2 | ||
+ | # % iptables -t nat -A POSTROUTING -s 192.168.3.3 -j SNAT --to-source 3.3.3.3 | ||
+ | |||
+ | # Translated to a nftables one-liner: | ||
+ | |||
+ | snat ip saddr map { 192.168.1.1 : 1.1.1.1, 192.168.2.2 : 2.2.2.2, 192.168.3.3 : 3.3.3.3 } | ||
+ | } | ||
+ | }</ | ||
+ | |||
+ | On peut aussi définir des variables avec '' | ||
+ | < | ||
+ | table inet firewall { | ||
+ | chain inbound { | ||
+ | type filter hook input priority 0; policy drop; | ||
+ | tcp dport { $tcp_ports } ct state new accept | ||
+ | |||
+ | </ | ||
+ | |||
+ | |||
+ | ==== Exemples de fichiers suivant les cas ==== | ||
+ | === Machine seule === | ||
+ | Pour un dédié, une machine exposé directement à internet, voici la configuration de base. On va adapter un peu dans les chapitres suivants pour les fonctionnements avec hyperviseurs et machines derrière des proxy. | ||
+ | |||
+ | C'est abondament commenté pour s'y retrouver... | ||
+ | |||
+ | <WRAP center round important 60%> | ||
+ | Ce qui suit demande à être relu et adapté suivant le contexte ! | ||
+ | </ | ||
+ | <WRAP center round todo 60%> | ||
+ | D' | ||
+ | </ | ||
+ | |||
+ | |||
+ | <code bash / | ||
+ | # | ||
+ | |||
+ | flush ruleset | ||
+ | |||
+ | # Table sur le trafic de type input/ | ||
+ | table inet firewall { | ||
+ | # Liste pour bannir les IP malveillantes temporairement | ||
+ | set blocklist { | ||
+ | type addr | ||
+ | # Ceci va ajuster le temps de bannissement suivant les récidives | ||
+ | flags timeout | ||
+ | } | ||
+ | # Et ceci est le compteur pour les récidivistes | ||
+ | set offender_count { | ||
+ | type addr | ||
+ | counters | ||
+ | } | ||
+ | # Set dynamique pour suivre les (plages) IP suspectes en temps réel | ||
+ | set realtime_block { | ||
+ | type addr family inet hash | ||
+ | size 1024 | ||
+ | timeout 10s # Timeout après 10 secondes | ||
+ | } | ||
+ | |||
+ | # ------------------------------ | ||
+ | # Règles spécifiques IPv6 | ||
+ | # ------------------------------ | ||
+ | chain input_ipv6 { | ||
+ | # Paquets ICMPv6 qui ne doivent pas être rejetés, voir https:// | ||
+ | meta nfproto ipv6 icmpv6 type { destination-unreachable, | ||
+ | # Protège contre certaines attaques de spoofing en s' | ||
+ | ip6 saddr fe80::/10 icmpv6 type { 130, 131, 132, 143, 151, 152, 153 } accept | ||
+ | |||
+ | # Vérifie si l'IP est bannie | ||
+ | # On différencie ipv4 et ipv6 parce que si les règles sont les mêmes (cf plus bas), | ||
+ | # visiblement ça va aider de filtrer par type d'ip | ||
+ | ip6 saddr @blocklist drop | ||
+ | # Mise à jour du compteur de récidive IPv6 | ||
+ | # Ces temps (10m, 30m, 1h) suffisent à limiter les attaques sans trop grossir la BL | ||
+ | # et ne bloquent pas un humain de façon trop violente. | ||
+ | ip6 saddr @offender_count update counter | ||
+ | ip6 saddr @offender_count counter > 5 add @blocklist { ip6 saddr timeout 1h } | ||
+ | ip6 saddr @offender_count counter > 3 add @blocklist { ip6 saddr timeout 30m } | ||
+ | ip6 saddr @offender_count counter > 1 add @blocklist { ip6 saddr timeout 10m } | ||
+ | |||
+ | # Protection contre les attaques IPv6 (flood udp, syn, ack, rst, ping (on accepte) | ||
+ | ip6 nexthdr udp limit rate over 200/second add @offender_count { ip6 saddr } drop | ||
+ | tcp flags syn limit rate over 100/second add @offender_count { ip6 saddr } drop | ||
+ | tcp flags ack limit rate over 100/second add @offender_count { ip6 saddr } drop | ||
+ | tcp flags rst limit rate over 50/second add @offender_count { ip6 saddr } drop | ||
+ | icmpv6 type echo-request limit rate 10/second accept | ||
+ | icmpv6 type echo-request limit rate over 10/second add @offender_count { ip6 saddr } drop | ||
+ | } | ||
+ | |||
+ | # ------------------------------ | ||
+ | # Règles génériques entrantes | ||
+ | # ------------------------------ | ||
+ | chain input_all { | ||
+ | # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. | ||
+ | type filter hook input priority 0; policy drop; | ||
+ | | ||
+ | # Vérifie si l'IP est bannie | ||
+ | ip saddr @blocklist drop | ||
+ | # Mise à jour du compteur de récidive IPv4 | ||
+ | ip saddr @offender_count update counter | ||
+ | ip saddr @offender_count counter > 5 add @blocklist { ip saddr timeout 1h } | ||
+ | ip saddr @offender_count counter > 3 add @blocklist { ip saddr timeout 30m } | ||
+ | ip saddr @offender_count counter > 1 add @blocklist { ip saddr timeout 10m } | ||
+ | |||
+ | # Autoriser le trafic de paquets " | ||
+ | ct state vmap { established : accept, related : accept, invalid : drop } | ||
+ | # Autorise le loopback | ||
+ | iifname " | ||
+ | |||
+ | ## Mesures anti-DDoS | ||
+ | # Autorise le ping avec une limite pour les abus / Protection contre ICMP Flood (Ping Flood) | ||
+ | # Ping normal : 1/s. Attention des outils de monitorings peuvent être plus rapides (jusque 20/s). | ||
+ | icmp type echo-request limit rate 10/second accept | ||
+ | icmp type echo-request limit rate over 10/second add @offender_count { ip saddr } drop | ||
+ | |||
+ | # Protection contre UDP Flood | ||
+ | ip protocol udp limit rate over 200/second add @offender_count { ip saddr } drop | ||
+ | |||
+ | # Protection contre le DNS Query Flood | ||
+ | ip protocol udp th dport 53 limit rate over 50/second add @offender_count { ip saddr } drop | ||
+ | |||
+ | # Protection contre le SYN Flood, ACK Flood & RST Flood | ||
+ | tcp flags syn limit rate over 100/second add @offender_count { ip saddr } drop | ||
+ | tcp flags ack limit rate over 100/second add @offender_count { ip saddr } drop | ||
+ | tcp flags rst limit rate over 50/second add @offender_count { ip saddr } drop | ||
+ | |||
+ | # Protection contre le Smurf Attack | ||
+ | ip daddr 255.255.255.255 drop | ||
+ | ip daddr 224.0.0.1 drop | ||
+ | # Attention en cas d' | ||
+ | # Dans ce cas exclure spécifiquement d' | ||
+ | #iifname != " | ||
+ | #iifname != " | ||
+ | |||
+ | # Protection contre le SMTP/Email Bombing | ||
+ | ip protocol tcp th dport 25 limit rate over 10/second add @offender_count { ip saddr } drop | ||
+ | |||
+ | # Protection contre les botnets sur les ports fréquemment ciblés | ||
+ | # tcp : telnet (23, 2323), UPnP (7547) | ||
+ | # udp : Memcached (11211), SSDP (1900), LDAP (389), NTP (123), IoT (48101) | ||
+ | ip protocol tcp th dport { 23, 2323, 7547 } add @offender_count { ip saddr } drop | ||
+ | ip protocol udp th dport { 11211, 1900, 389, 123, 48101 } add @offender_count { ip saddr } drop | ||
+ | |||
+ | # Bloquer les scans de ports en cas de tentative de connexion rapide sur des ports multiples | ||
+ | ip protocol tcp limit rate over 50/second counter add @offender_count { ip saddr } drop | ||
+ | ip protocol udp limit rate over 50/second counter add @offender_count { ip saddr } drop | ||
+ | # Règle de détection de scan de port via compteur (connexions multiples sur des ports distincts, ici 50 ports/ | ||
+ | ip protocol tcp sport != 0 limit rate over 50/second add @offender_count { ip saddr } drop | ||
+ | |||
+ | # Gestion des IP malveillantes (liste noire) | ||
+ | ip saddr @blocklist drop | ||
+ | |||
+ | # Applique les règles en plus suivant le protocole (ici ipv6) | ||
+ | meta protocol vmap { ip6 : jump input_ipv6 } | ||
+ | |||
+ | # Realtime Blocking pour détecter les attaques basées sur des plages d'IP | ||
+ | ip saddr @realtime_block counter add @realtime_block { ip saddr } drop | ||
+ | ip saddr @realtime_block limit rate over 200/second add @realtime_block { ip saddr } drop | ||
+ | | ||
+ | # Autoriser certains ports quand les services liés sont actifs (donc à adapter), ici le web et ssh | ||
+ | tcp dport { 22, 80, 443 } ct state new accept | ||
+ | |||
+ | # Logging des connexions bloquées | ||
+ | log prefix " | ||
+ | } | ||
+ | |||
+ | # ------------------------------ | ||
+ | # Règles génériques sortantes | ||
+ | # ------------------------------ | ||
+ | chain output { | ||
+ | # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. | ||
+ | type filter hook output priority 0; policy drop; | ||
+ | # Autoriser le trafic de paquets " | ||
+ | ct state established accept | ||
+ | # Autorise le loopback sortant | ||
+ | oifname " | ||
+ | # Autorise le ping sortant | ||
+ | ip protocol icmp accept | ||
+ | # Autoriser d' | ||
+ | tcp dport { http, https } accept | ||
+ | udp dport domain accept | ||
+ | } | ||
+ | |||
+ | # ------------------------------ | ||
+ | # Règles génériques " | ||
+ | # ------------------------------ | ||
+ | chain forward { | ||
+ | # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. | ||
+ | type filter hook forward priority 0; policy drop; | ||
+ | # Autoriser le trafic de paquets " | ||
+ | ct state established accept | ||
+ | # Redirection des connexions web vers la VM 69 (si c'est le proxy). TODO différence daddr/saddr | ||
+ | ip daddr 10.10.10.69 tcp dport { http, https } accept | ||
+ | ip saddr 10.10.10.69 udp dport domain accept | ||
+ | ip saddr 10.10.10.69 tcp dport { http, https } accept | ||
+ | } | ||
+ | } | ||
+ | |||
+ | # Table sur le trafic de type prerouting/ | ||
+ | table ip nat { | ||
+ | chain prerout { | ||
+ | type nat hook prerouting priority 0; policy accept; | ||
+ | # ce qui va sur les ports web doit être redirigé vers la VM | ||
+ | tcp dport { http, https } dnat to 10.10.10.69 | ||
+ | } | ||
+ | |||
+ | chain postrout { | ||
+ | type nat hook postrouting priority 0; policy accept; | ||
+ | # Ce qui vient de la VM et qui tente de se connecter au web doit sortir par l'ip de notre proxy | ||
+ | # Sinon on est redirigé sur nous-même... | ||
+ | ip saddr 10.10.10.69 snat to 66.66.66.66 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | === Machine terminale === | ||
+ | <WRAP center round todo 60%> | ||
+ | À reprendre | ||
+ | </ | ||
+ | |||
+ | Config dans une vm après un proxy etc. Cette machine est placée derrière un routeur (box, proxy...) qui sera un peu plus complet, et surtout qui empêche déjà de rentrer n' | ||
+ | <code bash / | ||
+ | # | ||
+ | |||
+ | flush ruleset | ||
+ | |||
+ | table inet firewall { | ||
+ | # Règles spécifiques ipv6 | ||
+ | chain inbound_ipv6 { | ||
+ | # accept neighbour discovery otherwise connectivity breaks | ||
+ | # source : https:// | ||
+ | icmpv6 type { nd-neighbor-solicit, | ||
+ | # TODO comprendre ! ICMPv6 packets which must not be dropped, see https:// | ||
+ | meta nfproto ipv6 icmpv6 type { destination-unreachable, | ||
+ | ip6 saddr fe80::/10 icmpv6 type { 130, 131, 132, 143, 151, 152, 153 } accept | ||
+ | } | ||
+ | |||
+ | # Règles génériques entrantes | ||
+ | chain inbound { | ||
+ | # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. | ||
+ | type filter hook input priority 0; policy drop; | ||
+ | # Autoriser le trafic de paquets " | ||
+ | ct state vmap { established : accept, related : accept, invalid : drop } | ||
+ | # Autorise le loopback | ||
+ | iifname " | ||
+ | # Autorise le ping avec une limite pour les abus | ||
+ | icmp type echo-request limit rate 5/second accept | ||
+ | # Applique les règles en plus suivant le protocole(ici ipv6, on pourrait ajouter des trucs sur ipv4) | ||
+ | meta protocol vmap { ip6 : jump inbound_ipv6 } | ||
+ | # Autoriser certains ports quand les services liés sont actifs (donc à adapter), ici le web et ssh | ||
+ | tcp dport { 22, 80, 443 } ct state new accept | ||
+ | # Uncomment to enable logging of denied inbound traffic | ||
+ | # log prefix " | ||
+ | # TODO ! count and drop any other traffic | ||
+ | #counter drop | ||
+ | } | ||
+ | # En sortie (output) par défaut ça autorise tout et en théorie c'est ok. | ||
+ | # forward, nat etc : pas utile dans ce cas de figure. | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
+ | Si serveur mail : remplacer | ||
+ | # Autoriser certains ports quand les services liés sont actifs (donc à adapter), ici le web et ssh | ||
+ | tcp dport { 22, 80, 443 } ct state new accept | ||
+ | Par | ||
+ | # Autoriser certains ports quand les services liés sont actifs : web (80/443), ssh (22), | ||
+ | # smtp (25), SMTP TLS (587), IMAPS (993), Sieve (4190) | ||
+ | tcp dport { 22, 80, 443, 25, 587, 993, 4190 } ct state new accept | ||
+ | |||
+ | |||
+ | === Machine proxy, configuration sécuritaire === | ||
+ | <WRAP center round todo 60%> | ||
+ | À reprendre ; mieux vaut utiliser ma première config ! | ||
+ | </ | ||
+ | Cette machine redirige une partie du trafic vers d' | ||
+ | |||
+ | Ici on va desservir l'ip interne (une VM) '' | ||
+ | |||
+ | <WRAP center round todo 60%> | ||
+ | Faudra améliorer sur ipv6. | ||
+ | </ | ||
+ | |||
+ | |||
+ | L' | ||
+ | |||
+ | <code bash / | ||
+ | # | ||
+ | |||
+ | flush ruleset | ||
+ | |||
+ | # Table sur le trafic de type input/ | ||
+ | table inet firewall { | ||
+ | # Règles spécifiques ipv6 | ||
+ | chain input_ipv6 { | ||
+ | # accept neighbour discovery otherwise connectivity breaks | ||
+ | # source : https:// | ||
+ | icmpv6 type { nd-neighbor-solicit, | ||
+ | # TODO comprendre ! ICMPv6 packets which must not be dropped, see https:// | ||
+ | meta nfproto ipv6 icmpv6 type { destination-unreachable, | ||
+ | ip6 saddr fe80::/10 icmpv6 type { 130, 131, 132, 143, 151, 152, 153 } accept | ||
+ | } | ||
+ | |||
+ | # Règles génériques entrantes (valables pour ipv6 et ipv4) | ||
+ | chain input_all { | ||
+ | # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. | ||
+ | type filter hook input priority 0; policy drop; | ||
+ | # Autoriser le trafic de paquets " | ||
+ | ct state vmap { established : accept, related : accept, invalid : drop } | ||
+ | # Autorise le loopback | ||
+ | iifname " | ||
+ | # Autorise le ping avec une limite pour les abus | ||
+ | icmp type echo-request limit rate 5/second accept | ||
+ | # Applique les règles en plus suivant le protocole(ici ipv6, on pourrait ajouter des trucs sur ipv4) | ||
+ | meta protocol vmap { ip6 : jump input_ipv6 } | ||
+ | # Autoriser certains ports quand les services liés sont actifs (donc à adapter), ici le web et ssh | ||
+ | tcp dport { 22, 80, 443 } ct state new accept | ||
+ | # Uncomment to enable logging of denied inbound traffic | ||
+ | # log prefix " | ||
+ | # TODO ! count and drop any other traffic | ||
+ | #counter drop | ||
+ | } | ||
+ | # Règles génériques sortantes | ||
+ | chain output { | ||
+ | # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. | ||
+ | type filter hook output priority 0; policy drop; | ||
+ | # Autoriser le trafic de paquets " | ||
+ | ct state established accept | ||
+ | # Autorise le loopback sortant | ||
+ | oifname " | ||
+ | # Autorise le ping sortant | ||
+ | ip protocol icmp accept | ||
+ | # Autoriser d' | ||
+ | tcp dport { http, https } accept | ||
+ | udp dport domain accept | ||
+ | } | ||
+ | # Règles génériques " | ||
+ | chain forward { | ||
+ | # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. | ||
+ | type filter hook forward priority 0; policy drop; | ||
+ | # Autoriser le trafic de paquets " | ||
+ | ct state established accept | ||
+ | # transfère le web ? TODO différence daddr/saddr | ||
+ | ip daddr 10.10.10.69 tcp dport { http, https } accept | ||
+ | ip saddr 10.10.10.69 udp dport domain accept | ||
+ | ip saddr 10.10.10.69 tcp dport { http, https } accept | ||
+ | } | ||
+ | } | ||
+ | # Table sur le trafic de type prerouting/ | ||
+ | table ip nat { | ||
+ | chain prerout { | ||
+ | type nat hook prerouting priority 0; policy accept; | ||
+ | # ce qui va sur les ports web doit être redirigé vers la VM | ||
+ | tcp dport { http, https } dnat to 10.10.10.69 | ||
+ | } | ||
+ | |||
+ | chain postrout { | ||
+ | type nat hook postrouting priority 0; policy accept; | ||
+ | # Ce qui vient de la VM et qui tente de se connecter au web doit sortir par l'ip de notre proxy | ||
+ | # Sinon on est redirigé sur nous-même... | ||
+ | ip saddr 10.10.10.69 snat to 66.66.66.66 | ||
+ | } | ||
+ | } | ||
+ | |||
+ | </ | ||
+ | |||
==== Vérification et mise en place ==== | ==== Vérification et mise en place ==== | ||
Ligne 51: | Ligne 520: | ||
+ | Pour lister les règles en place : | ||
+ | sudo nft list ruleset | ||
+ | |||
+ | ==== Sources ==== | ||
+ | |||
+ | * https:// | ||
+ | * https:// | ||
- | ===== Organiser les règles ===== | ||
{{tag> | {{tag> |