
Parece que he hecho que nftables registre todo el tráfico entrante permitido en lugar de solo el tráfico denegado, y no sé de qué otra manera decir "denegar y registrar todo lo demás".
Aquí está mi /etc/nftables.conf
archivo:
#!/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;
}
}
Respuesta1
Supongo que te perdiste la parte sobre el valor predeterminado de las cadenas. Deel manual:
{add | create} chain [family] table chain [{ type type hook hook [device device] priority priority ; [policy policy ;] }]
Ese policy
valor mencionado aquí se describe de la siguiente manera:
Las cadenas base también permiten establecer la cadena
policy
, es decir, qué sucede con los paquetes no aceptados o rechazados explícitamente en las reglas contenidas. Los valores de política admitidos sonaccept
(que es el valor predeterminado) odrop
.
Así que supongo que querrás cambiar estas líneas:
chain input {
type filter hook input priority 0;
para éstos:
chain input {
type filter hook input priority 0;
policy drop;
Pero asegúrese de tener alguna forma de acceder a esta máquina en caso de que se bloquee con sus reglas. El iptables
comando a usar sería iptables-apply
, pero no estoy seguro de qué se puede usar en su lugar nft
. iptables-apply
revertirá las reglas si no puede confirmar dentro de un período de tiempo determinado que puede (todavía) acceder al host...
Respuesta2
Finalmente resolví esto saltando a una cadena separada para reglas solo de LAN, de modo que la input
cadena tenga solo una línea de registro. No estoy seguro de por qué simplemente agregar policy drop
a la input
cadena como lo sugiere @ 0xC0000022L no fue suficiente.
#!/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
}
}