在 Debian bookworm 上,我从文件 /etc/nftables.conf 成功运行了 nftables。它的骨架基本上看起来像:
#!/sbin/nft -f
flush ruleset
counter CNT_WHITE_LISTED_COUNTRIES{}
counter CNT_BLACK_LISTED_COUNTRIES{}
table inet filter {
set countries-allowed {
type ipv4_addr; flag interval; policy performance;
}
chain input {
}
chain forward {
}
chain output {
}
}
我想为一些用户定义的国家(国家白名单)部署一个ipset,并将该ipset集成到文件/etc/nftables.conf中(NFT规则,以便自动接受所有IPv4地址。此外,应该有另一个规则丢弃并统计所有不是来自白名单国家/地区的数据包。请注意,此主配置文件应该是仅 NFT 配置文件,以便使防火墙设置尽可能简单。
尽管访问了https://wiki.nftables.org/wiki-nftables我不知道如何使用链“输入”来引用设置“允许的国家”并设置两个规则。
请注意,“systemctl restart nftables”已成功执行(即没有错误消息)。
有人可以告诉我解决方案吗?
我通过参考设置“允许的国家”在链“输入”中部署了各种规则组合,但没有成功。
对于类似的设置,我为每个国家/地区使用两个命名集(带有国家/地区代码缩写和 v6 或 v4)。 所以我的设置类似于:
#!/sbin/nft -f
flush ruleset
table inet filter {
set admins {
type ipv4_addr; flag interval; policy performance;
elements = { 10.1.1.1 comment "admin-ip1", 10.1.1.2 comment "admin-ip2" }
}
set country-AA-v4 {
type ipv4_addr; flag interval; policy performance;
}
set country-AA-v6 {
type ipv6_addr; flag interval; policy performance;
}
set country-ZZ-v4 {
type ipv4_addr; flag interval; policy performance;
}
set country-ZZ-v6 {
type ipv6_addr; flag interval; policy performance;
}
chain countryfiter {
ip saddr @country-ZZ-v4 counter return comment "use return instead of accept to allow further filtering in the input chain"
ip saddr @country-ZZ-v6 counter return
ip saddr @country-AA-v4 counter return
ip saddr @country-AA-v6 counter return
counter drop
}
chain input {
# Pay attention - the policy is set to drop packets that
# do not have a accept rule
type filter hook input priority filter; policy drop;
ct state established,related counter accept
ip saddr @admins counter accept
ip saddr !=@admins counter jump countryfiter
#additional rules here
tcp dport 443 counter accept
ip saddr @ssh_clients tcp dport 22 counter accept
ct state new limit rate 1/minute counter log prefix "[nft DROP] " comment "rate limited logging of dropped packets"
counter drop
}
chain forward {
}
chain output {
}
}