Chinaunix首页 | 论坛 | 博客
  • 博客访问: 343245
  • 博文数量: 64
  • 博客积分: 2301
  • 博客等级: 大尉
  • 技术积分: 570
  • 用 户 组: 普通用户
  • 注册时间: 2009-03-25 11:48
文章分类

全部博文(64)

文章存档

2013年(5)

2012年(6)

2011年(36)

2010年(7)

2009年(10)

分类: LINUX

2009-05-15 17:50:46

Iptables 应用解析II---NAT/Mangle
  上篇Filter的解析已是一周前的事了,上周一直比较忙也没时间整理繁琐的笔记.呵呵,这周补上吧!
接上篇Filter来介绍NAT Mangle的功能及用法.亦附上数据穿越IP层的示意图:
      

1.NAT --- Network Address Translation 网络地址转换
  网络地址转换即改变数据包的源/目的地址,做过NAT操作的数据包的地址就被改变了,当然这种改变是根据我们的规则进行的。属于一个流的包只会经过这 个表一次。如果第一个包被允许做NAT或Masqueraded,那么余下的包都会自动地被做相同的操作。也就是说,余下的包不会再通过这个表,一个一个 的被NAT,而是自动地完成。这就是我们为什么不应该在这个表中做任何过滤的主要原因。PREROUTING 链的作用是在包刚刚到达防火墙时改变它的目的地址,OUTPUT链改变本地产生的包的目的地址,POSTROUTING链在包就要离开防火墙之前改变其源 地址。
  所以NAT分为SNAT DNAT SANT作用只限于POSTROUTING 而DANT作用于PREROUTING OUTPUT
  A.SNAT 源地址NAT
    常用于linux网关
    例:内网10.0.0.0/8  外网192.168.14.14/24 内网通过此外网机器访问外网
  #iptables -t nat -A POSTROUTING -s 10.0.0.0/8 -o eth0 -j SNAT --to 192.168.14.14 网关
    凡是来自内网10.0.0.0/8的包,把src换成192.168.14.14转发出 若把 -j SNAT --to 192.168.14.14
    换为MASQUERDE 适合动态可变的IP,即根据本机路由选择IP 注:DNAT由网关192.168.14.14自动完成
  B.DNAT 目的地址NAT
    常用于解决内网的Server发布内网端口的映射
    例:内网:10.0.0.2/8:80  外网:192.168.14.14/24:8001
  #iptables -t nat -A PREROUTING -d 192.168.14.14 -p tcp --dport 8001 -j DNAT --to 10.0.0.2:80
    凡目的地址为192.168.14.14:8001的数据包目的地址改为10.0.0.2:80
    注:--to [ipaddr]-[ipaddr] [:port-port] 可多IP(范围)作负载均衡(轮转),但存在单点故障
  #iptables -t filter -A FORWARD -p udp -j DROP
  #iptables -t nat -A PREROUTING -s 10.0.0.0/8 -p udp --dport 53 -j DNAT --to 192.168.14.254
    上面二条规则限制网关将不转发udp包,内网的任何DNS查询将被发往指定的企业DNS服务器,实现DNS的透
  明代理.
  #iptables -t nat -A PREROUTING -s 10.0.0.0/8 -p tcp
                        --dport 80 -j DNAT --to 192.168.14.14:3128 此句实现web透明代理
  #iptables -t nat -I PREROUTING -m mac --mac-source 00:1A:A0:98:B1:6E -j DROP
  #iptables -A FORWARD -i eth2 -m state --state ESTABLISHED,RELATED -j ACCEPT 网关常用
  #iptables -t nat -A PREROUTING -p tcp --dport 80 -j REDIRECT --to-ports 8080 端口NAT
  #iptables -A FORWARD -s 192.168.1.189 -m limit –limit 20/s -j ACCEPT
  #iptables -A FORWARD -s 192.168.1.189 DROP 以二句用在网关上限速..
  iprange模块的应用..
    #iptables -t nat -I PREROUTING -i eth2 -m iprange
                         --src-range 192.168.1.102-192.168.1.102 -j ACCEPT
    #iptables -t nat -A PREROUTING -m iprange --src-range 192.168.0.20-192.168.0.255
                           -i eth1 -p tcp -m tcp --dport 1:65535 -j REDIRECT --to-ports 80
  string模块的应用..
    #iptables -I FORWARD -s 192.168.1.189 -m string --string "qq.com" -j DROP
                         -m comment --comment "denny go to qq.com"
    #iptables -I FORWARD -m string --string "腾讯" -j DROP
    #iptables -I FORWARD -s 192.168.1.189 -m string --string "qq.com" -j DROP
    #iptables -I FORWARD -p tcp --sport 80 -m string --string "广告" -j DROP
  comment模块的应用..
    #iptables -I FORWARD -s 192.168.1.189 -p tcp --dport 80 -j DROP
                        -m comment --comment "the bad guy can not online"
   #iptables -I FORWARD -s 192.168.3.159 -m string --string "qq.com" -j DROP
                        -m comment --comment "denny go to qq.com"
  其它常应用:
  #iptables -t nat -I PREROUTING -p udp --dport 53 -j ACCEPT
  #iptables -t nat -I PREROUTING -p tcp --dport 80 -j ACCEPT
  #iptables -t nat -I PREROUTING -p gre -j ACCEPT
  #iptables -t nat -I PREROUTING -p icmp -j ACCEPT
  #iptables -A INPUT -i tun+ -j ACCEPT
  #iptables -A FORWARD -i tun+ -j ACCEPT

2.Mangle 数据包高级管理
  这个表主要用来mangle数据包。我们可以改变不同的包及包头的内容,比如 TTL,TOS或MARK。注意MARK并没有真正地改动数据包,它只是在内核空间为包设了一个标记。防火墙内的其他的规则或程序(如tc)可以使用这种 标记对包进行过滤或高级路由。这个表有五个内建的链: PREROUTINGPOSTROUTINGOUTPUTINPUTFORWARDPREROUTING在包进入防火墙之后、路由判断之前改变包,POSTROUTING是在所有路由判断之后。 OUTPUT在确定包的目的之前更改数据包。INPUT在包被路由到本地之后,但在用户空间的程序看到它之前改变包。FORWARD在最初的路由判断之后、最后一次更改包的目的之前mangle包。注意,mangle表不能做任何NAT,它只是改变数据包的TTL,TOS或MARK,而不是其源目地址。
  Mangle不常用,主要用来打标记,只用于本地.
  #-j MARK --set-mark value
  #iptables -t mangle -A PREROUTING -i eth1 -j MARK --set-mark 9
    在mangle中给从eth1进入的数据包打上标记9
  #iptables -t mangle -A PREROUTING -p tcp -m multiport --dports 80,8080,20,21
                                                     -s 10.89.9.0/24 -j MARK --set-mark 1
  #iptables -t mangle -A  PREROUTING -p ALL -d  192.168.1.0/24
                                -m state --state ESTABLISHED,RELATED -j MARK --set-mark 4
  例:优先发出ACK数据包 标记为13
  #tc fi add dev eth0 parent 1: pref 1000 protocol ip handle 13 fw flowid 1:1
  #iptables -t mangle -A FORWARD -p tcp --tcp-flags SYN,ACK,FIN,RST ACK -m length --length
      40:60 -j MARK --set-mark 13

  至此简单介绍linux iptables的一般应用,当然介绍肯定不全,是针对于我个人的工作来讲解,算是笔记吧!
不足之处请大家提出宝贵见意,不甚感谢!



本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/82249/showart_1914582.html
阅读(1376) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~