Linux之安全iptables详解

  linux干货, 信息安全

 

Linux之安全iptables详解一、【IPtables概述】

Linux之安全iptables详解

谈到iptables,其实它并不是一个单独的个体,它是 netfilter/iptables IP 信息包过滤系统 中两个组件 netfilter iptables的其中一个。Netfilter是由Rusty Russell提出的Linux 2.4 内核防火墙框架,该框架简洁灵活,可实现安全策略应用中的许多功能,如:数据包过 滤、数据包处理、地址伪装、透明代理、动态网络地址转换(Network Address TranslationNAT),以及基于用户及媒体访问控制(Media Access ControlMAC)地址 的过滤和基于状态的过滤、包速率限制等。netfilter/iptables IP 数据包过滤系统是一 款功能强大的工具,可用于添加、编辑和移除规则。我们也常称其为:包过滤防火墙。

IPTABLES 是与最新的 3.5 版本 Linux 内核集成的 IP 信息包过滤系统,该系统有利于 Linux 系统上更好地控制 IP 信息包过滤和防火墙配置。防火墙在做数据包过滤决定时, 有一套遵循和组成的规则,这些规则存储在专用的数据包过滤表中,而这些表集成在 Linux 内核中。在数据包过滤表中,规则被分组放在我们所谓的链(chain)中。

netfilter 组件也称为内核空间(kernelspace),是内核的一部分,是该包过滤系统中真 正的安全框架(framework),由一些信息包过滤表组成,这些表包含内核用来控制信息 包过滤处理的规则集,是Linux操作系统内核的一个数据包处理模块。

iptables 组件是一种工具,也称为用户空间(userspace),可通过命令行插入、修改和 删除包过滤表中的规则。除非您正在使用 Red Hat Linux 7.1 或更高版本,否则需要下载该 工具并安装使用它。我们用iptables命令行工具操作netfilter安全框架。因此,要明白,所 以的操作结果都在net filter中,它才是真正的防火墙,而iptables只是操作这一过程的工 具。

Linux之安全iptables详解

netfilter/iptables 的最大优点是它可以配置有状态的防火墙,有状态的防火墙能够指定并记 住为发送或接收信息包所建立的连接的状态。防火墙可以从信息包的连接跟踪状态获得该 信息。在决定新的信息包过滤时,防火墙所使用的这些状态信息可以增加其效率和速度。 这里有四种有效状态,名称分别为 ESTABLISHED INVALID NEW RELATED

ESTABLISHED :指出该信息包属于已建立的连接,该连接一直用于发送和接收信息包 并且完全有效。只要发送并接到应答,一个数据连接从NEW变为ESTABLISHED,而且该状 态会继续匹配这个连接的后续数据包。

INVALID状态: 指出该信息包与任何已知的流或连接都不相关联,它可能包含错误的数 据或头。数据包不能被识别属于哪个连接或没有任何状态比如内存溢出,收到不知属于哪 个连接的ICMP错误信息,一般应该DROP这个状态的任何数据。

NEW状态: 该信息包已经或将启动新的连接,或者它与尚未用于发送和接收信息包的连 接相关联。

RELATED状态: 表示该信息包正在启动新连接,以及它与已建立的连接相关联。例 如:FTP的数据传输连接就是控制连接所 RELATED出来的连接。–icmp-type 0 ( ping 应 答) 就是–icmp-type 8 (ping 请求)RELATED出来的。

Linux之安全iptables详解
二、【iptables之四表五链】

Linux之安全iptables详解

Linux之安全iptables详解

Netfilter 框架/模块中指定了数据包的五个挂载点(Hook Point,我们可以理解为回调 函数点,数据包到达这些位置的时候会主动调用我们的函数,使我们有机会能在数据包 路由的时候改变它们的方向、内容),这5个挂载点分别是PRE_ROUTINGINPUTOUTPUTFORWARDPOST_ROUTING

INPUT 当接收到防火墙本机地址的数据包(入站)时

OUTPUT 当防火墙本机向外发送数据包(出站)时

FORWARD 当接收到需要通过防火墙发送给其他地址的数据包(转发)时

