一、用途
用于追踪TCP, UDP, ICMP等协议的连接状态(支持statefull和stateless),实现有状态的防火墙
二、详细说明
- 在流表中匹配项表示为ct_state=flags/mask或者ct_state=[+flag…][-flag…]
- flags描述:
- trk:报文状态是tracked。如果该标志没有设置,其他的标志也不会被设置。如果这个标志设置了,报文状态为tracked,其他的标志才会被设置。
- new:新建的连接,此flag一般为uncommitted状态的连接
- est:已经建立的连接,此flag为committed状态的连接
- rel:和一个存在连接相关的连接。比如ICMP 目的不可达消息或者FTP数据连接。存在于committed连接。
- rpl:这个流是反方向,意味着没有初始化连接。存在于committed连接。
- inv:无效状态,意味着连接跟踪不能识别连接。这个标志包含了一个连接跟踪可能遇到的任何问题,例如:L3/L4协议处理程序没有加载或者不可用。在Linux内核datapath,意味着nf_conntrack_ipv4或者nf_conntrack_ipv6模块没有加载。L3/L4协议处理程序确定报文分组格式不对。报文协议的长度不对。
- 其他匹配字段:
- ct_zone:区域是独立的连接跟踪上下文,可以通过CT动作设置。由ct action设置ct_zone值可以用作另一个流量条目的匹配字段。
- ct_mark:由ct action的 exec参数中的action设置到当前报文所属的连接中的32位元数据。
- ct_label:由exec参数内的操作提交到的128位标签CT动作,到当前数据包的连接属于。
- ct_label:由ct action的 exec参数中的action设置到当前报文所属的连接中的128位标签.
- ct_nw_src / ct_ipv6_src:匹配IPv4/IPv6连接跟踪原始方向元组的源地址。
- ct_nw_dst / ct_ipv6_dst:匹配IPv4/IPv6连接跟踪原始方向元组的目标地址。
- ct_nw_proto:匹配连接跟踪原始方向元组的IP协议类型。
- ct_tp_src:匹配连接跟踪原始方向的元组传输层源端口。
- ct_tp_dst:匹配连接跟踪原始方向的元组传输层目的端口。
- ct action描述:
- commit:将连接提交到连接跟踪模块,该模块对此连接的存储超出报文在管道中的生命周期。
- force:除以上的commit标志外,还可以使用force标志来有效地终止现有连接并在当前方向开始新连接。
- table=number:管道处理一分为二。原始报文将继续以未跟踪数据包的形式处理当前动作action列表。报文的另一个实例将发送到连接跟踪程序,之后它将重新注入OpenFlow管道并继续在表number中处理,此时其已设置了ct_state状态和其它ct match匹配字段。
- zone=value 或 zone=src[start…end]:一个16位的上下文ID,可以将连接隔离在单独的域,允许在不同区域使用重叠的网络地址。如果未提供区域值,则默认为使用区域0。
- exec([action][,action…]):在连接跟踪上下文中执行受限制的动作集。在exec的动作列表中只接受修改ct_mark 或 ct_label字段的动作。
- alg=<ftp/tftp>:指定alg(Application Layer Gateway 应用层网关)以跟踪特定连接类型。
- nat:指定所跟踪的连接的NAT翻译地址和端口。
- 数据报文可为两个状态:untracked和tracked。untracked报文未进入connection tracker中,标识为-trk,此时执行actions=ct(table=XX),将报文送入connection tracker,报文变为tracked,标识为+trk
- 连接有两个状态:uncommitted和committed。连接默认状态为uncommitted,为了记录连接信息,连接必须为committed。标识为+trk+new的报文经由actions=ct(commit)变为committed状态直到连接终止。连接建立完成后的数据包标识为+trk+est。