2026-10-07 10:32:09 +02:00
|
|
|
#!/usr/sbin/nft -f
|
|
|
|
|
# Géré par Ansible (rôle durcissement) — ne pas modifier à la main.
|
|
|
|
|
# Politique : tout est refusé en entrée sauf loopback, trafic déjà établi,
|
|
|
|
|
# ICMP, et les ports {{ durcissement_ports_ouverts | join(', ') }}.
|
|
|
|
|
|
|
|
|
|
flush ruleset
|
|
|
|
|
|
|
|
|
|
table inet filter {
|
|
|
|
|
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
|
|
|
|
|
meta l4proto ipv6-icmp accept
|
|
|
|
|
|
|
|
|
|
tcp dport { {{ durcissement_ports_ouverts | join(', ') }} } accept
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
chain forward {
|
|
|
|
|
type filter hook forward priority 0; policy drop;
|
2026-10-07 11:40:34 +02:00
|
|
|
|
|
|
|
|
{% if reseau_veth_gw_subnet is defined %}
|
|
|
|
|
# Un seul sens autorisé : réseau externe OpenStack -> Internet (NAT),
|
|
|
|
|
# plus les réponses à ce trafic. Rien n'entre depuis Internet vers les
|
|
|
|
|
# réseaux internes ; tout le reste est refusé par la politique drop.
|
|
|
|
|
iifname "{{ reseau_veth_gw }}" oifname "{{ reseau_interface_publique }}" ip saddr {{ reseau_veth_gw_subnet }} accept
|
|
|
|
|
iifname "{{ reseau_interface_publique }}" oifname "{{ reseau_veth_gw }}" ct state established,related accept
|
|
|
|
|
{% endif %}
|
2026-10-07 10:32:09 +02:00
|
|
|
}
|
|
|
|
|
|
|
|
|
|
chain output {
|
|
|
|
|
type filter hook output priority 0; policy accept;
|
|
|
|
|
}
|
|
|
|
|
}
|
2026-10-07 11:40:34 +02:00
|
|
|
|
|
|
|
|
# Autres règles (NAT, etc.), déposées par d'autres rôles. Un glob sans fichier
|
|
|
|
|
# correspondant n'est pas une erreur pour nft : cette ligne ne casse rien tant
|
|
|
|
|
# que /etc/nftables.d/ est vide.
|
|
|
|
|
include "/etc/nftables.d/*.conf"
|