Linux nftables 基础使用教程

8次阅读

Linux nftables 基础使用教程

想用 nftables 管理 linux 防火墙,不需要从头写复杂脚本。掌握几个核心步骤,就能完成日常配置:装好工具、建好规则容器、加几条实用规则、再保存生效。

安装与服务启用

nftables 是用户态工具,内核支持通常已就绪(现代发行版默认启用),重点是装对命令行程序:

  • debian/ubuntusudo apt update && sudo apt install nftables
  • centos/RHEL/Fedora:sudo dnf install nftablessudo yum install nftables

装完立即启用服务并开机自启:

  • sudo systemctl start nftables
  • sudo systemctl enable nftables

服务启动后会自动加载 /etc/nftables.conf 中的规则——这是持久化配置的关键位置。

理解三层结构:表 → 链 → 规则

nftables 不预设规则,所有组件都需显式创建,逻辑清晰:

  • 表(Table):按协议族分组,常用 inet(同时处理 IPv4 和 IPv6);ip(仅 IPv4)、ip6(仅 IPv6)也支持
  • 链(Chain):挂载在某个钩子(hook)上,比如 input(进本机)、output(出本机)、forward(转发);需指定类型(如 Filter)和优先级(如 priority 0
  • 规则(Rule):写在链里,格式为“匹配条件 + 动作”,例如 tcp dport 22 accept 表示放行 ssh

快速搭建基础防火墙

以保护一台普通服务器为例,执行以下命令(需 root 权限):

  • 新建表:sudo nft add table inet filter
  • 添加 INPUT 链:sudo nft add chain inet filter input { type filter hook input priority 0 ; }
  • 允许回环:sudo nft add rule inet filter input iifname “lo” accept
  • 允许已建立连接:sudo nft add rule inet filter input ct state established,related accept
  • 放行 SSH:sudo nft add rule inet filter input tcp dport 22 accept
  • 默认拒绝其他入站:sudo nft add rule inet filter input drop

执行完后,用 sudo nft list ruleset 查看是否生效。若确认无误,保存到配置文件:sudo nft list ruleset > /etc/nftables.conf,再执行 sudo nft -f /etc/nftables.conf 确保重启后规则仍有效。

常用管理命令速查

临时调试或维护时,这些命令最常用:

  • 查看全部规则:sudo nft list ruleset
  • 清空某张表:sudo nft flush table inet filter
  • 删除某条规则(按 handle):sudo nft delete rule inet filter input handle 5(先用 list 命令查 handle 编号)
  • 删除整条链:sudo nft delete chain inet filter input
  • 删除整个表:sudo nft delete table inet filter

注意:所有 nft 命令只影响当前运行时,不写入 /etc/nftables.conf 就不会持久化。

text=ZqhQzanResources