
Anscheinend habe ich nftables so konfiguriert, dass der gesamte zulässige eingehende Datenverkehr und nicht nur der verweigerte Datenverkehr protokolliert wird. Ich weiß nicht, wie ich sonst „alles andere verweigern und protokollieren“ sagen kann.
Hier ist meine /etc/nftables.conf
Datei:
#!/usr/sbin/nft -f
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0;
# Accept any localhost traffic
iif lo accept
# Accept traffic originated from us
ct state established,related accept
# Accept neighbour discovery otherwise IPv6 connectivity breaks
ip6 nexthdr icmpv6 icmpv6 type { nd-neighbor-solicit, nd-router-advert, nd-neighbor-advert } accept
# Allow incoming SSH connections
tcp dport ssh ct state new counter accept
# Allow mdns from the LAN
ip saddr 192.168.1.0/24 udp dport mdns counter accept
ip6 saddr fe80::/10 udp dport mdns counter accept
ip saddr 192.168.1.0/24 log prefix "Rejected: " flags all reject comment "send rejection to LAN only"
ip6 saddr fe80::/10 log prefix "Rejected: " flags all reject comment "send rejection to LAN only"
# Log and drop any other traffic
# THIS IS THE BROKEN PART
log prefix "Dropped: " flags all drop
}
chain forward {
type filter hook forward priority 0;
}
chain output {
type filter hook output priority 0;
}
}
Antwort1
Ich nehme an, Sie haben den Teil über die Vorgabe für Ketten übersehen. Vondas Handbuch:
{add | create} chain [family] table chain [{ type type hook hook [device device] priority priority ; [policy policy ;] }]
Der policy
hier genannte Wert wird wie folgt beschrieben:
Basisketten ermöglichen auch das Festlegen der Ketten
policy
, d. h. was mit Paketen geschieht, die in den enthaltenen Regeln nicht explizit akzeptiert oder abgelehnt werden. Unterstützte Richtlinienwerte sindaccept
(Standard) oderdrop
.
Ich nehme an, Sie möchten diese Zeilen austauschen:
chain input {
type filter hook input priority 0;
für diese:
chain input {
type filter hook input priority 0;
policy drop;
Stellen Sie jedoch sicher, dass Sie irgendwie auf diesen Computer zugreifen können, falls Sie sich mit Ihren Regeln selbst aussperren. iptables
Der zu verwendende Befehl wäre iptables-apply
, aber ich bin nicht sicher, was stattdessen für verwendet werden kann nft
. iptables-apply
setzt die Regeln zurück, wenn Sie innerhalb einer bestimmten Zeitspanne nicht bestätigen können, dass Sie (noch) auf den Host zugreifen können ...
Antwort2
Ich habe das Problem schließlich gelöst, indem ich zu einer separaten Kette für Nur-LAN-Regeln gesprungen bin, sodass die input
Kette nur eine Protokollzeile hat. Ich bin mir nicht sicher, warum es nicht ausreichte policy drop
, der input
Kette einfach etwas hinzuzufügen, wie von @0xC0000022L vorgeschlagen.
#!/usr/sbin/nft --file
flush ruleset
table inet filter {
chain input {
type filter hook input priority 0
policy drop
# Normal "prelude" things you always want.
ct state vmap {
new: continue,
established: accept,
related: accept,
invalid: drop
}
ct status dnat accept
iiftype loopback accept
icmp type echo-request accept
icmpv6 type {
echo-request,
nd-neighbor-solicit,
nd-router-advert,
nd-neighbor-advert
} accept
tcp dport ssh accept comment "Allow incoming SSH connections"
ip saddr 192.168.1.0/24 jump lan_only
ip6 saddr fe80::/10 jump lan_only
log prefix "Dropped: " flags all drop comment "non-LAN gets dropped brusquely"
}
chain lan_only {
udp dport mdns counter accept comment "Allow mdns from the LAN"
log prefix "Rejected: " flags all reject comment "LAN gets rejected politely (others get dropped brusquely)"
}
chain forward {
type filter hook forward priority 0
}
chain output {
type filter hook output priority 0
}
}