
nftables が、拒否されたトラフィックだけでなく、許可されたすべての着信トラフィックをログに記録するようにしたようですが、他に「他のすべてを拒否してログに記録する」という方法がわかりません。
これが私の/etc/nftables.conf
ファイルです:
#!/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;
}
}
答え1
チェーンのデフォルトに関する部分を見逃したようです。マニュアル:
{add | create} chain [family] table chain [{ type type hook hook [device device] priority priority ; [policy policy ;] }]
ここで言及されている値はpolicy
次のように説明されます。
基本チェーンでは、チェーンの
policy
、つまり、含まれるルールで明示的に承認または拒否されていないパケットに何が起こるかを設定することもできます。サポートされているポリシー値は、accept
(デフォルト) または ですdrop
。
したがって、次の行を置き換える必要があると思います:
chain input {
type filter hook input priority 0;
これらについては:
chain input {
type filter hook input priority 0;
policy drop;
ただし、ルールによってロックアウトされた場合に備えて、このマシンにアクセスする何らかの方法があることを確認してください。 にiptables
使用するコマンドは ですiptables-apply
が、 の代わりに何が使用できるかはわかりませんnft
。iptables-apply
は、指定されたタイムアウト期間内にホストに (引き続き) アクセスできることを確認できない場合、ルールを元に戻します...
答え2
最終的に、LAN のみのルールの別のチェーンにジャンプして、チェーンのログ行が 1 つだけになるようにすることで、この問題を解決しました。@0xC0000022L の提案どおりにチェーンに追加するだけでは不十分だったinput
理由がよくわかりません。policy drop
input
#!/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
}
}