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