连接跟踪存储关于之前看到的通信消息,以做出匹配决定。允许连接后,信息放置在连接跟踪表中,直至超时、连接关闭或看到更多匹配的通信(重要计时器)。尽管这需要更多的内核内存,但是好处在于可以简化规则设计。
状态 定义
NEW 封包开始新通信,将规则添加到连接跟踪表
ESTABLISHED 与连接跟踪表中的规则匹配的任一封包
RELATED 在某种程度上与 ESTABLISHED 通信“相关”的通信 ;如 FTP 等协议
INVALID 无法确定的封包;通常,这些封包应被拒绝或丢弃
注意:
为使 RELATED 规则起作用,您可能需要在 /etc/sysconfig/iptables-config 中启用相应的程序模块。
运行 iptables 命令更改内存中的 netfilter 内核模块规则,但如果重新引导,则不会持续。
运行 service iptables save 将采用内存中的当前规则,并将其写入 /etc/sysconfig/iptables 。
示例:
# modprobe nf_conntrack_ftp
# modprobe nf_conntrack_tftp
# iptables -F
# iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
# iptables -A INPUT -m state --state NEW -p tcp --dport 21 -j ACCEPT
# iptables -A INPUT -m state --state NEW -p tcp --dport 69 -j ACCEPT
# iptables -A INPUT -m state --state NEW,INVALID -j DROP
注意:如果不加载相应的内核模块,那么跟踪状态将不法生效。
6.永久生效:
1. 编辑文件: /etc/sysconfig/iptables-config
IPTABLES_MODULES="nf_conntrack_ftp nf_conntrack_tftp"
2. 保存策略:
# service iptables save
3. 开机自启:
# chkconfig iptables on
注意:在实际环境中更推荐把所有策略保存到自定义脚本中,并把脚本加入 /etc/rc.local 实现开机自启。
7.完整配置
# 1.删除现有规则iptables -F# 2.配置默认链策略iptables -P INPUT DROPiptables -P FORWARD DROPiptables -P OUTPUT DROP# 3.允许远程主机进行SSH连接iptables -A INPUT -i eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT# 4.允许本地主机进行SSH连接iptables -A OUTPUT -o eth0 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A INPUT -i eth0 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT# 5.允许HTTP请求iptables -A INPUT -i eth0 -p tcp --dport 80 -m state --state NEW,ESTABLISHED -j ACCEPTiptables -A OUTPUT -o eth0 -p tcp --sport 80 -m state --state ESTABLISHED -j ACCEPT
总结
Iptables是一个非常重要的工具,它是每一个防火墙上几乎必备的设置,也是我们在做大型网络的时候,为了很多原因而必须要设置的。学好Iptables,可以让我们对整个网络的结构有一个比较深刻的了解,同时,我们还能够将内核空间中数据的走向以及linux的安全给掌握的非常透彻。我们在学习的时候,尽量能结合着各种各样的项目,实验来完成,这样对你加深iptables的配置,以及各种技巧有非常大的帮助。