nat表中各条chain的工作流程

在企业实际生产环境中,iptables是非常有用的nat与防火墙工具,它的使用频率远比selinux高得多,我们在工作当中一般都直接将selinux关掉(当然,这是因为selinux防火墙太牛了,而且比较难使用,但是如果你能够定下心来将selinux学好的话,个人感觉你的水平能够上升不止一个台阶),所以,iptables就成为了我们很多方面都需要依赖的工具,下面就来浅谈一下iptables的工作原理与端口转发功能的实现。

     一、netfilter的工作原理


     netfilter的实质是一种内核防火墙架构,可实现安全策略中的许多功能,如数据包过滤与处理,地址伪装,透明代理,动态网络地址转换(NAT),以及基于用户及媒体访问控制(MAC)地址的过滤和基于状态的过滤,包速率限制等。

     那在这里先简单介绍一下netfilter的大致工作流程,即一个数据包在到达linux网络接口(网卡)的时候如何处理这个包,以及如何用iptables控制这个数据包。

     netfilter内部分为三个表,分别为filter,nat,mangle,每个表下面又分为不同的操作链(chains),下面详细介绍。

     1、filter表(过滤):这个表主要用于防火墙的功能,该表中定义了三个链,分别为INPUT、FORWARD、OUTPUT,也就是对包的出入与转发进行定义的三个过滤链。

     2、nat表(网络地址翻译):这个表主要用于实现地址转换和端口转发功能,该表中定义了三个链,分别是PREROUTING,POSTROUTING,以及OUTPUT,下面将会进行详细说明。

     3、mangle表(自定义表):该表中包括filter表与nat表的所有chains,可以进行一些自定义的操作,同时mangle表中的chains在netfilter中对包的处理流程中处于较为优先的位置。


     二、nat表中各条chain的工作流程详解


iptables_netfilter_chains.png











     

    1、PREROUTING(DNAT)

      PREROUTING这个chain在filter表的最前面,当一个数据包来到linux的网络借口的时候首先通过mangle的PREROUTING,然后再通过nat的PREROUTING,而这条链是数据包在过路由之前就要过的。

    在上图中,最上面的菱形部分叫做routing,它就是linux的路由系统(它可以实现策略路由等一些高级特性),而在PREROUTING链中我们对包的操作是DNAT操作(即改变目的地址和端口,通常用在端口转发,或者nat到内网的DMZ区),就是说的当一个包来的时候我们可以用PREROUTING链改变它的目标地址,然后才能进入路由系统。所以PREROUTING这个chain要在routing之前。

        

     2、FORWARD

        当包过了两个PREROUTING链之后(mangle与nat),出现了转折,即图形下方的菱形:FORWARD,转发。在这里有一个对目的地址的判断(所以这里同样告诉我们PREROUTING要放在最前面,要先改变了目标地址之后才能够对目标地址进行判断)。

        如果接受到的包的目标地址是本机的ip,那么包就向上走,进入INPUT链处理,若非本地,就进入FORWARD链过滤,当linux收到一个目标地址非本地的包,,linux会把这个包丢弃,若要打开转发功能,则可使用命令:echo "1"  > /proc/sys/net/ipv4/ip_forward

        打开转发之后,这个数据包将进入FORWARD链,在FORWARD链里,可以定义详细规则(是否允许通过,改变包的方向流程)。


     3、POSTROUTING(SNAT)

        若我们使用ACCEPT放过了这个包,它将进入POSTROUTING部分(如果是转发的话应该要再次进行路由选择再将它送出,此时linux系统已经为这个包选好了路由,找到了合适的借口送出这个包了)。

        在这个链里要进行一个非常重要的动作(称为SNAT),即修改源ip地址!!

       那么Linux如何做SNAT呢?比如一个内网的10.1.1.11的pc访问202.2.2.2的一个web服务器,

linux的内网接口10.1.1.1在收到这个包之后把原来的 PC的 ip10.1.1.11改变为60.1.1.1的合法地址然

后送出,同时在自己的ip_conntrack表里面做一个记录,记住是内网的哪一个ip的哪 个端口访问的这个

web服务器,自己把它的源地址改成多少了,端口改成多少了,以便这个web服务器返回数据包的时候

linux将它准确的送回给发送请求 的这个pc.

        

        到此概念大体说完。




文章出处:http://wwdhks.blog.51cto.com/839773/1154032

本文转自奇迹的少年博客51CTO博客,原文链接http://blog.51cto.com/raffaelexr/1710171如需转载请自行联系原作者

liliangchun
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值