白名单模型的最小骨架
iptables 加固的标准结构是白名单:先把默认策略设为拒绝,再逐条放行确需的流量。顺序上必须先写放行规则再改默认策略,否则中间会出现「拒绝一切」的瞬间窗口。骨架本身很短——放行本机回环、放行已建立的连接、放行业务端口、记录被拒流量、最后拒绝其余,理解这几行比记住几十条规则更有用。
基本信息
| 加固项 | 默认拒绝与状态跟踪 |
|---|---|
| 适用平台 | Linux(iptables 与 nft 兼容层) |
| 风险等级 | 高 |
| 基线 | INPUT 与 FORWARD 默认 DROP,OUTPUT 按组织策略 |
| 关键机制 | conntrack 状态跟踪,避免为返回流量单独开规则 |
典型使用场景
- 新机器初始化:以骨架为起点按业务逐条放行,比事后清理宽松规则更可控
- 对外服务器收口:把默认姿态从接受改为拒绝,消除未登记端口
- 故障排查:临时放开后逐条收紧,逐步定位是哪个端口或来源受限
- 容器与网关主机:确认 FORWARD 策略是否需要调整以配合转发
- 合规整改:默认拒绝是边界防护条款里最常见的落地要求
基线骨架(配合 iptables-apply 或带外通道执行)
基线骨架(配合 iptables-apply 或带外通道执行)
iptables -A INPUT -i lo -j ACCEPT # 放行回环
iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT # 放行已建立连接
iptables -A INPUT -p tcp --dport 22 -j ACCEPT # 放行业务端口(示例)
iptables -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -A INPUT -m limit --limit 10/min -j LOG --log-prefix 'IPT-DROP: ' # 限速记录
iptables -A INPUT -j DROP # 其余拒绝
iptables -P INPUT DROP # 最后再收默认策略
iptables -P FORWARD DROP; iptables -P OUTPUT ACCEPT规则逐条读法
| 规则要素 | 作用 | 注意事项 |
|---|---|---|
| -P INPUT DROP | 默认策略,未匹配即拒绝 | 必须最后设置,否则会立即断开现有会话 |
| -i lo -j ACCEPT | 放行本机回环通信 | 删掉会出现本地服务互相调用失败等奇怪问题 |
| conntrack 状态匹配 | 放行已有连接的返回包 | 有了它才不需要为返回流量写反向规则 |
| --dport 放行 | 按端口开放业务入口 | 能加 -s 来源限制就不要留全开 |
| LOG 加 limit | 记录被拒流量便于排查 | 必须限速并放在拒绝之前,否则被扫描时日志暴涨 |
| -j DROP | 兜底拒绝 | 放在链尾,属白名单模型的收口动作 |
FORWARD 默认拒绝会影响容器与路由转发场景:宿主机是否运行容器、是否承担网关角色,直接决定这条策略是否合适。执行前先确认本机职责,远程操作时全程使用 iptables-apply 或准备好控制台带外通道。
iptables 规则默认只在内存中生效,重启即丢失。持久化方式随发行版不同:可用 iptables-save 与 iptables-restore 自建脚本,或使用发行版提供的服务(如 netfilter-persistent、iptables-services)。选一种并纳入配置管理,避免出现「重启后规则全没了」的情况。
上线顺序与验证
执行顺序建议固定为四步:先看当前规则留档,再添加放行规则,然后设置默认策略,最后从另一台机器实测业务端口连通性。任何一步失败都能立即用留档恢复。规则稳定后写入持久化配置,并在下次变更时重复同样的流程,避免规则在多次临时调整后失去结构。