Premier jet du firewall
This commit is contained in:
commit
20bded8f0a
10 changed files with 355 additions and 0 deletions
10
archi.nft
Normal file
10
archi.nft
Normal file
|
@ -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"
|
23
checkmac.nft
Normal file
23
checkmac.nft
Normal file
|
@ -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 :)
|
78
firewall.nft
Normal file
78
firewall.nft
Normal file
|
@ -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
|
||||||
|
}
|
37
zones/adherent.nft
Normal file
37
zones/adherent.nft
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
24
zones/admin.nft
Normal file
24
zones/admin.nft
Normal file
|
@ -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 {
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
37
zones/aloes.nft
Normal file
37
zones/aloes.nft
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
27
zones/dmz.nft
Normal file
27
zones/dmz.nft
Normal file
|
@ -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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
37
zones/federez.nft
Normal file
37
zones/federez.nft
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
53
zones/prerezotage.nft
Normal file
53
zones/prerezotage.nft
Normal file
|
@ -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;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
29
zones/supelec.nft
Normal file
29
zones/supelec.nft
Normal file
|
@ -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 a new issue