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