FAQ:
1、netfilter/iptables关系: 简单的说就是,iptables像一个命令一样,把我输入的东西传给netfilter,netfilter属于内核的,把iptables的东西做处理。
2、规则表和规则链:在防火墙中有有多个规则表,每个表格定义各自的预设政策,所以对应的每个规则表的作用不同。默认情况下linux系统预设的规则表有三个。管理员可以自定义规则表。 filter规则表主要是管理本机进出的,nat规则表是管理后端(内部)机器的,mangle规则表是用来对封装的数据包进行特殊标记的。用下面的关系对关系的说明:
  • filter∶主要跟 Linux 本机有关!
    • INPUT∶主要与封包想要进入我们 Linux 本机有关;
    • OUTPUT∶主要与我们 Linux 本机所要送出的封包有关;
    • FORWARD∶这个规则链与 Linux 本机关系不大,他可以封包『转递』到后端的电脑中,与 nat 表 相关性很高。

nat∶这个表格主要在用作来源与目的之 IP 或 port 的转换, 与 Linux 本机较无关,主要与 Linux 主机后的区域网路内的电脑有相关。
  • PREROUTING∶在进行路由判断之前所要进行的规则(DNAT/REDIRECT)
  • POSTROUTING∶在进行路由判断之后所要进行的规则(SNAT/MASQUERADE)
  • OUTPUT∶与发送出去的封包有关

mangle∶这个表格主要是与特殊的封包的路由标记有关, 早期仅有 PREROUTING 及 OUTPUT 链,不过从 kernel 2.4.18 之后加入了 INPUT 及 FORWARD 链。 由于这个表格与特殊旗标相关性较高,所以像咱们这种单纯的环境当中,较少使用 mangle 这个表格。
iptables默认具有5条规则链:PREROUTING、POSTROUTING、FORWARD、INPUT、OUTPUT
iptables默认的规则表以及对应的规则链:
filter:INPUT、FORWARD和OUTPUT。
nat:PREROUTING、POSTROUTING和OUTPUT。
mangle:PREROUTING、POSTROUTING、INPUT、OUTPUT和FORWARD。
nat的主要用处是网络地址转换,即Network Address Translation,缩写为NAT。做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这个表一 次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个的被 NAT,而是自动地完成。这就是我们为什么不应该在这个表中做任何过滤的主要原因,对这一点,后面会有更加详细的讨论。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,如果需要的话。OUTPUT链改变本地产生的包的目的地址。POSTROUTING链在包就要离开防火 墙之前改变其源地址。
 
mangle主要用来mangle数据包。我们可以改变不同的包及包头的内容, 比如 TTL,TOS或MARK。注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如tc)可以使用这种 标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTING,POSTROUTING, OUTPUT,INPUT和 FORWARD。PREROUTING在包进入防火墙之后、路由判断之前改变包,POSTROUTING是在所有路由判断之后。 OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判断之 后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的 TTL,TOS或MARK,而不是其源目地址。NAT是在nat表中操作的。
 
filter是专门过滤包的,内建三个链,可以毫无问题地对包进行DROP、 LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。

      
iptables学习笔记-案例学习
案例来自
http://dreamfire.blog.51cto.com/418026/168677

Linux--netfilter/iptables+squid综合案例分析