Chinaunix首页 | 论坛 | 博客
  • 博客访问: 72422
  • 博文数量: 16
  • 博客积分: 1435
  • 博客等级: 上尉
  • 技术积分: 215
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-14 10:29
文章分类
文章存档

2011年(1)

2010年(5)

2009年(10)

我的朋友

分类: LINUX

2009-03-14 10:58:03

iptables 里面分三大表:
 
1 nat  nat表的主要用处是网络地址转换,即Network Address Translation,缩写为NAT
2 mangle  这个表主要用来mangle数据包。我们可以改变不同的包及包头的内容,比如 TTL,TOS或MARK。注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如tc)可以使用这种标记对包进行过滤或高级路由。
 
3 filter  filter表是专门过滤包的,内建三个链,可以毫无问题地对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。
 
我大部分主要还是用: nat 和 filter
 
DNAT target :

这个target是用来做目的网络地址转换的,就是重写包的目的IP地址。如果一个包被匹配了,那么和它属于同一个流的所有的包都会被自动转换,然后就可以被路由到正确的主机或网络。DNAT target是非常有用的。比如,你的Web服务器在LAN内部,而且没有可在Internet上使用的真实IP地址,那就可以使用这个 target让防火墙把所有到它自己HTTP端口的包转发给LAN内部真正的Web服务器。目的地址也可以是一个范围,这样的话,DNAT会为每一个流随机分配一个地址。因此,我们可以用这个target做某种类型地负载平衡。

注意,DANT target只能用在nat表的PREROUTING和OUTPUT链中,或者是被这两条链调用的链里。但还要注意的是,包含DANT target的链不能被除此之外的其他链调用,如POSTROUTING。

SNAT target

这个target是用来做源网络地址转换的,就是重写包的源IP地址。当我们有几个机子共享一个Internet 连接时,就能用到它了。先在内核里打开ip转发功能,然后再写一个SNAT规则,就可以把所有从本地网络出去的包的源地址改为Internet连接的地址了。如果我们不这样做而是直接转发本地网的包的话,Internet上的机子就不知道往哪儿发送应答了,因为在本地网里我们一般使用的是IANA组织专门指定的一段地址,它们是不能在Internet上使用的。SNAT target的作用就是让所有从本地网出发的包看起来都是从一台机子发出的,这台机子一般就是防火墙。

SNAT只能用在nat表的POSTROUTING链里。只要连接的第一个符合条件的包被SNAT了,那么这个连接的其他所有的包都会自动地被SNAT,而且这个规则还会应用于这个连接所在流的所有数据包。

 

POSTROUTING链

我们最后的任务应该是构造网络地址转换,对吧?至少对我来说是的。我们在nat表的 POSTROUTING里只加入了一条规则,它会对所有从Internet接口(对我来说,这是eth0)发出的包进行NAT操作。在所有的例子脚本里,都有一些变量,它们要给以正确的配置。选项-t指定要在那个表里插入规则,这里是nat表。命令-A说明我们要把规则添加到 POSTROUTING链末尾。-o $INET_IFACE指定要匹配所有从接口INET_IFACE出去的包,这里我们使用的是eth0。最后,我们把target设置为SNAT。这样,所有匹配此规则的包都会由SNAT target处理,之后,它们的源地址就是Internet接口的地址了。不要忘了SNAT可是一定要有IP地址的,用--to-source 来设置哦。

PREROUTING链

顾名思义,PREROUTING链(nat表的)是在路由之前做网络地址转换工作的。然后,包再经过路由,就会被送到filter表的INPUTFORWARD链。我们在这里讨论这个链的唯一原因是,我们觉得有责任再次指出你不应该在此链中做任何过滤。PREROUTING链只会匹配流的第一个包,也就是说,这个流的所有其他的包都不会被此链检查。事实上,在这个脚本中,我们根本没有用到PREROUTING 链。如果你想对一些包做DNAT操作,例如,你把web server放在了局域网内,这里就是你放置规则的地方。有关PREROUTING链的详细信息在章节中。

iptables -L命令还可以查看nat表和mangle表的内容哦
iptables -L -t nat
cat /proc/net/ip_conntrack | less

iptables -F -t nat  (清除NAT 表)

iptables --list查看过滤表
新的规则存盘

  ./iptables save
 在/proc/net/ip_conntrack文件里有包的流向

 

阅读(482) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~