commit
20bded8f0a
10 changed files with 355 additions and 0 deletions
@ -0,0 +1,10 @@ |
|||||
|
# Variables prpres à l'architecture pour le pare-feu |
||||
|
|
||||
|
# Interfaces de la machine |
||||
|
define if_adherent = "eth0" |
||||
|
define if_admin = "eth1" |
||||
|
define if_federez = "eth2" |
||||
|
define if_supelec = "eth3" |
||||
|
define if_aloes = "eth4" |
||||
|
define if_prerezotage = "eth5" |
||||
|
define if_dmz = "eth6" |
||||
@ -0,0 +1,23 @@ |
|||||
|
# Table checkmac, à bas le spoof d'ips. |
||||
|
|
||||
|
table inet firewall { |
||||
|
set ip_mac { |
||||
|
type ipv4_addr . ether_addr |
||||
|
elements = { |
||||
|
# On peut en mettre en dur ici |
||||
|
# Par exemple : 10.69.6.91 . 20:68:9d:dd:89:ab |
||||
|
} |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Note : |
||||
|
# - On pourra afficher le set checkmac comme ceci : |
||||
|
# nft list set firewall ip_mac |
||||
|
# |
||||
|
# - On pourra ajouter des éléments comme ceci : |
||||
|
# nft add element firewall ip_mac { 10.69.6.91 . aa:bb:cc:dd:ee:ff } |
||||
|
# |
||||
|
# - En retirer : |
||||
|
# nft delete element firewall ip_mac { 10.69.6.91 . aa:bb:cc:dd:ee:ff } |
||||
|
# |
||||
|
# Le tout à la volée :) |
||||
@ -0,0 +1,78 @@ |
|||||
|
#! /sbin/nft -f |
||||
|
|
||||
|
# Remise à zéro des règles du pare-feu |
||||
|
flush ruleset |
||||
|
|
||||
|
# Inclusion des dépendances |
||||
|
include "archi.nft" |
||||
|
include "checkmac.nft" |
||||
|
|
||||
|
# Table principale |
||||
|
table inet firewall { |
||||
|
|
||||
|
chain dispatch { |
||||
|
# Définition de la chaîne. On s'occupe du forward. |
||||
|
type filter hook forward priority 0; |
||||
|
|
||||
|
# Politique par défaut : tout jeter. |
||||
|
policy drop; |
||||
|
|
||||
|
# Filtre sur les interfaces entrantes, ne pas accepter |
||||
|
# directement dans la chaine, mais retourner. |
||||
|
# Par convention pour le routage, on vérifie dans la chaîne to_ que |
||||
|
# le passage d'un vlan à l'autre est autorisé. |
||||
|
# |
||||
|
# On utilise des jumps pour revenir ici une fois la chaîne évaluée. |
||||
|
meta iif vmap { |
||||
|
if_adherent : jump from_adh, |
||||
|
if_admin : jump from_admin, |
||||
|
if_federez : jump from_federez, |
||||
|
if_supelec : jump from_supelec, |
||||
|
if_aloes : jump from_aloes, |
||||
|
if_prerezotage : jump from_prerezotage, |
||||
|
if_dmz: jump from_dmz |
||||
|
} |
||||
|
|
||||
|
# Filtre sur les interfaces sortantes, ne pas retourner : drop ou |
||||
|
# accept |
||||
|
# On utilise des goto pour ne pas revenir ici une fois la chaîne |
||||
|
# évaluée. |
||||
|
meta oif vmap { |
||||
|
if_adherent : goto to_adh, |
||||
|
if_admin : goto to_admin, |
||||
|
if_federez : goto to_federez, |
||||
|
if_supelec : goto to_supelec, |
||||
|
if_aloes : goto to_aloes, |
||||
|
if_prerezotage : goto to_prerezotage, |
||||
|
if_dmz: goto to_dmz |
||||
|
} |
||||
|
|
||||
|
# Un compteur qui doit être à 0 si on a bien fait notre travail. |
||||
|
counter |
||||
|
} |
||||
|
|
||||
|
chain input { |
||||
|
type filter hook input priority 0; |
||||
|
policy drop; |
||||
|
# Nos passerelles font beaucoup de choses... |
||||
|
tcp dport {http, https, ssh, dns, dhcp} accept; |
||||
|
# On a le droit de parler avec nous même. |
||||
|
iif lo accept; |
||||
|
counter |
||||
|
} |
||||
|
|
||||
|
chain output { |
||||
|
type filter hook output priority 0; |
||||
|
policy accept; |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
|
table nat { |
||||
|
# TODO : on met 27 Ips internes par ip publiques |
||||
|
# Users : 193.48.225.10-119 |
||||
|
# Prerezotage 193.48.225.240-254 |
||||
|
# Aloes : 193.48.225.120-129 |
||||
|
# Federez : 193.48.225.130-199 |
||||
|
# Server : 193.48.225.200-209 |
||||
|
} |
||||
@ -0,0 +1,37 @@ |
|||||
|
#! /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, # Utile ? |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
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; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,24 @@ |
|||||
|
#! /sbin/nft -f |
||||
|
|
||||
|
table inet firewall { |
||||
|
|
||||
|
# Définition de la zone Adhérents |
||||
|
|
||||
|
set z_admin { |
||||
|
type ipv4_addr; |
||||
|
flags interval |
||||
|
elements = { |
||||
|
# Si l'on souhaite ajouter des ranges d'ip c'est ici |
||||
|
10.7.0.0/24, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
chain to_admin { |
||||
|
# On devrait toujours pouvoir contacter un admin :) |
||||
|
accept; |
||||
|
} |
||||
|
|
||||
|
chain from_admin { |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,37 @@ |
|||||
|
#! /sbin/nft -f |
||||
|
|
||||
|
table inet firewall { |
||||
|
|
||||
|
# Définition de la zone |
||||
|
|
||||
|
set z_aloes { |
||||
|
type ipv4_addr; |
||||
|
flags interval |
||||
|
elements = { |
||||
|
# Si l'on souhaite ajouter des ranges d'ip c'est ici |
||||
|
10.66.0.0/24, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Interfaces depuis lesquelles on autorise la communication vers |
||||
|
# aloes |
||||
|
set allowed_to_aloes = { |
||||
|
type string; |
||||
|
elements = { |
||||
|
$if_admin, |
||||
|
$if_supelec, |
||||
|
$if_aloes, # Utile ? |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
chain to_aloes { |
||||
|
iifname allowed_to_aloes accept; |
||||
|
drop; |
||||
|
} |
||||
|
|
||||
|
chain from_aloes { |
||||
|
# On passe d'abord par le checkmac pour éviter le spoof d'ip: |
||||
|
not ip saddr . ether saddr @ip_mac drop; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,27 @@ |
|||||
|
#! /sbin/nft -f |
||||
|
|
||||
|
|
||||
|
table inet firewall { |
||||
|
|
||||
|
# Définition de la DMZ |
||||
|
|
||||
|
set z_dmz { |
||||
|
type ipv4_addr; |
||||
|
flags interval |
||||
|
elements = { |
||||
|
# Si l'on souhaite ajouter des ranges d'ip c'est ici |
||||
|
193.48.225.1-193.48.225.9, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
chain to_dmz { |
||||
|
# DMZ, tout le monde entre |
||||
|
accept; |
||||
|
} |
||||
|
|
||||
|
chain from_dmz { |
||||
|
# DMZ, tout le monde sort |
||||
|
} |
||||
|
|
||||
|
} |
||||
|
|
||||
@ -0,0 +1,37 @@ |
|||||
|
#! /sbin/nft -f |
||||
|
|
||||
|
table inet firewall { |
||||
|
|
||||
|
# Définition de la zone Federez |
||||
|
|
||||
|
set z_federez { |
||||
|
type ipv4_addr; |
||||
|
flags interval |
||||
|
elements = { |
||||
|
# Si l'on souhaite ajouter des ranges d'ip c'est ici |
||||
|
10.20.0.0/24, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Interfaces depuis lesquelles on autorise la communication vers |
||||
|
# federez |
||||
|
set allowed_to_federez = { |
||||
|
type string; |
||||
|
elements = { |
||||
|
$if_admin, |
||||
|
$if_supelec, |
||||
|
$if_federez, # Utile ? |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
chain to_federez { |
||||
|
iifname allowed_to_federez accept; |
||||
|
drop; |
||||
|
} |
||||
|
|
||||
|
chain from_federez { |
||||
|
# On passe d'abord par le checkmac pour éviter le spoof d'ip: |
||||
|
not ip saddr . ether saddr @ip_mac drop; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,53 @@ |
|||||
|
#! /sbin/nft -f |
||||
|
|
||||
|
# Ips que l'on autorise à contacter |
||||
|
define comnpay = 46.255.53.0/24; |
||||
|
# Pour le site d'accueil |
||||
|
define isis = 193.48.225.242 |
||||
|
|
||||
|
table inet firewall { |
||||
|
|
||||
|
# Définition de la zone Prérézotage |
||||
|
|
||||
|
set z_prerezotage { |
||||
|
type ipv4_addr; |
||||
|
flags interval |
||||
|
elements = { |
||||
|
# Si l'on souhaite ajouter des ranges d'ip c'est ici |
||||
|
10.68.0.0/16, |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Adresses de destination autorisées |
||||
|
set allowed_daddr_prerezotage { |
||||
|
type ipv4_addr; |
||||
|
flags interval |
||||
|
elements = { |
||||
|
$comnpay, |
||||
|
$isis |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
# Interfaces depuis lesquelles on autorise la communication vers |
||||
|
# le prérézotage |
||||
|
set allowed_to_prerezotage = { |
||||
|
type string; |
||||
|
elements = { |
||||
|
$if_admin, |
||||
|
$if_prerezotage, |
||||
|
$if_supelec, |
||||
|
$if_prerezotage, # Utile ? |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
chain to_prerezotage { |
||||
|
iifname allowed_to_prerezotage accept; |
||||
|
drop; |
||||
|
} |
||||
|
|
||||
|
chain from_prerezotage { |
||||
|
# Si c'est pas pour une ip autorisée, ça dégage. |
||||
|
not ip daddr allowed_daddr_prerezotage drop; |
||||
|
} |
||||
|
|
||||
|
} |
||||
@ -0,0 +1,29 @@ |
|||||
|
#! /sbin/nft -f |
||||
|
|
||||
|
table inet firewall { |
||||
|
|
||||
|
# Définition de la zone Supélec |
||||
|
|
||||
|
# Interfaces depuis lesquelles on autorise la communication vers |
||||
|
# supelec |
||||
|
set allowed_to_supelec = { |
||||
|
type string; |
||||
|
elements = { |
||||
|
$if_adherent, |
||||
|
$if_admin, |
||||
|
$if_federez, |
||||
|
$if_aloes, |
||||
|
$if_prerezotage, |
||||
|
$if_dmz |
||||
|
} |
||||
|
} |
||||
|
|
||||
|
chain to_supelec { |
||||
|
iifname allowed_to_supelec accept; |
||||
|
drop; |
||||
|
} |
||||
|
|
||||
|
chain from_supelec { |
||||
|
} |
||||
|
|
||||
|
} |
||||
Loading…
Reference in new issue