Linux 防火墙用“表-链-规则”层层把关:raw 最先截包,mangle 改包头,nat 做地址转换,filter 最后放行;顺序错则防护全废。文章一张流程图+3 场景实例+命令速查,10 分钟让你写对 iptables/nftables 规则。raw → mangle → nat → filter,一层一层剥洋葱,看完再也不会写错 iptables 规则!
01 先抛一张“剥洋葱图”
入站包→ PREROUTING → 路由 → INPUT → 本机转发包→ PREROUTING → 路由 → FORWARD → POSTROUTING → 出站出站包→ OUTPUT → POSTROUTING → 离开
每经过一层“表”,都可能被规则“截胡”——顺序错了,防护全废。
02 4 张表 × 5 条链 = 20 个“关卡”(建议截图)
同一链可能出现在多张表!执行顺序= 表优先级:raw > mangle > nat > filter
03 实战 3 场景(秒懂流程)
① 访问本机 Web(80)
PREROUTING(raw→mangle→nat) → INPUT(mangle→filter) → 用户空间
想在80 端口放行?规则写在 filter.INPUT !
② 本机访问外网
OUTPUT(raw→mangle→nat→filter) → POSTROUTING(mangle→nat) → 网卡
做SNAT?规则写在 nat.POSTROUTING!
③ 经过本机转发(路由)
PREROUTING → FORWARD(filter) → POSTROUTING
想当“中间人”放行?规则写在 filter.FORWARD!
04 命令速查
看filter 规则: iptables -L -n -v
看nat 规则: iptables -t nat -L -n -v
写放行22: iptables -t filter -A INPUT -p tcp --dport 22 -j ACCEPT
写SNAT: iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o eth0 -j MASQUERADE
规则按顺序匹配,首条命中即生效;无匹配则走链默认策略。
05 现代升级:nftables 一样“表-链-规则”
一条命令管 IPv4/IPv6/ARP
仍保留表→链→规则逻辑,只是语法更爽
nft add table inet myfilternft add chain inet myfilter input { type filter hook input priority 0 \; }nft add rule inet myfilter input tcp dport 22 accept
06 口诀一张图保存
数据包进入网络栈 | v+----------------+ raw 先行| raw表 | (连接跟踪前处理)| (PREROUTING) | 用于跳过连接跟踪+----------------+ | v+----------------+ mangle 涂改| mangle表 | (修改数据包标记)| (PREROUTING) | 如TOS、TTL等+----------------+ | v+----------------+ nat 地址转换| nat表 | (地址和端口转换)| (PREROUTING) | DNAT或重定向+----------------+ | v+----------------+ filter 最后把门开| filter表 | (过滤:允许或拒绝)| (INPUT链) | 决定数据包去向+----------------+ | v[ 允许通过 ] 或 [ 丢弃/拒绝 ]
注意:顺序错了,安全白搭!
07 彩蛋
公众号回复「表链」自动领取:
① 高清《数据包穿越防火墙》流程图
② iptables / nftables 对照 cheat sheet
③ 常见 20 条规则模板(放行/SNAT/DNAT/端口转发)
下次写规则,先画图再动手,再也不被顺序坑!
