分享

Iptables 应用解析II

 sven_ 2013-08-26


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./u2/82249/showart_1914582.html

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多