核心在于只放行established和related状态的入向流量:established指双向通信已确认的会话(如tcp三次握手后的ack或数据包),related指辅助连接(如ftp数据连接、icmp错误报文),均由conntrack动态跟踪,无需手动维护ip/端口列表。

核心在于只放行 ESTABLISHED 和 RELATED 状态的入向流量,同时严格限制 NEW 连接入口,让防火墙自动识别并信任合法会话的后续通信。
理解 ESTABLISHED 与 RELATED 的实际含义
ESTABLISHED 不是“连接已存在”,而是指该数据包属于一个双向通信已确认的会话(如 TCP 中完成三次握手后的 ACK 或应用层数据)。RELATED 则用于辅助连接,比如 FTP 主动模式下控制连接建立后触发的数据连接、ICMP 错误报文对应原始请求等。这两类状态由 conntrack 模块动态跟踪生成,无需手动维护 IP/端口列表。
基础规则顺序决定安全效果
INPUT 链中必须按以下逻辑顺序配置:
- 先放行本地回环:-A INPUT -i lo -j ACCEPT
- 再放行已建立和关联连接:-A INPUT -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
- 然后有选择地允许 NEW 连接(如 SSH、HTTP):-A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT
- 最后显式丢弃 INVALID 包:-A INPUT -m conntrack --ctstate INVALID -j DROP
- 默认策略设为 DROP:-P INPUT DROP
避免常见误配陷阱
不能把 ESTABLISHED 规则放在 NEW 规则之后,否则 NEW 包还没被放行,conntrack 就无法建立初始条目,导致后续 ESTABLISHED 包永远匹配不到。也不建议在 OUTPUT 链也加 ESTABLISHED 限制——除非你明确要阻止本机主动发起的新连接返回路径(如隔离测试环境),否则 OUTPUT 默认 ACCEPT 更合理且不影响入向安全。
配合速率控制提升抗扰能力
仅靠状态匹配无法防住 SYN Flood 或短连接风暴。对 NEW 状态加限速能有效缓解:
- -A INPUT -p tcp --syn -m conntrack --ctstate NEW -m limit --limit 5/minute --limit-burst 5 -j ACCEPT
- 超出速率的 NEW 包直接交给默认 DROP 处理,不进入连接跟踪流程,减轻内核负担










