iptables/nftables 防火墙实战:从入门到企业规则集

📅 2026/7/28 19:15:08
iptables/nftables 防火墙实战:从入门到企业规则集
文章目录写在前面主机防火墙不是“可选配件”一、先建立心智模型包在内核里怎么被“审判”1.1 Netfilter 钩子理解比记命令重要1.2 默认策略安全的第一开关1.3 iptables 与 nftables 的关系别被名字绕晕二、iptables 入门用最小规则集活下来2.1 五分钟看懂 filter 表2.2 最小“能 SSH 管理 Web 服务”规则教学示例2.3 两条最容易救命/害命的规则2.4 日志怎么打才不淹磁盘三、nftables 入门同样的策略更干净的表达3.1 基本对象3.2 等价最小规则nft 原生3.3 为什么企业更爱 nftables四、从“能用”到“像企业”规则集设计方法4.1 先做资产与角色分类4.2 企业规则集的推荐分层逻辑4.3 用“集合”表达企业策略nft 示例4.4 出站管控企业与医院/金融更常见五、NAT、发布与“别把防火墙当成路由器配置游戏”5.1 常见 NAT 场景5.2 Docker 与防火墙互相“打架”六、企业规则集工程化让防火墙可审计、可回滚6.1 规则即代码6.2 原子发布与回滚6.3 变更窗口与远程保险6.4 观测指标七、从 iptables 迁到 nftables可执行路线图7.1 评估7.2 迁移步骤7.3 双栈八、实战场景配方可直接改网段复用场景 A单机公网 Web 堡垒机 SSH场景 B内网应用机前置 SLB场景 C数据库机场景 D临时封禁攻击 IPnft set九、常见失误清单血泪汇总结语企业规则集的本质是“默许权”管理附录 A日常运维命令速查写在前面主机防火墙不是“可选配件”云安全组、WAF、零信任网关很重要但它们替代不了主机防火墙。原因很现实云安全组管不到“同安全组内横向移动”容器/虚拟机逃逸、误配、后门监听最终仍落在主机协议栈应急时你往往需要立刻在失陷机上切断端口等不到改完所有云平台策略。在 Linux 上这条防线长期由Netfilter框架承载用户态工具经历了ipchains → iptables → nftables今天企业环境里常见三种并存仍在维护的iptables规则集新系统默认的nftables上层封装firewalld、ufw、云厂商安全组底层仍可能落到 nft/iptables。本文目标不是背参数而是帮你建立一套可落地的能力看得懂包怎么走 → 写得出最小开放规则 → 组织得起企业级规则集 → 迁得动 iptables 到 nftables。一、先建立心智模型包在内核里怎么被“审判”1.1 Netfilter 钩子理解比记命令重要一个简化的 IPv4 入站故事网卡收包进入 Netfilter 若干钩子PREROUTING / INPUT / FORWARD / OUTPUT / POSTROUTING若目的是本机主要在INPUT链被允许或丢掉若需转发走FORWARD本机发出的包走OUTPUT。你可以先记住实战三问问题主要看哪谁访问我的服务INPUT我当路由/桥转发吗FORWARD我主动访问外面OUTPUT出站管控时很多人只会改 INPUT却忘了开启 IP 转发的机器FORWARD 才是横向关键严格企业可能限制 OUTPUT防反弹 shell、防挖矿回连。1.2 默认策略安全的第一开关链有默认策略policyACCEPT或DROP。入门阶段最重要的安全结论生产主机 INPUT 默认 DROP或 REJECT再显式放行必要端口。默认 ACCEPT 只写几条 DROP几乎必然漏网。1.3 iptables 与 nftables 的关系别被名字绕晕iptables传统工具规则按 table/chain 组织filter/nat/mangle/raw…。nftables新一代框架与工具nft语法统一集合set更强更易做原子替换。新内核上iptables-nft可能是兼容层你敲 iptables底层映射到 nft。检查iptables-Vnft--version# 看是 iptables-legacy 还是 iptables-nftupdate-alternatives--displayiptables2/dev/null||true企业建议新项目直接nftables 原生规则老系统可继续 iptables但要有迁移计划避免同一台机上 firewalld / ufw / 手写 iptables / 手写 nft混治。二、iptables 入门用最小规则集活下来2.1 五分钟看懂 filter 表日常主机防火墙主要用filter表的三条链sudoiptables-L-n-v--line-numbers常用目标target目标含义ACCEPT放行DROP默默丢弃REJECT拒绝并通知对端可暴露信息看场景LOG记日志通常再配合 ACCEPT/DROPRATE 限制相关模块防扫、防爆2.2 最小“能 SSH 管理 Web 服务”规则教学示例警告锁 SSH 前必须确保有控制台/VNC/云厂商串口否则可能把自己锁在门外。#!/usr/bin/env bash# min_iptables.sh — 仅示例请改管理网段set-euopipefailADMIN_NET10.0.0.0/8# 改成你的堡垒机网段PUB_IFeth0iptables-Fiptables-Xiptables-PINPUT DROP iptables-PFORWARD DROP iptables-POUTPUT ACCEPT# 本机回环必须放行iptables-AINPUT-ilo-jACCEPT# 已建立/相关连接iptables-AINPUT-mconntrack--ctstateESTABLISHED,RELATED-jACCEPT# 管理网段 SSHiptables-AINPUT-i$PUB_IF-ptcp-s$ADMIN_NET--dport22-jACCEPT# 公网 Web按需iptables-AINPUT-i$PUB_IF-ptcp-mmultiport--dports80,443-jACCEPT# 可选ICMP 限速按策略iptables-AINPUT-picmp-mlimit--limit5/s --limit-burst10-jACCEPT# 其他入站丢弃默认策略已 DROP持久化发行版不同# Debian/Ubuntu 常见iptables-save|sudotee/etc/iptables/rules.v4# RHEL 系常见serviceiptables save2/dev/null||true# 或用 firewalld不要混着用2.3 两条最容易救命/害命的规则1ESTABLISHED,RELATED 要靠前没有它你放行 22 的“新连接”后回程包也可能被自己挡死视状态与方向而定。状态防火墙的核心就是 conntrack。2先放行 SSH再改默认 DROP错误顺序先INPUT DROP再慢慢写 SSH——远程会话可能立刻断。正确顺序先确保管理通道规则存在再收紧 policy或用脚本原子应用并保留控制台。2.4 日志怎么打才不淹磁盘iptables-AINPUT-mlimit--limit5/min-jLOG --log-prefixIPTables-Drop: --log-level4iptables-AINPUT-jDROP要点务必 limit否则被扫端口时日志打爆前缀方便grep与《auth.log 入侵痕迹》联动认证失败 端口扫描日志一起看。三、nftables 入门同样的策略更干净的表达3.1 基本对象nftables 核心概念table如inet filter同时覆盖 ip/ip6 很方便chainhook priority policyrule匹配与动作set/map企业规则集的灵魂地址组、端口组3.2 等价最小规则nft 原生#!/usr/sbin/nft -f# min_nftables.nftflush ruleset table inet filter{setadmin_v4{typeipv4_addr flags interval elements{10.0.0.0/8}}chain input{typefilter hook input priority filter;policy drop;iifloaccept ct state established,related accept tcp dport22ipsaddr admin_v4 accept tcp dport{80,443}accept icmptypeecho-request limit rate5/second acceptipprotocol icmp drop# 或按策略细化}chain forward{typefilter hook forward priority filter;policy drop;}chain output{typefilter hook output priority filter;policy accept;}}加载sudonft-fmin_nftables.nftsudonft list ruleset3.3 为什么企业更爱 nftables一套语法管 filter/nat原子替换整个 ruleset避免“改到一半”set动态增删 IP不必生成一千条规则对 ip/ip6 可用inet家族统一处理。迁移策略建议先用iptables-translate辅助理解再逐步重写成原生 nft而不是长期依赖兼容层“假装还在用 iptables”。四、从“能用”到“像企业”规则集设计方法企业规则集不是堆端口而是按角色分层。4.1 先做资产与角色分类角色典型入站典型出站边缘 Web80/443管理网 SSH回源、仓库、DNS应用层仅来自 SLB/前置网段的业务端口DB、缓存、MQ数据库仅应用网段备份网段跳板机办公/VPN 网段 SSH到生产的受控 SSHDNS/NTP内网服务端口上游受限一句话原则信任边界画在网段放行写在白名单默认全部拒绝。4.2 企业规则集的推荐分层逻辑无论 iptables 还是 nft建议逻辑顺序固定drop invalid可选但有用accept loaccept established,relatedanti-spoof / bogon按环境管理面放行SSH/堡垒机业务面放行服务端口 源网段可观测限速 LOGpolicy drop顺序错了轻则难排障重则绕过。4.3 用“集合”表达企业策略nft 示例table inet prod { set bastion { type ipv4_addr flags interval elements { 10.10.1.0/24 } } set app_tier { type ipv4_addr flags interval elements { 10.20.0.0/16 } } set db_ports { type inet_service elements { 5432, 3306 } } chain input { type filter hook input priority filter; policy drop; iif lo accept ct state invalid drop ct state established,related accept # 管理面 tcp dport 22 ip saddr bastion accept # 仅应用层访问数据库端口在 DB 主机上 tcp dport db_ports ip saddr app_tier accept # 记录并丢弃 limit rate 10/minute log prefix nft-drop drop } }变更时优先改 set 元素而不是复制粘贴 200 行规则。4.4 出站管控企业与医院/金融更常见默认OUTPUT ACCEPT对互联网暴露主机意味着木马可以任意回连。渐进策略先只做入站加固大多数团队从这里开始对高敏主机增加 OUTPUT 白名单DNS、NTP、更新源、必要 API日志记录被拒出站观察一周再收紧。示例概念# 仅允许 DNS/NTP/HTTPS 出站到已知网段示例 tcp dport 443 ip daddr allowed_egress accept udp dport 53 ip daddr dns_servers accept过严会弄挂监控与补丁务必灰度。五、NAT、发布与“别把防火墙当成路由器配置游戏”5.1 常见 NAT 场景主机做共享上网MASQUERADE/snat端口转发到内网DNAT容器/Kubernetes 节点大量依赖 NAT 与转发如果你的机器不是网关生产上尽量FORWARD policy dropnet.ipv4.ip_forward0不做莫名 DNAT。减少攻击面的同时也减少排障复杂度。5.2 Docker 与防火墙互相“打架”经典坑你以为 iptables 已 DROP 某端口Docker 却插入了自己的链把端口发布出去firewalld 与 Docker 同时改规则重启后行为怪异。实战建议明确“谁是唯一规则管理者”容器暴露尽量走前置负载均衡而不是每台节点随意-p 0.0.0.0:xxxx查真实生效规则nft list ruleset/iptables -L -n -vss -lntp。端口监听与防火墙放行是两件事服务没监听放行也无服务监听0.0.0.0但防火墙未放行外网进不来。六、企业规则集工程化让防火墙可审计、可回滚6.1 规则即代码推荐结构firewall/ inventories/prod.yml nft/ base.nft roles/web.nft roles/db.nft sets/prod_nets.nft README.md CHANGELOG.md用 Ansible/Salt 下发变更走 MR 评审禁止登录主机手改“永不回收的临时 ACCEPT”。6.2 原子发布与回滚nftables 优势动作sudonft-f/etc/nftables/prod.nft# 整体加载sudocpprod.nft prod.nft.bak.$(date%F)iptables 可用iptables-savebackup.rules# 出错iptables-restorebackup.rules高阶玩法先载入新链确认 SSH 仍在再切换跳转——类似“蓝绿发布”。6.3 变更窗口与远程保险远程改防火墙的黄金实践# 例5 分钟后自动恢复旧规则先备好 rollbackechonft -f /etc/nftables/backup.nft|at now 5minutes# 确认没把自己锁死后取消 at 任务或使用screen/tmux 云控制台兜底。6.4 观测指标企业至少要能回答每秒 drop 多少哪些端口被扫最多管理端口是否出现非堡垒来源规则条数/集合大小是否异常膨胀。把LOG前缀送入 SIEM与 auth.log 的爆破事件关联效果远好于孤立看防火墙。七、从 iptables 迁到 nftables可执行路线图7.1 评估iptables-save/root/iptables.backup# 尝试翻译辅助不可盲信iptables-restore-translate-f/root/iptables.backup2/dev/null|head检查是否使用复杂 multiport/u32ipset可对应 nft set第三方脚本频繁iptables -I。7.2 迁移步骤备份并文档化现网策略意图不是只备份命令在测试机用 nft 重写“意图”对比放行矩阵管理/业务/健康检查业务低峰切换观察一周下线 iptables 兼容层依赖。7.3 双栈今天只写 IPv4 不够。优先用table inet filter { ... }同时覆盖 ip/ip6避免“IPv4 锁死、IPv6 敞开门”。若暂时不用 IPv6也应明确是禁用协议栈还是防火墙默认丢弃并写进基线。八、实战场景配方可直接改网段复用场景 A单机公网 Web 堡垒机 SSHINPUT DROP放行lo、established22 仅堡垒网段80/443 任意或仅 CDN 回源网段限速 LOG DROP场景 B内网应用机前置 SLB业务端口仅 SLB/前置网段SSH 仅堡垒拒绝其它横向场景 C数据库机仅应用网段访问 3306/5432SSH 仅堡垒禁止其它入站可选禁止出公网除补丁源场景 D临时封禁攻击 IPnft setsudonftaddelement inet filter blacklist{203.0.113.66}# 规则中ip saddr blacklist drop比临时iptables -I INPUT -s ... -j DROP更可管理。九、常见失误清单血泪汇总先 DROP 后加 SSH把自己锁死忘了 lo本机服务异常Docker/Kubernetes 与手写规则混战只挡 IPv4不挡 IPv6用 REJECT 对全网扫描狂回包既吵又可能助长探测LOG 无限速磁盘与费用爆掉临时 ACCEPT 永久遗忘把 OUTPUT 一刀切却不放 DNS机器“假死”云安全组已放行就以为主机也安全或反过来规则意图不写文档三年后无人敢动。结语企业规则集的本质是“默许权”管理防火墙规则看起来是技术细节本质是组织在问默认情况下谁有权跟这台机器说话入门用 iptables 建立直觉进阶用 nftables 的 set 与原子加载做工程企业级则把规则变成可评审、可回滚、可观测的策略代码。当你能随口说出某台 DB 机“只允许应用网段的 5432 堡垒机 22其余 DROPIPv6 同样如此变更走仓库”你就已经从“会敲几条命令”走到了“能守住企业边界”的实战水位。附录 A日常运维命令速查# iptablesiptables-L-n-v--line-numbers iptables-Siptables-save# nftablesnft list ruleset nft list sets nftaddelement inet filter admin_v4{10.1.2.3}nft delete element inet filter admin_v4{10.1.2.3}# 对照真实监听ss-lntp