当前位置: 首页 > GNU/Linux, Linux系统, 安全工具, 网络安全 > 正文

iptables学习笔记(1)

1. 关于iptables:

关于iptables的准确定义,这里可以参考[维基百科] :

iptables,一个运行在用户空间的应用软件,通过控制Linux内核netfilter模块,来管理网络数据包的流动与转送。在大部分的Linux系统上面,iptables是使用/usr/sbin/iptables来操作,文件则放置在手册页(Man page[2])底下,可以通过 man iptables 指令获取。通常iptables都需要内核层级的模块来配合运作,Xtables是主要在内核层级里面iptables API运作功能的模块。因相关动作上的需要,iptables的操作需要用到超级用户的权限。

2. 关于Netfilter:

Netfilter是Linux操作系统核心层内部的一个数据包处理模块,它具有如下功能:

A. 网络地址转换(Network Address Translate)

B. 数据包内容修改

C. 以及数据包过滤的防火墙功能

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

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

iptables-netfilter

3. 关于网络数据包的流向:

在Xtables的架构下,是通过上面定义的这种“表(tables)”、“链(chain)”、“规则(rules)”三个数据来处理数据包的运送。

这个方案中:每一个“表”都和不同的数据包处理有关,“链”决定数据包是否可以穿越,而一条“规则”在键里面则可以决定是否送往下一条链(或其它的动作),这个处理可以在嵌套的结构里面重复使用。每一个网络数据包从抵达到离开该电脑至少会经过一个链(亦即转送或本机路由)。

首先,根据数据包的来源决定它应该穿过哪一个链。在iptables的架构预先在过滤器(filter)里头定义了三个键:INPUT(输入)、OUTPUT(输出)、FORWARD(转发)。预定义的链存在一个默认的”policy”(策略),当数据包历经规则后仍没有符合的项目时,将使用这个”policy”来进行操作。如果数据包到到这些链之后仍然没有符合的项目,就会回到前一个调用它的链。

当数据包穿过一个链时,将根据链中的规则进行依序检查。如果数据包与当前规则不相符,那么这个数据包会被传到下一个规则计算,如果与规则相符的话,就会开始运行规则里头由target制定的动作,这个动作会决定这个数据包要不要在这个链里头继续运作。

也就是说,当数据包穿过链时,会存在下面这三种情况:

A. 当有规则与数据包参数相匹配时,将根据规则处理这个数据包,像是”ACCEPT”(接受)或是”DROP”(丢弃)。

B. 当有规则调用RETURN target时,则会回归到上一层调用的链里头。

C. 当没有规则与之相符时,则会到达这个链的最底层。(视有无默认政策来决定是否采用默认政策或回归上一层调用的链)

下面是摘自维基百科的经典图,我将在下一篇blog中详细分析iptables的工作原理。

Netfilter

参考资料:

1. iptables防火墙原理详解:

http://seanlook.com/2014/02/23/iptables-understand/

2. 维基百科:

https://zh.wikipedia.org/wiki/Iptables



这篇博文由 s0nnet 于2016年01月08日发表在 GNU/Linux, Linux系统, 安全工具, 网络安全 分类下, 通告目前不可用,你可以至底部留下评论。
如无特别说明,独木の白帆发表的文章均为原创,欢迎大家转载,转载请注明: iptables学习笔记(1) | 独木の白帆
关键字: ,
【上一篇】【下一篇】

iptables学习笔记(1):等您坐沙发呢!

发表评论

快捷键:Ctrl+Enter