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.参考文章:

nftables - Arch Linux 中文维基

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网络类型经测试不受影响

 

posted @ 2023-08-15 10:21  dirgo  阅读(1111)  评论(0编辑  收藏  举报