Linux系统安全:纵深防御、安全扫描与入侵检测
上QQ阅读APP看书,第一时间看更新

2.2.1 理解iptables表和链

netfilter钩子与iptables表和链的处理顺序如图2-1所示。

图2-1 netfilter钩子与iptables表和链的处理顺序

netfilter有5个钩子可以提供程序去注册。在数据包经过网络栈的时候,这些钩子上注册的内核模块依次被触发。这5个钩子的处理时间如下。

·NF_IP_PRE_ROUTING:在数据流量进入网络栈后立即被触发,这个钩子上注册的模块在路由决策前即被执行,如图2-1中①所示的阶段。

·NF_IP_LOCAL_IN:这个钩子在路由判断确定包是发送到本机时执行,如图2-1中②所示的阶段。

·NF_IP_FORWARD:这个钩子在路由判断是需要转发给其他主机时执行,如图2-1中的③所示的阶段。

·NF_IP_LOCAL_OUT:这个钩子在本机进程产生的网络被送到网络栈上时执行,如图2-1中④所示的阶段。

·NF_IP_POST_ROUTING:这个钩子在数据包经过路由判断即将发送到网络前执行,如图2-1中⑤所示的阶段。

iptables中有以下5个链(Chain)。

·PREROUTING:NF_IP_PRE_ROUTING钩子触发。

·INPUT:NF_IP_LOCAL_IN钩子触发。

·FORWARD:NF_IP_FORWARD钩子触发。

·OUTPUT:NF_IP_LOCAL_OUT钩子触发。

·POSTROUTING:NF_IP_POST_ROUTING钩子触发。

iptables中有5种表(Table):

·filter表。iptables中使用最广泛的表,作用是进行过滤,也就是由filter表来决定一个数据包是否继续发往它的目的地址或者被拒绝丢弃。

·nat表。顾名思义,nat表用于网络地址转换,可以改变数据包的源地址或者目的地址。

·mangle表。用于修改IP的头部信息,如修改TTL(Time to Live)。

·raw表。为iptables提供了一种不经过状态追踪的机制,在大流量对外业务的服务器上使用这个表可以避免状态追踪带来的性能问题。

·security表。提供在数据包中加入SELinux特性的功能。在实际应用中,security一般不常用,因此在下面的章节中不再包含这一部分内容。

通过以上分析,我们知道netfilter仅仅有5个钩子,而iptables有5个链和5种表,由此可见在一个钩子上可能有多个表的不同链需要处理,如图2-1中的raw表、mangle表、filter表都有POSTROUTING链,这些不同表中的链根据自己向内核注册时的优先级(priority)依次处理。