#!/usr/sbin/nft -f flush ruleset define DEBIAN_UPDATE_SERVERS = { 199.232.170.132, # debian.map.fastlydns.net 151.101.2.132, # security.debian.org 193.55.175.161 # debian.univ-tlse2.fr } define DEBIAN_NTP_SERVERS = { 51.38.81.135, # 0.debian.pool.ntp.org 51.38.113.118, 51.68.180.114, 194.57.169.1 } table ip ipfilter { comment "Firewall" set resolvers { type ipv4_addr comment "Resolveurs DNS de confiance" elements = { 8.8.8.8, 8.8.4.4 } } set managers { type ipv4_addr comment "Administrateurs systeme et reseau" elements = { 192.168.0.12, 192.168.1.33, 192.168.0.123 } } set update_servers { type ipv4_addr comment "Serveurs de mises a jour systeme et applications" elements = { $DEBIAN_UPDATE_SERVERS } } set ntp_servers { type ipv4_addr comment "Serveurs de synchronisation du temps" elements = { $DEBIAN_NTP_SERVERS } } chain inbound { comment "Filtrage des paquets entrants" type filter hook input priority filter; policy drop; # Suppression des paquets non conformes ct state invalid counter drop # Accepte tous paquets en lien avec un trafic explicitement autorisé ct state established, related counter accept # Pas de restriction sur le trafic entrant sur la boucle locale iif "lo" counter accept comment "Accepte le trafic local sur l'interface loopback" # Supprime les nombreuses sollicitations netbios sans journalisation iif "lan0" udp dport {137, 138 } ip daddr 192.9.200.255 counter drop comment "Elimine les paquets netbios" # # Supprime les nombreuses sollicitations multicast DNS iif "lan0" udp dport 5353 ip daddr 224.0.0.251 counter drop comment "Elimine les paquets mDNS" # Les hotes du groupe "managers" sont autorisés a se connecter en SSH iif "lan0" ct state new tcp dport 22 ip saddr @managers log level notice prefix "[FW] [ACCEPT] [RID=16] " counter accept comment "Accepte les connexions SSH pour les membres de managers" # Accepte mais limite les requête echo ICMP icmp type echo-request limit rate 5/second log prefix "[FW] [ACCEPT] [RID=17] " level notice counter accept comment "Autorise ICMP echo entrant" # Tout trafic entrant non explicitement autorisé est journalisé et rejeté log prefix "[FW] [REJECT] [RID=666] " counter packets 0 bytes 0 reject comment "Rejette tout trafic entrant non explicitement autorise" } chain outbound { comment "Filtrage des paquets sortants" type filter hook output priority filter; policy drop; # Accepte tous les paquets en lien avec un trafic explicitement autorisé ct state established,related counter accept comment "Accepte tout paquet en lien avec le trafic autorise" # Pas de restriction concernant le trafic sortant par la boucle locale oif "lo" counter accept comment "Accepte le trafic local sur l'interface loopback" # Accepte et journalise les requêtes DNS à destination des résolveurs de confiance ct state new ip daddr @resolvers udp dport 53 log prefix "[FW] [ACCEPT] [RID=28] " level notice counter accept comment "Autorise trafic DNS vers resolveurs de confiance" ct state new ip daddr @resolvers tcp dport 53 log prefix "[FW] [ACCEPT] [RID=26] " level notice counter accept comment "Autorise trafic DNS vers resolveurs de confiance" # Accepte et journalise le trafic a destination des serveurs de mise à jour système ct state new ip daddr @update_servers tcp dport { 80, 443 } log prefix "[FW] [ACCEPT] [RID=32] " level notice counter accept comment "Autorise le trafic Web a destination des serveurs de mise a jour" # Autorise le trafic NTP vers serveurs NTP de confiance ct state new ip daddr @ntp_servers udp dport 123 log prefix "[FW] [ACCEPT] [RID=55] " level notice counter accept comment "Autorise NTP vers serveur mairie" # Autorise client DHCP (DHCPDISCOVER) pour autc-configuration des interfaces locales #ct state new udp dport 67 counter accept comment "Autorise trafic DHCP" # Accepte mais limite les requête echo ICMP sortantes icmp type echo-request limit rate 5/second log prefix "[FW] [ACCCEPT] [RID=61] " level notice counter accept comment "Autorise ICMP echo sortant" # Tout trafic sortant non explicitement autorisé est journalisé et rejeté log prefix "[FW] [REJECT] [RID=667] " counter packets 0 bytes 0 reject comment "Rejette tout trafic sortant non explicitement autorise" } chain forward { type filter hook forward priority filter; policy drop; # Transmets tout paquet en relation avec un trafic explicitement autorisé en forwarding ct state established,related counter accept comment "Transfert les trafics des connexions explicitement autorisees" # Journalise et rejette tout transfert non explicitement autorisé log prefix "[FW] [REJECT] [RID=668] " counter reject comment "Refuse toute transmission non explicitement autorisee" } }