《Linux系统安全:纵深防御、安全扫描与入侵检测 》 —2.2 利用iptables构建网络防火墙
2.2 利用iptables构建网络防火墙
Linux系统提供了iptables用于构建网络防火墙,其能够实现包过滤、网络地址转换(Network Address Translation,NAT)等功能。为iptables提供这些功能的底层模块是netfilter框架(Netfilter项目的官方网站是https://www.netfilter.org)。Linux中的netfilter是内核中的一系列钩子(Hook),它为内核模块在网络栈中的不同位置注册回调函数(Callback Function)提供了支持。数据包在协议栈中依次经过这些在不同位置的回调函数的处理。
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)依次处理。
- 点赞
- 收藏
- 关注作者
评论(0)