Iptables 应用解析

 

Iptables 应用解析I-FILTER

 

http://blog.sina.com.cn/s/blog_417b97470100a816.html

至于iptables是什么,干什么用的,这里就不介绍了.感兴趣的朋友可以Google一下.下面这张图是我在互联网CP过来的基本可以描述iptables防火墙的工作流程!

 

Iptables 应用解析_第1张图片

 

 

数据从网卡穿过IP层必经过链PREROUTING,再经过路由选择接收还是转发,分别走INPUT FORWARD不同的链.

从INPUT链经过的数据包进入本地系统进行处理,从本地系统出来经OUTPUT的数据和转发FORWARD出来的数据经由POSTROUTING链发出穿越IP数据层.

 

 iptables主要功能就是在数据穿越IP层时在各链上对数据包进行规则限制.根据规则的不同的功能形成三种不同功能的表nat mangle filter,三个表常作用的链图已标明,通过这三个表可以很方便的对数据包进行管理过滤.

 

 

 

以下以实例形式对Filter进行讲解:

Filter 包过滤功能

  filter表是专门过滤包的,内建三个链,可以对包进行DROP、LOG、ACCEPT和REJECT等操作。FORWARD 链过滤所有不是本地产生的并且目的地不是本地(所谓本地就是防火墙了)的包,而 INPUT恰恰针对那些目的地是本地的包。OUTPUT 是用来过滤所有本地生成的包的。

  #iptables -t filter -A INPUT -s 10.0.0.5 -j DROP  凡是来自10.0.0.5包丢弃

  #iptables -t filter -nL INPUT -V  查看INPUT链的filter详细(-V)规则 并显示IP不做解析(-n)

  #iptables -t filter -F INPUT  清空INPUT中filter规则

  #iptables -I INPUT 1 -s 10.0.0.4 -j DROP  丢弃来自10.0.0.4的包并成为规则的第一项 缺省filter

  #iptables -A FORWARD -m iprange --src-range 192.168.1.5-192.168.1.124 -j ACCEPT
  #iptables -A FORWARD -m iprange --dst-range 10.0.0.0-10.255.255.255 -j ACCEPT 
    以上二例是允许目标ip/源ip地址范围的包通过

  #iptables -t filter -D INPUT 2  删除第二条规则

  #iptables -t filter -P FORWARD DROP  修改FORWARD链的缺省策略

    注: -I 指所有规则前插入(优先起作用)  -A表插入到表末(iptables -nL可看出)

  #iptables -A FORWARD -p TCP --dport 22 -j REJECT --reject-with tcp-reset

  #iptables -A FORWARD -i eth0 -o eth1 -p udp -j DROP 凡是从外网(eth0)去DMZ(eth1)的udp包丢弃

    注:当条件中有-p 协议号时 后可有更详细的匹配

    A: -p icmp  icmp扩展即被装入 可指定icmp类型(类型详见#iptables -p icmp -h)

     例:iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j DROP 不允许ping主机

    B: -p udp udp扩展装入  --sport/dport [!] port[:port] 单个端口或一端口范围

     例:#iptables -A FORWARD -p tcp -d 198.168.80.11 --dport www -i eth0 -j ACCEPT 开放www

    C: -p tcp 同上格式 重点匹配 --tcp-flags [!] mask comp  mask关第状态位 comp为1的状态位 

   例:#iptables -t filter -A FORWORD -i eth0 -o eth1 -p tcp

     --tcp-flags SYN,ACK,FIN,RST SYN -j DROP  此行可改为 --syn -j DROP 即第二次握手匹配 

 

  另有些功能需安装模块(不常用)

  1.#...-p tcp --tcp-flags SYN,ACK,FIN,RST ACK -m length --length 40:60 

      选出数据包长在40--60 byte的纯ACK包(打上标记QD处优先发出)

  2.#iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 2/sec -j ACCEPT

    #iptables -t filter -A INPUT -p icmp --icmp-type echo-request -j DROP

      此二句顺序使用表示只接收每秒2次的ping请求,超过丢弃(一个ping每秒发一ping包,可用多个ping  命令实现).

  3.#iptables -t filter -A INPUT -m mac --mac-source 00:5E:3C:4B:28:E4 (PR FO IN三链可用)

  4.# -m owner --uid/gid -owner userid/groupid  由哪个用户/用户组发出的包

    # -m owner --cmd-owner squid  由squid命令发出的包

  5.# -m physdev --physdev -in 具体指定网桥内的哪块物理网卡

  6.#iptables -t filter -A FORWARD -m state --state ESTABLISHED,RELATED -j ACCEPT

    常用于链的首位表若此数据包属于已知流或相关流则匹配常用于NAT网关FORWARD链第一条..

  需要打补丁的功能(当然需要安装模块)

  7.控制并发连接应用

    #iptables -A FORWARD -i * -o * -p tcp --syn -m connlimit --connlimit-abve 5 -j DROP

      限制并发数为5  默认-t filter 此处省略

    注:-j REJECT 亦丢弃 但发ICMP给发包方通知 公网不用 

    #iptables -I FORWARD -s 192.168.1.189 -p tcp --syn --dport 80

                        -m connlimit --connlimit-above 3 --connlimit-mask 24 -j DROP

  8.匹配限额

    #iptables -t filter -A FORWORD -d 10.0.0.5 -m quota --quota 100000000 -j ACCEPT

    #iptables -t filter -A FORWORD -d 10.0.0.5 -j DROP

      此二句顺序使用限制单个IP下载量

   #iptables -I FORWARD -s 192.168.1.189 -p tcp --dport 80 -m quota --quota 500 -j DROP

    #iptables -I FORWARD -s 192.168.1.189 -p tcp --dport 80 -m quota --quota 500 -j ACCEPT

  9.#iptables -t filter -A FORWORD -d 10.0.0.9 -m random --average 1 -j DROP

      去往10.0.0.9的包丢率为1%  linux模拟网络延迟功能

  10.封杀BT类P2P软件

  #iptables -A FORWARD -m ipp2p --edk --kazaa --bit -j DROP

  #iptables -A FORWARD -p tcp -m ipp2p --ares -j DROP

  #iptables -A FORWARD -p udp -m ipp2p --kazaa -j DROP 

  11.CDN对下载的限制示例

    #iptables -A INPUT -p tcp --dport 80 -m connlimit --connlimit-above 5 -j DROP
    #iptables -A INPUT -p tcp --dport 80 -m recent --name BAD_HTTP_ACCESS

                                     -update --seconds 60 --hitcount 30 -j REJECT

      同一IP允许5个并发链接 60秒内限制30次

 

自定义子链

  子链的应用平常工作中尚未用到,以下培训时针对子链应用的一脚本.

  #iptables -t filter -N/-X  链名(自定) 新链的创建/删除

  #!/bin/sh

  mychain=BLACK_IP

  conf=/root/black_list

  if ! iptables -t filter -L $mychain >/dev/null 2>&1;then

    iptables -t filter -N $mychain  新建子链

    iptables -t filter -I INPUT -j $mychain  在INPUT链中加子链

    iptables -t filter -I FORWARD -j $mychain

    iptables -t filter -F $mychain

    for ip in `cat $conf`;do  此循环定义子链中的规则

      iptables -t filter -A $mychain -s $ip -j DROP

    done

  fi

 

  由于篇幅问题,对于表NAT Mangle的解析只能留到下一篇再作介绍.

 

你可能感兴趣的:(Iptables 应用解析)