Paillasse/ansible/roles/durcissement/templates/nftables.conf.j2

51 lines
2 KiB
Text
Raw Permalink Normal View History

#!/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, les ports TCP {{ durcissement_ports_ouverts | join(', ') }}{% if durcissement_ports_udp_ouverts | default([]) %} et UDP {{ durcissement_ports_udp_ouverts | join(', ') }}{% endif %}.
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
{% if durcissement_ports_udp_ouverts | default([]) %}
udp dport { {{ durcissement_ports_udp_ouverts | join(', ') }} } accept
{% endif %}
}
chain forward {
type filter hook forward priority 0; policy drop;
{% for pont in durcissement_ponts_internes | default([]) %}
# Trafic interne au réseau Docker {{ pont }} (conteneur ↔ conteneur).
iifname "{{ pont }}" oifname "{{ pont }}" accept
{% endfor %}
{% 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 %}
}
chain output {
type filter hook output priority 0; policy accept;
}
}
# 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"