#! /sbin/nft -f table inet firewall { # Définition de la zone Adhérents set z_adh { type ipv4_addr; flags interval elements = { # Si l'on souhaite ajouter des ranges d'ip c'est ici 10.69.0.0/24, } } # Interfaces depuis lesquelles on autorise la communication vers # adherent set allowed_to_adh = { type string; elements = { $if_admin, $if_supelec, $if_adherent, } } chain to_adh { iifname allowed_to_adh accept; drop; } chain from_adh { # On passe d'abord par le checkmac pour éviter le spoof d'ip: not ip saddr . ether saddr @ip_mac drop; } } table nat { # On nate les users derrière les IPs 193.48.225.11 à 193.48.225.140 en # attribuant les plages de ports 11135-65535 par tranche de 1700 ports. # On a donc 32 Ips de 10.69.0.0/20 derrière chaque Ip. map adherent_nat_address { type ipv4_addr: ipv4_addr flags interval elements = { # exemple: 10.69.0.1-10.69.0.31 : 193.48.225.11 # On peut aussi ajouter dynamiquement des éléments : # nft add element nat adherent_nat_address {10.69.0.1-10.69.0.31 : 193.48.225.11} } } map adherent_nat_port { type ipv4_addr: inet_service flags interval elements = { # exemple: 10.69.0.1 : 11135-12834 # On peut aussi ajouter dynamiquement des éléments : # nft add element nat adherent_nat_port {10.69.0.1 : 11135-12834} } } }