iptables入门:iptables构架、基本命令及扩展(功能)简介

作者: lesca 分类: iptables,Network,Tutorials,Ubuntu,Web 发布时间: 2011-06-03 15:34

一、iptables构架


图:iptables构架

  • IP INPUT:
    只有要到达本机的封包才会由INPUT 函式处理,所以会让来自内部网路的封包无条件放行,来自​​外部网路的封包则过滤是否为回应封包,若是则放行。
  • PREROUTING:
    需要转送处理的封包由此函式负责处理,此函式用来做目的地IP 的转译动作(DNAT)。
  • IP FORWARD:
    所有转送封包都在这里处理,这部分的过滤规则最复杂。
  • POSTROUTING:
    转送封包送出之前,先透过这个函式进行来源IP 的转译动作(SNAT)。
  • IP OUTPUT:
    从本机送出去的封包由这个函式处理,通常会放行所有封包。


注:有关SNAT、DNAT的区别请参见iptables: SNAT, DNAT, MASQUERADE的联系与区别

图:iptables过滤流程假想图

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

透过这种机制所带来的好处是,我们可以进行复杂、多重的封包过滤,简单的说,iptables 可以进行纵横交错式的过滤(tables)而非链状过滤(chains)。

二、使用iptables进行数据报选择

一个基于Netfilter框架的、称为iptables的数据报选择系统在Linux2.4内核中被应用,其实它就是ipchains的后继工具,但却有更强的可扩展性。内核模块可以注册一个新的规则表(table),并要求数据报流经指定的规则表。这种数据报选择用于实现数据报过滤(filter表),网络地址转换(Nat表)及数据报处理(mangle表)。

Linux2.4内核提供的这三种数据报处理功能都基于netfilter的钩子函数和IP表。它们是独立的模块,相互之间是独立的。它们都完美的集成到由Netfileter提供的框架中。

1.包过滤

filter表格不会对数据报进行修改,而只对数据报进行过滤。iptables优于ipchains的一个方面就是它更为小巧和快速。它是通过钩子函数NF_IP_LOCAL_IN, NF_IP_FORWARD及NF_IP_LOCAL_OUT接入netfilter框架的。因此对于任何一个数据报只有一个地方对其进行过滤。这相对ipchains来说是一个巨大的改进,因为在ipchains中一个被转发的数据报会遍历三条链。

2.NAT

NAT表格监听三个Netfilter钩子函数:NF_IP_PRE_ROUTING、NF_IP_POST_ROUTING及NF_IP_LOCAL_OUT。 NF_IP_PRE_ROUTING实现对需要转发的数据报的源地址进行地址转换而NF_IP_POST_ROUTING则对需要转发的数据包的目的地址进行地址转换。对于本地数据报的目的地址的转换则由NF_IP_LOCAL_OUT来实现。
NAT表格不同于filter表格,因为只有新连接的第一个数据报将遍历表格,而随后的数据报将根据第一个数据报的结果进行同样的转换处理。
NAT表格被用在源NAT,目的NAT,伪装(其是源NAT的一个特例)及透明代理(其是目的NAT的一个特例)。

3.数据报处理(Packet mangling)

mangle表格在NF_IP_PRE_ROUTING和NF_IP_LOCAL_OUT钩子中进行注册。使用mangle表,可以实现对数据报的修改或给数据报附上一些带外数据。当前mangle表支持修改TOS位及设置skb的nfmard字段。

三、iptables基本操作

在第一、第二部分已经介绍过,filter表和三个钩子进行了挂接,因此提供了三条链进行数据过滤。所有来自于网络,并且发给本机的数据报会遍历INPUT规则链。所有被转发的数据报将仅仅遍历FORWARD规则链。最后,本地发出的数据报将遍历OUTPUT链。

