state模块
state模块的连接其中的报文可以分为5种状态,报文状态可以为NEW、ESTABLISHED、RELATED、INVALID、UNTRACKED
NEW:请求建立连接的包、对于防火墙来说完全陌生
ESTABLISHED:将要或已经建立连接的包
RELATED:与已知某个连接相关联的包
INVALID:无对应连接,或连接无效
UNTRACKED:未跟踪状态的包
state模块是iptables防火墙的一种扩展模块,用于匹配TCP/UDP协议数据包的连接状态。这个模块提供了四种连接状态: NEW, BUILT, RELATED 和 INVALID,分别对应新建连接、已建立连接、相关连接和无效连接。可以利用这些状态信息对数据包进行过滤和处理,保证网络安全。
举个例子,假设我们的服务器提供HTTP服务,那么我们可以使用state模块匹配HTTP请求的连接状态,比如:
iptables -A INPUT -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
这个规则可以让进入服务器的HTTP请求连接状态为NEW或BUILT的数据包通过,同时也可以让出去服务器的HTTP响应连接状态为BUILT的数据包通过。这样可以保证只有建立连接的数据包能够通过防火墙,增强了网络的安全性。
当iptables处理一个新的数据包时,它需要确定这个数据包属于哪个连接。State模块就是用来跟踪连接状态的。例如,当一个新的TCP连接建立时,数据包会带有SYN标志,iptables会根据这个标志判断这个数据包是属于一个新的TCP连接还是已有的TCP连接。State模块就是用来管理这些连接状态的。
举个例子,如果你使用iptables来保护一个Web服务器,你可以配置它只允许建立从Web服务器到客户端的连接。这样,当客户端向Web服务器发起一个连接请求时,iptables会使用State模块来跟踪连接状态,如果连接状态是新建的(即SYN标志已设置),那么iptables就会允许这个连接通过。如果连接状态已经建立,iptables就会继续允许数据包通过。如果连接状态不是新建的也不是已建立的,那么iptables就会丢弃这个数据包,因为这个数据包是无效的