From adb973b5af4c71fada5ae232d419083c639283ba Mon Sep 17 00:00:00 2001 From: Hugo LEVY-FALK Date: Mon, 7 Jan 2019 23:48:42 +0100 Subject: [PATCH] bases du nat --- firewall.nft | 2 +- nat.nft | 35 +++++++++++++++++++++++++++++++++++ zones/adherent.nft | 26 ++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 1 deletion(-) create mode 100644 nat.nft diff --git a/firewall.nft b/firewall.nft index 68d6af6..c50df95 100644 --- a/firewall.nft +++ b/firewall.nft @@ -55,7 +55,7 @@ table inet firewall { type filter hook input priority 0; policy drop; # Nos passerelles font beaucoup de choses... - tcp dport {http, https, ssh, dns, dhcp} accept; + tcp dport {http, https, ssh, dns, dhcp, radius} accept; # On a le droit de parler avec nous même. iif lo accept; counter diff --git a/nat.nft b/nat.nft new file mode 100644 index 0000000..12724b1 --- /dev/null +++ b/nat.nft @@ -0,0 +1,35 @@ +#! /sbin/nft -f + +table nat { + + chain prerouting { + type nat hook prerouting priority 0; + # Sur le vlan prerezotage on fait du dnat vers un serveur de bounce car + # sur les clients récents on émet une requête http vers un serveur + # connu et on attend une réponse 204 pour voir que tout va bien. Si on + # ne l'a pas on ouvre un navigateur avec la réponse. C'est exactement + # ce que l'on veut pour les adhérents non rézotés qui sont sur ce vlan: + # les rediriger vers l'intranet. + iifname $if_prerezotage tcp dport {http,https} ip daddr != { $intranet, $comnpay, $website } dnat $bounce_server; + } + + + chain postrouting { + type nat hook postrouting priority 100 + # Pour les machines du VLAN de prérézotage, on fait un simple + # masquerade derrière l'IP du routeur car on a pas besoin de loguer + # étant donné que l'on limite les destinations possibles par ailleurs. + iifname $if_prerezotage masquerade,persistent + + # NAT adherent + iifname $if_adherent oifname $if_supelec snat ip saddr map @adherent_nat_address : ip saddr map @adherent_nat_port; + # NAT federez + iifname $if_federez oifname $if_supelec snat ip saddr map @federez_nat_address : ip saddr map @federez_nat_port; + # NAT ALOES + iifname $if_adherent oifname $if_supelec snat ip saddr map @aloes_nat_address : ip saddr map @aloes_nat_port; + # NAT Server + iifname $if_admin oifname $if_supelec snat ip saddr map @server_nat_address : ip saddr map @server_nat_port; + + } + +} diff --git a/zones/adherent.nft b/zones/adherent.nft index 967b238..b2e4c80 100644 --- a/zones/adherent.nft +++ b/zones/adherent.nft @@ -35,3 +35,29 @@ table inet firewall { } } + +table nat { + # On nate les users derrière les IPs 193.48.225.11 à 193.48.225.141 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-128334 + # On peut aussi ajouter dynamiquement des éléments : + # nft add element nat adherent_nat_port {10.69.0.1 : 11135-128334} + } + } +} +