#!/usr/sbin/nft -f flush ruleset table inet firewall { # Règles spécifiques ipv6 chain inbound_ipv6 { # accept neighbour discovery otherwise connectivity breaks # source : https://wiki.nftables.org/wiki-nftables/index.php/Simple_ruleset_for_a_server icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept # TODO comprendre ! ICMPv6 packets which must not be dropped, see https://tools.ietf.org/html/rfc4890#section-4.4.1 meta nfproto ipv6 icmpv6 type { destination-unreachable, packet-too-big, time-exceeded, parameter-problem, echo-reply, echo-request, nd-router-solicit, nd-router-advert, nd-neighbor-solicit, nd-neighbor-advert, 148, 149 } accept ip6 saddr fe80::/10 icmpv6 type { 130, 131, 132, 143, 151, 152, 153 } accept } # Règles génériques entrantes chain inbound { # Par défaut, on rejette tout à moins de suivre une des règles ci-dessous. type filter hook input priority 0; policy drop; # Autoriser le trafic de paquets "etablished" et associés, supprimer les paquets non valides ct state vmap { established : accept, related : accept, invalid : drop } # Autorise le loopback iifname "lo" accept # Autorise le ping avec une limite pour les abus icmp type echo-request limit rate 5/second accept # Applique les règles en plus suivant le protocole(ici ipv6, on pourrait ajouter des trucs sur ipv4) meta protocol vmap { ip6 : jump inbound_ipv6 } # Autoriser certains ports quand les services liés sont actifs (donc à adapter), ici le web et ssh tcp dport { 22, 80, 443 } ct state new accept # Uncomment to enable logging of denied inbound traffic # log prefix "[nftables] Inbound Denied: " counter drop # TODO ! count and drop any other traffic #counter drop } # En sortie (output) par défaut ça autorise tout et en théorie c'est ok. # forward, nat etc : pas utile dans ce cas de figure. }