Chinaunix首页 | 论坛 | 博客
  • 博客访问: 690300
  • 博文数量: 214
  • 博客积分: 5015
  • 博客等级: 大校
  • 技术积分: 2285
  • 用 户 组: 普通用户
  • 注册时间: 2006-06-18 17:02
文章分类

全部博文(214)

文章存档

2008年(43)

2007年(171)

我的朋友

分类:

2007-08-09 11:40:09

   IPTABLES在网上的资料够多了,但是可能有些人还是很容易搞糊涂,我在这里不想讲太多命令,只是想把你的概念理清楚.
IPTABLES有三个表,filter,nat,mangle和五个链: INPUT ,OUTPUT,FORWARD ,PREROUTIJNG ,POSTROUTING,看看下面的图:

PREROUTING——>ROUTE TABLE——>FORWARD——>POSTROUTING
| |
INPUT OUTPUT
| |
LOCALE PROCESS
不 管你用什么表什么链,链上是否设置规则,外来的包首先到达的是PREROUTINJG规则,如果你访问防火墙的服务,那还要经过INPUT链。如果你是转 发的,那要经过FORWARD和POSTROUTING,如果是防火墙发出的包,那经过OUTPUT和POSTROUTING链,根本不需要考虑什么表什 么链。默认下这些链光光的,什么规则都没有,都是默认的链规则起作用。
表就象人一样,他有自己负责的范围,如filter他只负责INPUT, OUTPUT,FORWARD链,NAT他只负责OUTPUT,PREROUTING,POSTROUTIN,mangle他负责全部。有人会问 FORWARD为什么nat不负责,FORWARD只对路由起作用,对nat不起用,虽然他经过这个链。如果nat在PREROUTING上设置规则, mangle也在PREROUTING设置规则,那当包进来时,两个不同的表设置的PREROUTING规则都起作用,如:
iptables -t nat -A PREROUTING-d 61.151.248.130 -j DNAT --to-destination 192.168.1.1-192.168.1.20
iptables -t mangle -A PREROUTIJNG -i eth0 -j TTL --ttl-set 20
上面的例子解释一下:当一个包进来时,先把这个包的目的地址变成私有地址,然后把包的TTL变成20。
filter表没什么好讲,知道一些基本的TARGET就可以设置,意思很容易懂,下面就讲NAT,我们把他跟路由器的NAT进行比较一下:
LINUX有两个NAT:一个是SNAT,一个是DNAT,DNAT是在包进来的时候开始转换了,不转换的话,路由怎么决定呢,SNAT是在包快要出去的时候做,因为他要用防火墙的出口的内网地址呀。
下面举个例子说明比较好一点:
一个LINUX服务器,公网地址是61.151.248.130,私有地址是192.168.1.1,内部跑了WEB服务器192.168.1.2-192.168.1.5
iptables -t nat -A PREROUTING -d 61.151.248.130 -p tcp --dport 80 -j DNAT --to-destination 192.168.1.2-192.168.1.5
用路由器的话,变成如下命令:
access-list 1 permit 61.151.248.130
ip nat pool cxf 192.168.1.2 192.168.1.5 netmask 255.255.255.0 type rotary
ip nat inside destination list 1 pool cxf
如果内部想向外访问INTERNET:
iptables -t nat -A POSTROUTING -j SNAT --to-source 61.151.248.130
注 意:向外访问的时候,其实他也先要经过PREROUTING链的,可惜,目标地址不是LINUX服务器,而是别的公网地址,不匹配,不转换地址。有人在 想,返回的包会不会匹配DNAT而把目标地址转换呢,不会!!!因为有缓存,LINUX首先也先检查缓存,然后执行转换规则。
如果用路由器:
access-list 1 permit 192.168.1.0 0.0.0.255
ip nat pool cxf 61.151.248.130 61.151.248.130 netmask 255.255.255.0
ip nat inside source list 1 pool cxf overload
不知道大家有没有注意到有个问题存在:如果内部访问LINUX服务器公网地址,会是什么样的??
我们来分析一下:
当192.168.1.111访问61.151.248.130,到了PREROUTING,变成192.168.1.111访问192.168.1.2,到了POSTROUTING,变成61.151.248.130访问192.168.1.2,访问成功!!!
阅读(953) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~