免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1632 | 回复: 0
打印 上一主题 下一主题

Iptables 应用解析II---NAT/Mangle [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-05-15 17:50 |只看该作者 |倒序浏览
[color="#11779f"]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
               
               
               

本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u3/93978/showart_1929327.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP