nftables 多接口安全路由需按接口角色设链并严格控流:WAN 默认 drop 入向,仅放行 ESTABLISHED/RELATED;LAN 限外访端口;DMZ 仅开指定服务与源 IP;禁非预期转发,结合 conntrack 状态与源地址校验强化防护。

配置 nftables 实现多接口网卡的安全路由,核心在于区分接口角色(如内网、外网、DMZ)、控制跨接口流量方向,并显式放行必要通信。不依赖默认策略,每条规则都应有明确的接口、协议、源/目的地址约束。
按接口角色定义链和基础策略
先为每个物理或逻辑接口创建专用链,避免混用规则。例如:
- eth0 作为 WAN 口(公网接入),默认 drop 所有入向连接,仅允许已建立/相关连接回包;
- eth1 作为 LAN 口(内网),默认 accept 内部互访,但限制其主动访问外网的协议和端口;
- eth2 作为 DMZ 或管理口,只开放指定服务(如 SSH 管理、HTTP 代理),且仅限特定源 IP 访问。
在 table inet filter 中定义三条 base chain,分别绑定到对应接口的 ingress/egress 方向,用 type filter hook input|forward priority 显式指定处理时机。
禁止非预期的跨接口转发
Linux 默认开启 ip_forward,多接口场景下极易造成路由泄露。nftables 应在 forward 链中严格拦截非法路径:
当代理已经知道网站路由或内容URL,并且在启动前需要有效的sitemap XML、sitemap索引或robots.txt引用时,请使用sitemap。这是一个发布构件技能,而不是爬虫或SEO平台。
- 禁止从 eth0(WAN)直接转发到 eth1(LAN),除非是明确的 DNAT 回流或端口映射;
- 禁止从 eth1(LAN)未经 NAT 直接发往 eth0(WAN)的私有地址段(如 10.0.0.0/8、172.16.0.0/12、192.168.0.0/16);
- 若启用 IPv6,同样需对 fe80::/10、fc00::/7 等本地地址段做等效限制。
示例规则:nft add rule inet filter forward iifname "eth0" oifname "eth1" ct state invalid,established,related counter drop —— 此处先 drop,再单独加一条允许 ESTABLISHED/RELATED 的例外规则。
状态化放行与连接跟踪细化
避免仅靠端口放行,结合 conntrack 状态提升安全性:
- 对 LAN→WAN 出向流量,只允许
ct state new的 TCP/UDP 连接,且必须匹配预设的出口端口白名单(如 53、80、443、123); - 对 WAN→LAN 入向流量,禁用
ct state new,仅允许通过 DNAT 映射后产生的ct state established回包; - 对 ICMPv4/v6,限制类型:只放行 echo-reply、destination-unreachable、time-exceeded,禁用 echo-request(防止扫描探测)。
带源地址校验的反向路径过滤
配合内核 rp_filter 使用仍不够可靠,应在 nftables 中补充校验:
- 在 input 和 forward 链开头添加规则,丢弃源地址不属于对应接口子网的包(如 eth1 收到源 IP 不在 192.168.10.0/24 的包);
- 对多宿主主机(同一接口配多个子网),使用
@ip saddr地址集进行精确匹配; - 对动态分配地址(如 DHCP),可结合 ipset 定期更新合法源地址范围,再在 nft ruleset 中引用。
这类规则应置于所有连接状态判断之前,确保伪造源地址包在早期就被拦截。
















