返回首页

nftables 指南:在 Debian 中设置防火墙

Debian 中 nftables 实用使用指南,用于服务器保护和网络分段。描述威胁模型、分隔方案、规则示例和测试环境。包含 OneButtonFirewall 用于快速部署。

nftables:从本地 FW 到网络分段
Advertisement 728x90

# nftables 实战指南:Debian 系统网络安全防护

Debian 上的 nftables 提供强大的流量过滤功能,适用于服务器或工作站。主要目标?阻挡不需要的入站连接,控制出站流量。方法:分析威胁、定义访问控制、制定过滤规则。

从 Debian 11.4 网络安装 VM 模板开始:最小化配置、无冗余软件,然后通过 apt install mc ssh conntrack 安装 SSH、Midnight Commander 和 conntrack。使用支持网络控制的虚拟化平台,如 QEMU-KVM 或 VirtualBox。

威胁建模与缓解策略

明确你的主要威胁:

Google AdInline article slot
  • T1:服务漏洞利用 — 按端口/IP 阻挡入站流量。
  • T2:DoS 攻击 — 限速数据包,丢弃环回源地址(127.0.0.0/8,除非来自 lo)。
  • T3:暴力破解攻击 — 跟踪失败登录并封禁 IP。
  • T4:恶意出站连接 — 按 IP、端口、协议过滤。
  • T5:未授权端口 — 禁止新入站连接。

访问控制方案,从基础到强化:

  • 最小化(工作站):阻挡所有入站除已建立连接;允许所有出站。
  • 标准(服务器):允许 SSH (22)、HTTP/HTTPS (80/443)、ICMP;限制 conntrack。
  • 强化:IP 白名单、端口限速、DoS 黑名单。

设置强化服务器防护

实验环境:Debian 服务器位于 192.168.1.0/24 网络,eth0 接口。

任务:部署 nftables,实现强化安全防护。

Google AdInline article slot

准备步骤:

apt update && apt install nftables
systemctl enable nftables

规则配置在 /etc/nftables.conf 中:

nft add table inet filter
nft add chain inet filter input { type filter hook input priority 0; policy drop; }
nft add chain inet filter output { type filter hook output priority 0; policy accept; }
nft add chain inet filter forward { type filter hook forward priority 0; policy drop; }

# 已建立/相关连接
nft add rule inet filter input ct state established,related accept

# 环回接口
nft add rule inet filter input iifname "lo" accept

# ICMP
nft add rule inet filter input ip protocol icmp icmp type { echo-request, echo-reply } accept

# SSH 限速
nft add rule inet filter input tcp dport 22 ct state new limit rate 5/minute accept
nft add rule inet filter input tcp dport 22 ct state new drop

# 丢弃环回源地址
nft add rule inet filter input ip saddr 127.0.0.0/8 iifname != "lo" drop

nft add rule inet filter input ct state invalid drop
nft add rule inet filter input accept

应用规则:nft -f /etc/nftables.conf。验证:nft list rulesetconntrack -L

Google AdInline article slot

测试防火墙效果

实验:客户端 (192.168.1.10),服务器 (192.168.1.20)。

任务:探测端口、DoS 抵抗力、出站流量。

步骤:

  • nmap -p 22,80,443 192.168.1.20 — 仅 SSH 开放。
  • hping3 --flood -S 192.168.1.20 -p 22 — 限速生效。
  • tcpdump -i eth0 监控丢弃包。

通过路由实现网络分段

启用 IP 转发:sysctl net.ipv4.ip_forward=1

实验:路由器 (eth0: LAN1 192.168.10.0/24, eth1: LAN2 192.168.20.0/24)。

任务:隔离用户区与服务器区。

规则:

nft add table inet filter
nft add chain inet filter forward { type filter hook forward priority 0; policy drop; }

# 用户到服务器:仅关键端口
nft add rule inet filter forward iifname "eth0" oifname "eth1" tcp dport {22,80,443} ct state new accept
nft add rule inet filter forward iifname "eth0" oifname "eth1" ct state established,related accept

# 反向
nft add rule inet filter forward iifname "eth1" oifname "eth0" ct state established,related accept

# 服务器到互联网
nft add rule inet filter forward iifname "eth1" oifname "eth2" accept

二层分段(交换机防火墙)

无需 IP 子网:使用 VLAN 或基于 MAC 过滤。

网桥规则:

nft add table bridge filter
nft add chain bridge filter forward { type filter hook forward priority 0; }

# 阻挡 MAC 组间通信
nft add rule bridge filter forward ether saddr 00:11:22:33:44:00 ether daddr 00:55:66:77:88:99 drop

OneButtonFirewall:快速分段防护

快速部署项目:脚本从模板生成规则。

实验:OBF 设备置于分段间。

工作原理:脚本解析配置 (JSON/YAML),应用 nftables。

优点:零配置、自动更新。缺点:灵活性较低。

适用场景:家庭办公室、小型企业无专职安全人员。

关键要点:

  • 始终先建模威胁。
  • 默认 drop 策略,仅显式允许。
  • 测试限速和 conntrack。
  • 平衡安全与可用性。
  • 监控 nftables 日志(nft log rule)。

— Editorial Team

Advertisement 728x90

继续阅读