跳转到主内容
趣航编程网 - 趣学编程,启航技术之路!

怎么在Linux利用Iptables-M-State实现基于连接状态跟踪的单向入站安全策略

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

相关文章