nftables防火墙常用配置及遇到的问题
nftables由表(table)、链(chain)和规则(rule)组成,其中表包含链,链包含规则,规则是真正的 action。
常用命令:
1.创建新表
nft add table inet my_table
2.列出所有规则(全部表的都有)
nft list ruleset
3.备份规则
nft list ruleset > /root/nftables.conf
4.恢复规则
nft -f /root/nftables.conf
5.修改链
只需按其名称调用它并定义要更改的规则。
例如,要将 my_table
表的 my_input
链策略从 accept
更改为 drop
nft chain inet my_table my_input '{ policy drop ; }'
=============================================
1.参考文章:
arch的文档比较详细,但是有些没有翻译完全,需要自行对照翻译
nftables 基础教程:使用 nftables 作为防火墙 – 云原生实验室 - Kubernetes|Docker|Istio|Envoy|Hugo|Golang|云原生
nftables说的比较明白的一个大佬的文章,但是还是不如 arch wiki全面,还有个别问题,比如放开ssh流量的那个规则,我的armbian上不行,也可能是版本原因,暂时不知确切原因
2.一些常用服务的默认端口,如果把 链 的 policy 策略类型 设为drop,默认阻止流量,那就要设置放开端口的规则
ssh 为 22
samba 为 tcp/139,445端口,udp/137,138端口。
3.docker 问题
docker 默认修改 iptables 配置文件,即使你的系统并没有启动 iptables 服务
修改 nftables 时,有可能会清空 iptables的配置文件,导致docker启动容器报错,
提示类似 iptables: No chain/target/match by that name.
此时只要 重启 docker 服务(systemctl restart docker)即可,它会自动重新生成iptables相关配置,虽然并没有实际作用
---------------------更新-----------
docker 启动后也会在nftables 里新建相关表,链,规则;
特别注意:应该是因为docker的网络如 Bridge 类型,需要进行数据的转发,所以 forward 链 的策略要设置为 accept; host网络类型经测试不受影响