Debian使用nftables配置IP白名单
在使用Debian服务器时,有时需要对指定端口进行访问限制,例如只允许自己的IP访问SSH以外的管理端口,而其他端口继续保持正常开放
这里使用nftables实现IP白名单功能相比传统的iptables,nftables使用集合管理IP,配置更加简洁,也方便后续维护
安装nftables
首先更新软件包列表并安装nftables
1 | |
安装完成后,启用nftables服务
1 | |
创建IP白名单
这里以TCP端口53279为例,只允许指定IP访问该端口,其他IP访问时直接丢弃数据包,其他端口不受影响
创建防火墙表
首先创建一个独立的防火墙表
1 | |
创建IP集合
创建一个名为trusted_ips的IPv4地址集合,用于存放允许访问的IP
1 | |
添加需要放行的IP地址
1 | |
将1.2.3.4替换为自己的公网IP,如果有多个IP,可以继续添加到集合中
创建规则链
创建INPUT链,并设置默认策略为ACCEPT,即未匹配其他规则的流量正常放行
1 | |
添加连接跟踪规则
1 | |
接下来添加端口白名单规则
1 | |
这里的规则顺序很重要:
- 第一条:允许白名单中的IP访问53279端口
- 第二条:拒绝其他所有IP访问53279端口
- 其他端口不受影响,继续按照默认策略放行
保存防火墙配置
为了避免服务器重启后规则丢失,将当前myfw表保存到nftables配置文件
1 | |
检查当前规则是否创建成功
1 | |
至此,nftables的安装和IP白名单配置就完成了
注意事项:
- 本文使用IPv4地址集合,适用于IPv4访问控制
- 如果需要保护SSH端口,务必提前将当前管理IP加入白名单,避免无法重新连接服务器
- 本配置采用默认放行策略,只限制指定TCP端口,不会影响其他端口
inet myfw是独立创建的规则表,不需要清空系统其他防火墙规则,也不要随意执行nft flush ruleset- 上面采用独立的inet myfw表保存配置,不会主动覆盖iptables-nft管理的其他表后续如果增加端口或IP,记得同步更新/etc/nftables.conf,确保重启后配置一致
Debian使用nftables配置IP白名单
https://chenjihan.com/posts/3074784362/