Files
2026-09-02 20:30:44 +02:00

56 lines
1.6 KiB
Django/Jinja

#!/usr/sbin/nft -f
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
icmp type echo-request limit rate 5/second accept
ip6 nexthdr icmpv6 icmpv6 type echo-request limit rate 5/second accept
tcp dport 22 ip saddr {{ ssh_admin_access_cidr }} accept
{% if enable_nginx_proxy %}
tcp dport 443 accept
{% else %}
tcp dport {{ jumphost_app_port }} accept
{% endif %}
}
chain forward {
type filter hook forward priority 0; policy drop;
}
chain output {
type filter hook output priority 0; policy drop;
oif lo accept
ct state established,related accept
udp dport 53 accept
tcp dport 53 accept
udp dport 123 accept
{% for net in target_networks %}
ip daddr {{ net }} accept
{% endfor %}
# ACME/interne PKI (tls_certificates-Rolle) und OS-Paketquellen
tcp dport 443 accept
tcp dport 80 accept
# Befund B5 (Umsetzungsauftrag_Sonnet5.md Teil A.3): ohne diese Zeile
# verwirft "policy drop" alles Uebrige lautlos -- z.B. guacds RDP-Pakete
# zu einem Ziel ausserhalb von target_networks. Das sieht der Benutzer
# nur als "Server timeout" (guacamole-common-js), im Journal steht dazu
# nichts. Rate-limitiert geloggt, damit ein Fehlkonfigurationsfall
# (falsches/fehlendes target_networks-Netz) in Sekunden statt Tagen
# auffaellt, ohne das Journal bei einem Portscan zu fluten.
limit rate 10/second log prefix "jumphost-output-drop: " counter drop
}
}