iptables原理及应用

IPTABLES

       基于内核的防火墙,里面有raw,mangle,net,filter四个表,它们的优先级依次降低,也就是raw最高,匹配的时候是从raw开始的

 

1,     iptables有四张表

   raw,mangle,net,filter

 

2,规则链-chain

存放防火墙规则的地方

默认有五种规则链:

→ PREROUTING:路由选择之前处理

→ FORWARD:处理转发的数据包

→ INPUT:处理入站的数据包

OUTPUT:处理出站的数据包

→ POSTROUTING:路由选择之后处理

3,表和规则链对应的关系:

   filter :INPUT,FORWARD, OUTPUT

      nat   : PREROUTING(DNAT), POSTROUTING(SNAT),OUTPUT

      mangle : PREROUTING, POSTROUTING, FORWARD, INPUT,OUTPUT

      raw   : PREROUTING, OUTPUT


4,数据报文流程:

跟本机内部进程通信:

进入:PREROUTING,INPUT

出去:OUTPUT, POSTROUTING


5,基本语法:

            iptables [-t TABLE] COMMANDCHAIN  CRETIRIA -j TARGET

             iptables [ -t 表名 ] 选项 [ 链名 ] [ 条件 ] [ -j 目标操作 ]

 

          链:

                    -Fflush, 清空规则链;

                    -Nnew, 自建一条链

                    -X: delete, 删除一条自定义的空链

                    -Zzero,计数器归零

                                     -Ppolicy,设置默认策略,对filter表来讲,默认规则为ACCEPTDROP

                             -E:重命名自定义链

 

      表:-t TABLE:

                     nat, mangle, raw, filter

         不指定表的时候默认为filter

         不指定链,默认为对应表的所有链

                除非设置默认策略,否则必须指定匹配条件

                 选项/链名/目标操作用大写字母,其余都小写

 

        链中的规则:

                -A 在链尾增加一条规则

                -I  在链头增加一条规则,或者指定序号增加

                -D  删除链内指定序号(或内容)的一条规则

                -R  替换一条规则

 

       

            查询:

                -L

                    -n:数字格式显示主机地址和端口;

                    -v:详细格式,-vv,-vvv

                    --line-numbers:显示规则编号

 

pkts bytes  target    prot opt in        out         source  destination           

包数 字节数 目标     协议  流入的接口  流出的接口   源地址       目标地址

                   

              -x: exactly,不要对计数器的计数结果做单位换算,而显示其精确值



匹配条件:

通用匹配

-s 地址:指定报文源IP地址匹配的范围;可以是IP,也可以是网络地址;可使用!取反;--src, --source

-d 地址:指定报文目标IP地址匹配的范围;--dst,--destination

-p 协议:指定匹配报文的协议类型,一般有三种tcp, udpicmp;

-iINTERFACE: 数据报文流入的接口;PREROUTING,INPUT, FORWARD

-o INTERFACE: 数据报文流出的接口;OUTPUT,FORWARD, POSTROUITING


扩展匹配

隐式扩展:当使用-p{tcp|udp|icmp}中的一种时,可以直接使用扩展专用选项;

                                                -ptcp:

                                            --sport PORT[-PORT]: 指定源端口

                                                 --dport PORT[-PORT]: 指定目标端口

                                                 --tcp-flags


                                                -pudp:

                                                         --sport

                                                         --dport

                                                         -p icmp [-m icmp]

                                                         --icmp-type

                                                                   0:echo-reply, ping响应

                                                                   8:echo-request, ping请求


显式扩展:必须明确说明使用哪个模块进行扩展,而后才能使用其扩展专用选项;

                                                -mstate –state

                                               multiport: 多端口匹配

可用于匹配非连续或连续端口;最多指定15个端口

                         --source-ports, --sportsport[,port,port:port]

                                                         --destination-ports,--dports

                                                         --ports

例:

# iptables -I INPUT -d 172.16.31.30 -p tcp -m multiport--dports 22,80 -j ACCEPT

        # iptables -IOUTPUT -s 172.16.31.30 -p tcp -m multiport --sports 22,80 -j ACCEPT

 

                     iprange: 匹配指定范围内的地址;匹配一段连续的地址而非整个网络时有用;

                           取反([!] --src-ragneIP[-IP]

取反([!] --dst-range

 

  例:# iptables -A INPUT -d 172.16.31.30 -p tcp --dport 23-m iprange --src-range 172.16.31.30-172.16.31.100 -j ACCEPT

         # iptables -AOUTPUT -s 172.16.31.30 -p tcp --sport 23 -m iprange --dst-range 172.16.31.1-172.16.31.100-j ACCEPT

   

              string:字符串匹配,能够检测报文应用层中的字符串

             --algo {kmp|bm}

                             --string"STRING"

                             --hex-string"HEX_STRING": HEX_STRING为编码成16进制格式的字串;

例:# iptables -I OUTPUT -m string --algo kmp --string"hello" -j DROP

 

           time: 基于时间做访问控制

                --datestartYYYY[-MM][-DD[Thh[:mm[:ss]]]]

                                       --datestop

--timestart hh:mm[:ss]

                                  --timestop hh:mm[:ss]

--weekdays day[,day]

                                                             Mon, Tue,

例:# iptables -I INPUT -d 172.16.31.30 -p tcp --dport 80-m time --timestart 08:00 --timestop 18:00 --weekdays Mon,Tue,Thu,Fri -j REJECT

 

         connlimit: 连接数限制,对每IP所能够发起并发连接数做限制

                  [!] --connlimit-above [n]

例:iptables -A INPUT -d 172.16.100.7 -p tcp --dport 22 -mconnlimit --connlimit-above 2 -j DROP

 

        limit: 速率限制

              --limitn[/second|/minute|/hour|/day]

                              --limit-burst n

例:# iptables -A INPUT -d 172.16.100.7 -p icmp --icmp-type8 -m limit --limit 20/minute --limit-burst 5 -j ACCEPT

 

        state: 状态检查

            --state

例:iptables -A INPUT -m state--state NEW -p tcp ! --syn -j DROP

 

       iptables状态跟踪

           NEW,请求建立连接的包、完全陌生的包

                 ESTABLISHED,将要或已经建立连接的包

                 RELATED,与已知某个连接相关联的包

                 INVALID,无对应连接,以及连接无效的包

                  UNTRACKED,未跟踪状态的包

 

            SNAT源地址转换

                  做完路由选择后,针对来自局域网、即将从外网接口发出去的数据包,将其源IP地址修改为公网地址

例:# iptables -t nat -A POSTROUTING -s 172.16.0.0/16 -o eth1 -j SNAT --to-source 1.1.1.1

          MASQUERADE --- 地址伪装

                  外网接口的IP地址不固定的情况

               将SNAT规则改为MASQUERADE

               对于ADSL拨号连接

         例:iptables -t nat -A POSTROUTING -s 172.16.0.0/24 -o eth1 -jMASQUERADE

 

 

                     DNAT目标地址转换

       例:宣布WEB

            # iptables-t nat -A PREROUTING -i eth1 -d 1.1.1.1 -p tcp --dport 80 -j DNAT--to-destination 172.16.31.30

     

            开机后自动加载已保存的规则
                                       # iptables-save > /etc/sysconfig/iptables

 

 


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章