Linux2.4提供了一个简洁强大的工具”iptables”来插入/删除/修改规则链中的规则。这里并不对iptalbes进行详细的介绍,而只是讨论它的主要的一些特性:

  • 该命令实现对所有的ip表进行处理,当前包括filter,nat及mangle三个表格,及以后扩展的表模块。
  • 该命令支持插件来支持新的匹配参数和目标动作。
    因此对netfilter的任何扩展都非常的简单。仅仅需要编写一个完成实际目标动作处理的模块和iptalbes插件(动态连接库)来添加所需要的一切。
  • 它有两个实现:iptables(IPV4)及ip6tables。
    两者都基于相同的库和基本上相同的代码。

1.基本的iptables命令

一个iptables命令基本上包含如下五部分:

  1. 希望工作在哪个表上
  2. 希望使用该表的哪个链
  3. 进行的操作(插入,添加,删除,修改)
  4. 对特定规则的目标动作
  5. 匹配数据报条件

2.基本的语法

iptables -t table -Operation chain -j target match(es) 

例如希望添加一个规则,允许所有从任何地方到本地smtp端口的连接:

iptables -t filter -A INPUT -j ACCEPT -p tcp --dport smtp

当然,还有其他的对规则进行操作的命令如:清空链表,设置链缺省策略,添加一个用户自定义的链….

  • 基本操作
  • -A 在链尾添加一条规则
    -I 插入规则
    -D 删除规则
    -R 替代一条规则
    -L 列出规则

  • 基本目标动作(适用于所有的链)
  • ACCEPT 接收该数据报
    DROP 丢弃该数据报
    QUEUE 排队该数据报到用户空间
    RETURN 返回到前面调用的链
    foobar 用户自定义链

  • 基本匹配条件(适用于所有的链)
  • -p 指定协议(tcp/icmp/udp/…)
    -s 源地址(ip address/masklen)
    -d 目的地址(ip address/masklen)
    -i 数据报输入接口
    -o 数据报输出接口

    四、iptables的数据报过滤期间的扩展简介

    1.数据报过滤匹配条件扩展

    各种各样的数据包过滤匹配条件扩展用于数据包过滤,这里简单的说明来让你感受扩展匹配的强大之处。这些匹配扩展给了我们强大的数据报匹配手段:

    • TCP匹配扩展
      能匹配源端口,目的端口,及tcp标记的任意组合,tcp选项等。
    • UPD匹配扩展
      能匹配源端口和目的端口
    • ICMP匹配扩展
      能匹配ICMP类型
    • MAC匹配扩展
      能匹配接收到的数据的mac地址
    • MARK匹配扩展
      能匹配nfmark
    • OWNE匹配扩展
      仅仅应用于本地产生的数据报,用来匹配用户ID,组ID,进程ID及会话ID
    • LIMIT匹配扩展
      用来匹配特定时间段内的数据报限制。这个扩展匹配对于限制dos攻击数据流非常有用。
    • STATE匹配扩展
      匹配特定状态下的数据报(由连接跟踪子系统来决定状态)可能的状态包括:
      • INVALID (不匹配于任何连接)
      • ESTABLISHED (属于某个已经建立的链接的数据报)
      • NEW (建立连接的数据报)
      • RELATED (和某个已经建立的连接有一定相关的数据报,例如一个ICMP错误消息或ftp数据连接)
      • TOS匹配扩展用来匹配IP头的TOS字段的值。

    2.数据报过滤目标动作扩展

    • LOG 将匹配的数据报传递给syslog()进行记录
    • ULOG 将匹配的数据适用用户空间的log进程进行记录
    • REJECT 不仅仅丢弃数据报,同时返回给发送者一个可配置的错误信息
    • MIRROR 互换源和目的地址以后重新传输该数据报

    Refrences

    以上内容摘录、提炼自互联网各论坛,原文已无从找到。
    [1] UNIX Resource Network
    [2] 使用 iptables 建置 Linux 防火牆 该网站可能存在威胁您计算机安全的代码

    版权声明

    本文出自 Lesca 技术宅,转载时请注明出处及相应链接。

    本文永久链接: https://www.lesca.cn/archives/iptables-architecture-commands-extensions.html

    如果觉得我的文章对您有用,请随意赞赏。您的支持将鼓励我继续创作!