核心是按顺序配置四条规则:先放行lo接口,再放行ESTABLISHED,RELATED,接着限制性允许NEW连接,最后DROP INVALID;缺一不可,顺序错则状态防火墙失效。

核心是让 INPUT 链只信任已确认通信和合法关联流量,同时堵死所有未经许可的新建入口。关键不在单加一条 ESTABLISHED 规则,而在于四条规则的逻辑顺序与状态组合。
必须按顺序配置的四条基础规则
顺序错一点,整个状态机制就失效:
- 放行本地回环:iptables -A INPUT -i lo -j ACCEPT(保障本机服务自洽,比如数据库、监控探针)
- 放行已建立与关联连接:iptables -A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT(现代内核推荐用 conntrack 替代老旧的 state 模块)
- 节制开放新建连接:iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT(仅开 SSH;HTTP/HTTPS 等按需追加,不写端口范围)
- 显式丢弃异常连接:iptables -A INPUT -m conntrack --ctstate INVALID -j DROP(拦截伪造包、分片错乱、连接跟踪失败的流量)
为什么 ESTABLISHED 必须搭配 RELATED
单独放行 ESTABLISHED 会直接导致业务中断:
- FTP 被动模式下,控制连接(21端口)建立后触发的数据连接被标记为 RELATED,不是 ESTABLISHED
- DNS 查询返回的响应包、ICMP “目标不可达” 或 “超时” 报文,都属于 RELATED 流量
- 若漏掉 RELATED,会出现:FTP ls 失败、traceroute 卡在某跳、dig 解析超时等典型现象
加固新建连接入口防爆破
仅靠状态匹配无法抵御连接风暴。NEW 规则层必须叠加防护:
- 对 SYN 包限速防 Flood:iptables -A INPUT -p tcp --syn -m conntrack --ctstate NEW -m limit --limit 5/minute --limit-burst 5 -j ACCEPT
- 管理 IP 白名单优先插入链首:iptables -I INPUT -s 203.0.113.42 -j ACCEPT(避免改规则时把自己锁在外面)
- 默认策略务必设为 DROP:iptables -P INPUT DROP(清空前先确认已有白名单或回环规则)
OUTPUT 链无需状态限制
除非做隔离测试,否则 OUTPUT 链保持默认 ACCEPT 即可:
- 本机主动发起的连接(如 curl、wget、数据库出向)不需要 INPUT 链的状态规则来“放行返回”
- ESTABLISHED/RELATED 是针对入向流量设计的,OUTPUT 加状态匹配反而可能阻断正常出向响应路径
- 安全重心始终在 INPUT —— 控制谁可以连你,而不是你连谁

















