核心思路是默认DROP、先放行ESTABLISHED/RELATED、再精准放行NEW连接。需按序执行:iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT;iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT;iptables -A INPUT -m state --state INVALID -j DROP;iptables -P INPUT DROP。
要在 Linux 中用
实现基于连接状态的单向入站安全策略,核心思路是:只允许外部主动发起的“新连接”在明确授权的服务端口上建立(如 SSH、HTTP),其余所有入站新连接一律拒绝;同时放行所有“已建立”(ESTABLISHED)和“相关联”(RELATED)的连接回包,确保合法通信能持续完成。这不是简单地开几个端口,而是利用内核连接跟踪机制(conntrack)识别数据流状态,实现更精准、更安全的控制。
理解 state 模块与连接状态含义
是 iptables 的状态匹配模块,依赖内核
子系统对连接进行动态跟踪。它识别四种关键状态:
NEW
:数据包试图发起一个全新连接(如客户端第一次发 SYN)
ESTABLISHED
:属于一个已成功建立的双向连接(如 TCP 三次握手完成后,后续的数据包)
RELATED
:与现有连接逻辑相关的新连接(如 FTP 的数据连接、ICMP 错误报文对应原连接)
INVALID
:无法归类到任何已知连接,或连接信息损坏的数据包(通常为异常/攻击流量)
构建单向入站策略的关键规则顺序
iptables 规则按从上到下顺序匹配,一旦命中即停止。因此顺序至关重要:
先放行所有 ESTABLISHED 和 RELATED 流量(保障已有会话不中断)
再显式放行特定端口的 NEW 连接(如
)
最后用
拦截异常包
确保 INPUT 链默认策略为
(
),兜底拒绝所有未明确允许的入站 NEW 包
典型配置示例(命令行逐条执行)
以下命令构建最小可行单向入站策略(仅开放 SSH):
CentOS Linux 7.9.2009
CentOS Linux 7.9.2009是传统CentOS Linux 7的最后主要版本,也是很多企业历史服务器中仍可能遇到的系统版本。它以稳定、兼容RHEL 7生态、文档丰富和软件支持广泛著称,曾长期用于Web服务、数据库、虚拟化节点和企业内部业务系统。不过CentOS Linux 7已于2024年6月30日停止维护,现在继续使用会面临安全补丁缺失风险。该版本更适合旧业务迁移、历史环境恢复或离线兼容性测试。
下载
说明:第一行确保你 SSH 进去后不会被断连;第二行只让外部能新建 SSH 连接;第三行丢弃可疑无效包;第四行是安全基线——没有显式放行的 NEW 连接一律拒绝。若需加 HTTP,只需追加一行:
。
保存规则并确认生效
临时规则重启后丢失,必须保存:
CentOS/RHEL 系统:
(规则写入
)
Debian/Ubuntu 系统:
验证当前规则:
,重点检查 ESTABLISHED/RELATED 规则是否排在最前,且默认策略为 DROP
iptables -m state-m statenf_conntrack-p tcp --dport 22 -m state --state NEW -j ACCEPT-m state --state INVALID -j DROPDROPiptables -P INPUT DROPiptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j ACCEPT
iptables -A INPUT -m state --state INVALID -j DROP
iptables -P INPUT DROPiptables -A INPUT -p tcp --dport 80 -m state --state NEW -j ACCEPTservice iptables save/etc/sysconfig/iptablesiptables-save > /etc/iptables/rules.v4iptables -L INPUT -v -n --line-numbers