当前位置: 首页 > 图文教程 > 操作系统 > Unix/Linux > iptables的状态检测机制

Unix/Linux
Linux crontab定时执行任务 命令格式与详细例子
linux 查看用户及用户组的方法
让Linux系统有效防御ARP攻击的实用技巧
Linux 常用软件列表
linux wget 一个强大的下载命令
linux 常用脚本、命令
linux 磁盘配额 简单介绍
Linux服务器架设笔记 Squid服务器配置
ubuntu intel 集成显卡安装
ubuntu 9.04 X3100 显卡开启3D特效
Ubuntu 8.10 Server Ruby 的安装方法
Ubuntu root帐户密码修改
ubuntu下apt-get 命令参数
Ubuntu Linux下实现QQ的三种方式
Ubuntu 8.04中建立PHP+MySQL环境
Ubuntu常用软件大全
Ubuntu系统下安装Aircrack-ng
Ubuntu实现FTP功能
ubuntu 字体美化实现方法
ubuntu下netbeans汉字显示残缺问题

Unix/Linux 中的 iptables的状态检测机制


出处:互联网   整理: 软晨网(RuanChen.com)   发布: 2009-11-01   浏览: 80 ::
收藏到网摘: n/a

1.什么是状态检测
每个网络连接包括以下信息:源地址、目的地址、源端口和目的端口,叫作套接字对(socket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些信息叫作状态(stateful),能够检测每个连接状态的防火墙叫作状态包过滤防火墙。它除了能够完成简单包过滤防火墙的包过滤工作外,还在自己的内存中维护一个跟踪连接状态的表,比简单包过滤防火墙具有更大的安全性。
1.什么是状态检测2.iptables的状态检测是如何工作的?2.1.iptables概述2.2.UDP连接2.3.TCP连接2.3.1.连接建立过程中状态表的变化2.3.2.透视状态表2.3.3.超时2.3.4.连接的中断2.4.ICMP3.FTP协议的状态检测每个网络连接包括以下信息:源地址、目的地址、源端口和目的端口,叫作套接字对(socket pairs);协议类型、连接状态(TCP协议)和超时时间等。防火墙把这些信息叫作状态(stateful),能够检测每个连接状态的防火墙叫作状态包过滤防火墙。它除了能够完成简单包过滤防火墙的包过滤工作外,还在自己的内存中维护一个跟踪连接状态的表,比简单包过滤防火墙具有更大的安全性。iptables中的状态检测功能是由state选项来实现的。对这个选项,在iptables的手册页中有以下描述:state这个模块能够跟踪分组的连接状态(即状态检测)。--state state这里,state是一个用逗号分割的列表,表示要匹配的连接状态。有效的状态选项包括:INVAILD,表示分组对应的连接是未知的;ESTABLISHED,表示分组对应的连接已经进行了双向的分组传输,也就是说连接已经建立;NEW,表示这个分组需要发起一个连接,或者说,分组对应的连接在两个方向上都没有进行过分组传输;RELATED,表示分组要发起一个新的连接,但是这个连接和一个现有的连接有关,例如:FTP的数据传输连接和控制连接之间就是RELATED关系。对于本地产生分组,在PREROUTING或者OUTPUT链中都可以对连接的状态进行跟踪。在进行状态检测之前,需要重组分组的分片。这就是为什么在iptables中不再使用ipchains的ip_always_defrag开关。UDP和TCP连接的状态表由/proc/net/ip_conntrack进行维护。稍后我们再介绍它的内容。状态表能够保存的最大连接数保存在/proc/sys/net/ipv4/ip_conntrack_max中。它取决于硬件的物理内存。2.iptables的状态检测是如何工作的?2.1.iptables概述在讨论iptables状态检测之前,我们先大体看一下整个netfilter框架。如果要在两个网络接口之间转发一个分组,这个分组将以以下的顺序接收规则链的检查:PREROUTING链如果必要对这个分组进行目的网络地址转换(DNAT)和mangle处理。同时,iptables的状态检测机制将重组分组,并且以以下某种方式跟踪其状态:分组是否匹配状态表中的一个已经实现(ESTABLISHED)的连接。它是否是和状态表中某个UDP/TCP连接相关(RELATED)的一个ICMP分组。这个分组是否要发起一个新(NEW)的连接。如果分组和任何连接无关,就被认为是无效(INVALID)的。FORWARD链把分组的状态和过滤表中的规则进行匹配,如果分组与所有的规则都无法匹配,就使用默认的策略进行处理。POSTROUTING链如果有必要,就对分组进行源网络地址转换(SNAT),注意:所有的分组都必须和过滤表的规则进行比较。如果你修改了规则,要拒绝所有的网络流量,那么即使分组的状态匹配状态表中的一个ESTABLISHED条目,也将被拒绝。下面,我们对UDP、TCP和ICMP三个协议分别进行分析。2.2.UDP连接UDP(用户数据包协议)是一种无状态协议,以为这个协议没有序列号。不过,这并不意味着我们不能跟踪UDP连接。虽然没有序列号,但是我们还可以使用其它的一些信息跟踪UDP连接的状态。下面是状态表中关于UDP连接的条目:udp 17 19 src=/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\192.168.1.2 dst=/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\192.168.1.50 sport=1032 dport=53 [UNREPLIED] src=/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\192.168.1.50 dst=/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\/DownloadFiles\2005september\2005-09-13\192.168.1.2 sport=53 dport=1032 use=1 这个状态表项只有在iptables过滤规则允许建立新的连接时,才能建立。以下的规则可以产生这类状态表项,这两条规则只允许向外的UDP连接:iptables -A INPUT -p udp -m state --state ESTABLISHED -j ACCEPTiptables -A OUTPUT -P udp -m state --state NEW,ESTABLISHED -j ACCEPT上面的状态表项包含如下信息:连接的协议是UDP(IP协议号17)。这个状态表项还有19秒中就超时。发起连接方向上的源、目的地址和源、目的端口。应答方向上的源、目的地址和源、目的端口。这个连接使用UNREPLIED标记,表示还没有收到应答。UDP连接的超时时间在/usr/src/linux/net/ipv4/netfilter/ip_conntrack_proto_udp.c文件中设