iptables raw表的特殊作用
1、iptables四表五链:
2、raw表的优先级
从上图中可以看到raw表作用于prerouting和output链,且在这两个链中的几个表中拥有最高优先级,并且是高于连接跟踪的,这个也是raw表用于优化性能的一个重要前提
汇总关系表如下:
从netfilter的hook点优先级我们也可以看到raw表hook点优先级非常高:数值越低,优先级越高
enum nf_ip_hook_priorities {
NF_IP_PRI_FIRST = INT_MIN,
NF_IP_PRI_CONNTRACK_DEFRAG = -400,
NF_IP_PRI_RAW = -300,
NF_IP_PRI_SELINUX_FIRST = -225,
NF_IP_PRI_CONNTRACK = -200,
NF_IP_PRI_MANGLE = -150,
NF_IP_PRI_NAT_DST = -100,
NF_IP_PRI_FILTER = 0,
NF_IP_PRI_SECURITY = 50,
NF_IP_PRI_NAT_SRC = 100,
NF_IP_PRI_SELINUX_LAST = 225,
NF_IP_PRI_CONNTRACK_HELPER = 300,
NF_IP_PRI_CONNTRACK_CONFIRM = INT_MAX,
NF_IP_PRI_LAST = INT_MAX,
};
3、raw表的特殊作用
raw 表:
可以用于决定是否对数据包进行状态跟踪。
对应的内核模块为:iptable_raw,其表内包括两个链:output、prerouting;
raw表只使用在PREROUTING链和OUTPUT链上,因为优先级最高,从而可以对收到的数据包在系统进行ip_conntrack(连接跟踪)前进行处理。一但用户使用了raw表,在某个链上,raw表处理完后,将跳过NAT表和ip_conntrack处理,即不再做地址转换和数据包的链接跟踪处理了。RAW表可以应用在那些不需要做nat的情况下,以提高性能。
4、raw表优化性能示例
raw 表主要用-j notrack给不需要被连接跟踪的包打标记(UNTRACKED状态),这种让数据包不进入链接跟踪/NAT子系统行为,所以raw表可以用在那些不需要做nat和链接跟踪的情况
示例场景:
RAW表可以应用在那些不需要做nat和链接跟踪的情况,如大量迸发的Web服务,
可以让80端口不再做数据包的链接跟踪,节省iptables处理开销以提高用户的访问速度。
配合-j notrack实现允许规则指定80端口的包不进入链接跟踪/NAT子系统用例:
iptables -t raw -A PREROUTING -d 1.2.3.4 -p tcp --dport 80 -j NOTRACK
iptables -t raw -A PREROUTING -s 1.2.3.4 -p tcp --sport 80 -j NOTRACK
iptables -A FORWARD -m state --state UNTRACKED -j ACCEPT