PRE_ROUTING 在对数据包作路由选择之前,应用此链中的规则 POST_ROUTING 在对数据包作路由选择之后,应用此链中的规则

   Netfilter 所设置的规则是存放在内核内存中的,而 iptables 是一个应用层的应用程序, 它通过 Netfilter 开放的接口来对存放在内核内存中的 各种内建tablesNetfilter的配置 表)进行修改。这些个tables由表tables、链chains、规则rules组成,iptables在应用层负 责修改这个规则文件。类似的应用程序还有 firewalld

Linux之安全iptables详解

相关资料:官网

Linux之安全iptables详解
三、【数据包处理示意】

Linux之安全iptables详解

Linux之安全iptables详解

Linux之安全iptables详解

关于 filternatmangle等规则表说明】:

filter表: 主要用于对数据包进行过滤,根据具体的规则决定是否放行该数据包(如 DROPACCEPTREJECTLOG)。filter 表对应的内核模块为iptable_filter,包含三 个规则链:

INPUT链: INPUT针对那些目的地是本地的包

FORWARD链: FORWARD过滤所有不是本地产生的并且目的地不是本地(即本机只是 负责转发)的包,即:源和目的都不是本地的数据包,只负责转发改包到别的服务器。 OUTPUT链: OUTPUT是用来过滤所有本地生成的包

   Nat表: 主要用于修改数据包的IP地址、端口号等信息(网络地址转换,如SNATDNATMASQUERADEREDIRECT)。属于一个流的包(因为包的大小限制导致数据可 能会被分成多个数据包)只会经过这个表一次。如果第一个包被允许做NATMasqueraded,那么余下的包都会自动地被做相同的操作,也就是说,余下的包不会再通 过这个表。表对应的内核模块为 iptable_nat,包含三个链:

PREROUTING链: 作用是在包刚刚到达防火墙时改变它的目的地址, OUTPUT链: 改变本地产生的包的目的地址—–POSTROUTING链:在包就要离开防火墙之前改变其源地址

Mangle表: 主要用于修改数据包的TOSType Of Service,服务类型)、TTLTime To Live,生存周期)指以及为数据包设置Mark标记,以实现Qos(Quality Of Service,服 务质量)调整以及策略路由等应用,由于需要相应的路由设备支持,因此应用并不广泛。 包含五个规则链——PREROUTINGPOSTROUTINGINPUTOUTPUTFORWARD

raw表: 是自1.2.9以后版本的iptables新增的表,主要用于决定数据包是否被状态跟踪机 制处理。在匹配数据包时,raw表的规则要优先于其他表。包含两条规则链—— OUTPUTPREROUTING

优先级:raw>mangle>Nat>filter

Linux之安全iptables详解

Linux之安全iptables详解四、iptables工作原理:主要是对数据包的控制

首先说下防火墙中链的概念,防火墙是通过各种规则来匹配过滤ip包的;从而触发相应的 操作,对数据包执行处理,而多个规则串起来就可以形成一类规则,这就是链。防火墙 在处理各种数据包时,根据防火墙规则的不同介入时机,iptables涉及5种默认规则链,结 合数据流匹配时间点的不同,可理解如下:

INPUT链: 当接收到防火墙本机地址的数据包(入站)时,应用此链中的规则。 OUTPUT链: 当防火墙本机向外发送数据包(出站)时,应用此链中的规则。 FORWARD链: 当接收到需要通过防火墙发送给其他地址的数据包(转发)时,应用此 链中的规则。

PREROUTING链: 在对数据包作路由选择之前,应用此链中的规则,如DNATPOSTROUTING链: 在对数据包作路由选择之后,应用此链中的规则,如SNAT

Linux之安全iptables详解

INPUTOUTPUT链更多的应用在主机防火墙中,即主要针对服务器本机进出数据的安 全控制;而FORWARDPREROUTINGPOSTROUTING链更多的应用在**“网络防火墙 **”中,特别是防火墙服务器作为网关使用时的情况。

防火墙处理数据包的方式(规则):

**ACCEPT**允许数据包通过

**DROP**直接丢弃数据包,不给任何回应信息 REJECT:拒绝数据包通过,必要时会给数据发送 一个响应的信息。 **SNAT**源地址转换。在进入路由层面的route之前,重新改写源地址,目标地址不 变,并在本机建立NAT表项,当数据返回时,根据NAT表将目的地址数据改写为数据发送 出去时候的源地址,并发送给主机。解决内网用户用同一个公网地址上网的问题。 **MASQUERADE**SNAT的一种特殊形式,适用于像adsl这种临时会变的ip**DNAT:**目标地址转换。和SNAT相反,IP包经过route之后、出本地的网络栈之前,重 新修改目标地址,源地址不变,在本机建立NAT表项,当数据返回时,根据NAT表将源地 址修改为数据发送过来时的目标地址,并发给远程主机。可以隐藏后端服务器的真实地

