50 lines
2.9 KiB
Text
50 lines
2.9 KiB
Text
|
|
#!/usr/sbin/nft -f
|
||
|
|
# GENERE par scripts/resoudre_flux.py depuis les meta/flux.yml — hote infra-edge-01.
|
||
|
|
# Deploye par le role `nftables_baseline` en tant que /etc/nftables.conf.
|
||
|
|
|
||
|
|
# Remplace UNIQUEMENT les tables setops (pas de `flush ruleset` : préserve les
|
||
|
|
# tables etrangeres — DNAT/forward de conteneurs, par exemple).
|
||
|
|
#
|
||
|
|
# `setops_filter` est le gabarit de REPLI, pose quand aucun ruleset resolu
|
||
|
|
# n'existe encore. Les deux fichiers sont des ALTERNATIVES, jamais des couches —
|
||
|
|
# mais `nft -f` AJOUTE sans purger, et le repli survivait donc a la bascule.
|
||
|
|
# Deux chaines `input` sur le meme hook, toutes deux en `policy drop` : le
|
||
|
|
# paquet traverse les DEUX, et seule l'intersection de leurs `accept` passait.
|
||
|
|
# Mesure du 2026-08-10 sur Technolibre : l'AC etait debout, sa regle 8443 posee
|
||
|
|
# et acceptante, l'ICMP passait en 0,15 ms — et le TCP expirait, arrete par le
|
||
|
|
# `policy drop` du repli. Chaque fichier retire donc desormais la table de
|
||
|
|
# l'autre, et la bascule converge dans les deux sens.
|
||
|
|
table inet setops_flux {}
|
||
|
|
delete table inet setops_flux
|
||
|
|
table inet setops_filter {}
|
||
|
|
delete table inet setops_filter
|
||
|
|
|
||
|
|
table inet setops_flux {
|
||
|
|
chain input {
|
||
|
|
type filter hook input priority 0; policy drop;
|
||
|
|
|
||
|
|
iif "lo" accept
|
||
|
|
ct state established,related accept
|
||
|
|
ct state invalid drop
|
||
|
|
ip protocol icmp accept
|
||
|
|
ip6 nexthdr icmpv6 accept
|
||
|
|
|
||
|
|
ip saddr { 10.17.0.0/24 } tcp dport 22 accept # administration (garde anti-lockout, intrant nftables_admin_ssh)
|
||
|
|
ip saddr { 192.168.255.2/32 } tcp dport 22 accept # administration (garde anti-lockout, intrant nftables_admin_ssh)
|
||
|
|
ip saddr { 10.29.16.11, 10.29.19.11, 10.29.19.21, 10.29.21.11 } tcp dport 22 accept # serveur_debian: Plan de gestion : administration et déploiement Ansible par SSH (inter-nœud ; l'accès depuis l'extérieur est filtré à l'OPNsense).
|
||
|
|
icmp type destination-unreachable icmp code frag-needed accept # serveur_debian: ICMP « fragmentation nécessaire » entrant : sans lui, un distant ne peut pas nous demander de réduire nos paquets — les transferts se figent.
|
||
|
|
tcp dport 80 accept # serveur_nginx: HTTP entrant — redirection permanente vers HTTPS.
|
||
|
|
tcp dport 443 accept # serveur_nginx: HTTPS entrant — services exposés (terminaison TLS à l'edge).
|
||
|
|
ip saddr { 10.29.16.11, 10.29.19.11, 10.29.19.21, 10.29.21.11 } tcp dport 443 accept # serveur_nginx: HTTPS depuis le tenant : les FQDN publiés vivent à l'edge (découverte OIDC, appels inter-services par nom).
|
||
|
|
ip saddr { 10.17.0.0/24, 192.168.255.2/32 } tcp dport 443 accept # serveur_nginx: HTTPS depuis le reseau d'administration : l'exploitant administre les services par leur interface web, servie par l'edge.
|
||
|
|
}
|
||
|
|
|
||
|
|
chain forward {
|
||
|
|
type filter hook forward priority 0; policy drop;
|
||
|
|
ct state established,related accept
|
||
|
|
iifname "docker0" accept
|
||
|
|
oifname "docker0" accept
|
||
|
|
}
|
||
|
|
chain output { type filter hook output priority 0; policy accept; }
|
||
|
|
}
|