Debian使用nftables配置IP白名单

在使用Debian服务器时,有时需要对指定端口进行访问限制,例如只允许自己的IP访问SSH以外的管理端口,而其他端口继续保持正常开放

这里使用nftables实现IP白名单功能相比传统的iptables,nftables使用集合管理IP,配置更加简洁,也方便后续维护

安装nftables

首先更新软件包列表并安装nftables

1
2
apt update
apt install nftables -y

安装完成后,启用nftables服务

1
systemctl enable nftables

创建IP白名单

这里以TCP端口53279为例,只允许指定IP访问该端口,其他IP访问时直接丢弃数据包,其他端口不受影响

创建防火墙表

首先创建一个独立的防火墙表

1
nft add table inet myfw

创建IP集合

创建一个名为trusted_ips的IPv4地址集合,用于存放允许访问的IP

1
nft add set inet myfw trusted_ips '{ type ipv4_addr; }'

添加需要放行的IP地址

1
nft add element inet myfw trusted_ips '{ 1.2.3.4 }'

将1.2.3.4替换为自己的公网IP,如果有多个IP,可以继续添加到集合中

创建规则链

创建INPUT链,并设置默认策略为ACCEPT,即未匹配其他规则的流量正常放行

1
nft add chain inet myfw input '{ type filter hook input priority 0; policy accept; }'

添加连接跟踪规则

1
2
nft add rule inet myfw input ct state established,related accept
nft add rule inet myfw input ct state invalid drop

接下来添加端口白名单规则

1
2
nft add rule inet myfw input ip saddr @trusted_ips tcp dport 53279 accept
nft add rule inet myfw input tcp dport 53279 drop

这里的规则顺序很重要:

  • 第一条:允许白名单中的IP访问53279端口
  • 第二条:拒绝其他所有IP访问53279端口
  • 其他端口不受影响,继续按照默认策略放行

保存防火墙配置

为了避免服务器重启后规则丢失,将当前myfw表保存到nftables配置文件

1
nft list table inet myfw > /etc/nftables.conf

检查当前规则是否创建成功

1
nft list ruleset

至此,nftables的安装和IP白名单配置就完成了

注意事项:

  1. 本文使用IPv4地址集合,适用于IPv4访问控制
  2. 如果需要保护SSH端口,务必提前将当前管理IP加入白名单,避免无法重新连接服务器
  3. 本配置采用默认放行策略,只限制指定TCP端口,不会影响其他端口
  4. inet myfw是独立创建的规则表,不需要清空系统其他防火墙规则,也不要随意执行nft flush ruleset
  5. 上面采用独立的inet myfw表保存配置,不会主动覆盖iptables-nft管理的其他表后续如果增加端口或IP,记得同步更新/etc/nftables.conf,确保重启后配置一致

Debian使用nftables配置IP白名单
https://chenjihan.com/posts/3074784362/
作者
陈悸涵
发布于
2026年11月7日
许可协议