netfilter与iptables

netfilter

what?

  (1) Netfilter是Rusty Russell提出的Linux 2.4 内核防火墙框架,框架既简介又灵活,可实现安全策略的很多功能,如DNAT、SNAT、数据包过滤,数据包处理等等。
  (2) Netfilter与IP协议栈的关系:Netfilter是嵌入内核IP协议栈的一系列调用入口,设置在报文处理的路径上。Linux网络内核内置了5条链PREROUTING、INPUT、FORWARD、OUTPUT、POSTROUTING, 其实就是在内核的五个位置嵌入了NF_HOOK函数,然后通过NF_HOOK进入Netfilter框架处理(进入不同的钩子函数)。
  (3)与Netfilter的五个钩子
  在内核协议栈中,有5个跟netfilter有关的钩子,数据包经过每个钩子时,都会检查上面是否注册有函数,如果有的话,就会调用相应的函数处理该数据包,它们的位置见下图:

         |
         | Incoming
         ↓
+-------------------+
| NF_IP_PRE_ROUTING |
+-------------------+
         |
         |+------------------+
|                  |         +----------------+
| routing decision |-------->| NF_IP_LOCAL_IN |
|                  |         +----------------+
+------------------+                 |
         |                           |
         ||                  +-----------------+
         |                  | local processes |
         |                  +-----------------+
         |                           |
         |                           |
         ↓                           ↓
 +---------------+          +-----------------+
 | NF_IP_FORWARD |          | NF_IP_LOCAL_OUT |
 +---------------+          +-----------------+
         |                           |
         |                           ||
+------------------+                 |
|                  |                 |
| routing decision |<----------------+
|                  |
+------------------+
         |
         |+--------------------+
| NF_IP_POST_ROUTING |
+--------------------+
         |
         | Outgoing
         ↓

从上面的流程中,我们还可以看出,不考虑特殊情况的话,一个数据包只会经过下面三个路径中的一个:

本机收到目的IP是本机的数据包: NF_IP_PRE_ROUTING -> NF_IP_LOCAL_IN

本机收到目的IP不是本机的数据包: NF_IP_PRE_ROUTING -> NF_IP_FORWARD ->
NF_IP_POST_ROUTING

本机发出去的数据包: NF_IP_LOCAL_OUT -> NF_IP_POST_ROUTING

注意: netfilter所有的钩子(hooks)都是在内核协议栈的IP层,由于IPv4和IPv6用的是不同的IP层代码,所以iptables配置的rules只会影响IPv4的数据包,而IPv6相关的配置需要使用ip6tables。

  

iptables

what?

  iptables是用户态下的命令行前台,用于操作netfilter.netfilter真正完成内核态下的数据包的处理。
  iptables用表(table)来分类管理它的规则(rule),根据rule的作用分成了好几个表,比如用来过滤数据包的rule就会放到filter表中,用于处理地址转换的rule就会放到nat表中,其中rule就是应用在netfilter钩子上的函数,用来修改数据包的内容或过滤数据包。
在这里插入图片描述

链接
http://wiki.dreamrunner.org/public_html/Linux/Networks/netfilter.html
https://www.ibm.com/developerworks/cn/linux/l-ntflt/
https://segmentfault.com/a/1190000009043962

扫描二维码关注公众号,回复: 8647714 查看本文章
发布了87 篇原创文章 · 获赞 28 · 访问量 9万+

猜你喜欢

转载自blog.csdn.net/shuzishij/article/details/103976849
今日推荐