址。

REDIRECT DNAT的一种特殊形式,将网络包转发到本地host上(不管IP头部指定 的目标地址是啥),方便在本机做端口转发。 **LOG**/var/log/messages文件中记录日志信息,然后将数据包传递给下一条规则  除去最后一个LOG,前3条规则匹配数据包后,该数据包不会再往下继续匹配了,所以编 写的规则顺序极其关键.

Linux之安全iptables详解

 当一个数据包进入网卡时,数据包首先进入PREROUTING链,在PREROUTING链中我 们有机会修改数据包的DestIP(目的IP),然后内核的路由模块根据数据包目的IP”以 及内核中的路由表判断是否需要转送出去(注意,这个时候数据包的DestIP有可能已经被 我们修改过了) 如果数据包就是进入本机的(即数据包的目的IP是本机的网口IP),数据包就会沿着图向下 移动,到达INPUT链。数据包到达INPUT链后,任何进程都会收到它 本机上运行的程序也可以发送数据包,这些数据包经过OUTPUT链,然后到达 POSTROTING链输出(注意,这个时候数据包的SrcIP有可能已经被我们修改过了) 如果数据包是要转发出去的(即目的IP地址不再当前子网中),且内核允许转发,数据包就 会向右移动,经过FORWARD链,然后到达POSTROUTING链输出(选择对应子网的网口 发送出去)

Linux之安全iptables详解

注:在写iptables规则的时候,要时刻牢记这张路由次序图,根据所在Hook点的不同,灵 活配置规则;规则表之间的优先顺序:

Linux之安全iptables详解 Raw——mangle——nat——>filter 规则链之间的优先顺序(分三种情况):

第一种情况:入站数据流向

从外界到达防火墙的数据包,先被PREROUTING规则链处理(是否修改数据包地址 等),之后会进行路由选择(判断该数据包应该发往何处),如果数据包 的目标主机是防 火墙本机(比如说Internet用户访问防火墙主机中的web服务器的数据包),那么内核将其 传给INPUT链进行处理(决定是否允许通 过等),通过以后再交给系统上层的应用程序 (比如Apache服务器)进行响应。

第二冲情况:转发数据流向

来自外界的数据包到达防火墙后,首先被PREROUTING规则链处理,之后会进行路由选 择,如果数据包的目标地址是其它外部地址(比如局域网用户通过网 关访问QQ站点的数 据包),则内核将其传递给FORWARD链进行处理(是否转发或拦截),然后再交给 POSTROUTING规则链(是否修改数据包的地 址等)进行处理。

第三种情况:出站数据流向

防火墙本机向外部地址发送的数据包(比如在防火墙主机中测试公网DNS服务器时),首 先被OUTPUT规则链处理,之后进行路由选择,然后传递给POSTROUTING规则链(是否 修改数据包的地址等)进行处理。

Linux之安全iptables详解

iptables是采用规则堆栈的方式来进行过滤,当一个封包进入网卡,会先检查 Prerouting, 然后检查目的IP判断是否需要转送出去,接着就会跳到INPUT Forward 进行过滤,如果 封包需转送处理则检查 Postrouting,如果是来自本机封包,则检查 OUTPUT 以及 Postrouting。过程中如果符合某条规则将会进行处理,处理动作除了 ACCEPTREJECTDROPREDIRECT MASQUERADE 以外,还多出 LOGULOGDNATSNATMIRRORQUEUERETURNTOSTTLMARK等,其中某些处理动作不会 中断过滤程序,某些处理动作则会中断同一规则链的过滤,并依照前述流程继续进行下一 个规则链的过滤(注意:这一点与ipchains不同),一直到堆栈中的规则检查完毕为止。

透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非链状过滤(chains)。ACCEPT 将封包放行,进 行完此处理动作后,将不再比对其它规则,直接跳往下一个规则链(nat:postrouting)。

下图为数据经过防火墙时,真个数据流在IPtables侧的处理流程示意图: