# nftables 实战指南:Debian 系统网络安全防护
Debian 上的 nftables 提供强大的流量过滤功能,适用于服务器或工作站。主要目标?阻挡不需要的入站连接,控制出站流量。方法:分析威胁、定义访问控制、制定过滤规则。
从 Debian 11.4 网络安装 VM 模板开始:最小化配置、无冗余软件,然后通过 apt install mc ssh conntrack 安装 SSH、Midnight Commander 和 conntrack。使用支持网络控制的虚拟化平台,如 QEMU-KVM 或 VirtualBox。
威胁建模与缓解策略
明确你的主要威胁:
- 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,实现强化安全防护。
准备步骤:
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 ruleset,conntrack -L。
测试防火墙效果
实验:客户端 (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
暂无评论。