iptables

iptables 简介

Linux系统提供了iptables用于构建网络防火墙,其能够实现包过滤、网络地址转换(NetworkAddress Translation,NAT)等功能。为iptables提供这些功能的底层模块是netfilter框架(Netfilter项目的官方网站是https://www.netfilter.org)。Linux中的netfilter是内核中的一系列钩子(Hook),它为内核模块在网络栈中的不同位置注册回调函数(Callback Function)提供了支持。数据包在协议栈中依次经过这些在不同位置的回调函数的处理。

iptables 的表和链

1、netfilter钩子与iptables表和链的处理顺序

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

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

·NF_IP_LOCAL_IN:这个钩子在路由判断确定包是发送到本机时执行,如图②所示的阶段。·NF_IP_FORWARD:这个钩子在路由判断是需要转发给其他主机时执行,如图③所示的阶段。

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

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

2、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钩子触发。

3、iptables中有5种表(Table)

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

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

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

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

·security表。提供在数据包中加入SELinux特性的功能。在实际应用中,security一般不常用。

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

iptables 语法及命令

 -t table,是指操作的表,filter、nat、mangle或raw, 默认使用filter

  COMMAND,子命令,定义对规则的管理

  chain, 指明链路

  CRETIRIA, 匹配的条件或标准

  ACTION,操作动作

  例如,不允许10.8.0.0/16网络对80/tcp端口进行访问,

  查看iptables列表

详解COMMAND:

详解匹配标准:

详解-j ACTION

状态检测

SNAT和DNAT的实现

控制规则的存放以及开启

iptables 脚本

1、代码中的规则9明确禁止了所有未被允许的网络访问。这是1.3.4节白名单机制原则的贯彻实践。

2、代码中的规则11明确禁止了主机主动发出外部连接,这可以有效地防范类似“反弹Shell”的攻击。在很多情况下,当主机被黑客入侵后,其留下的后门并不以监听端口的形式接收外部连接,因为在这种情况下,监听很容易被识别出来,也很容易被外部网络设备的防火墙所截获并禁止;相反,这些后门会主动向黑客所控制的外部主机发起网络连接,把被入侵主机的Shell反弹到外部主机上,从而进行反向形式的控制。防止反弹Shell的最有效手段就是禁止本机主动向未被明确信任的外部主机发起连接。

最后更新于

这有帮助吗?