iptables 学习笔记

                               iptables 学习笔记

1. ipatales表:
  filter: 用于过滤的时候。
  nat   : 用于做NAT的时候。
  mangle: 用于修改封包内容。
   链: 
   INPUT:      位于filter表,匹配目的ip是本机的数据包
   FORWARD:    位于filter表,匹配穿过本机的数据包。
   PREROUTING:位于nat表,用于修改目的地址(DNAT)
   POSTROUTING:位于nat表,用于修改源地址(SNAT)
2.iptables语法格式:
   iptables [-t 要操作的表]<操作命令>[要操作的链][规则号码][匹配条件][-j匹配到以后的动作]
【操作命令】:( -A -I -D -R -P -F)
   查看命令(-[vnx]L)
   (1)-A <链名>
        APPEND,追加一条规则(放到最后)
        例:iptables -t filter -A INPUT  -j DROP
   (2)-I<链名>[规则号码]
    INSERT,插入一条规则
        例:iptables -I INPUT -j DROP #在filter表的INPUT 链里插入一条规则(插入成第一条)
            iptables -I INPUT 3 -j DROP #在filter链里插入一条规则(插入成第三条)
   (3)-D<链名><规则号码|具体规则内容>
        DELETE,删除一条规则
        例:iptables -D INUT 3 #删除filter表INPUT链中的第三条规则(不管它的内容是什么)
            iptables -D INPUT -s 192.168.0.2 -j DROP (按内容匹配)#删除filter表INPUT链中的内容"-s 192.168.0.2 -j DROP"的规则
   (4)-R <链名><规则号码><具体规则内容>
        REPLACE,替换一条规则
        例; iptables -R INPUT 3 -j ACCEPT
   (5)-P <链名><动作> POLICY ,设置某个链的默认规则
        例:iptables -P INPUT DROP #设置filter表INPUT 链的默认规则DROP
    (6)-F[链名]FLUSH,清空规则
        例; iptables -F INPUT #清空filter 表INPUT链中的所有规则
        iptables -t nat -F PREROUTING #清空nat表PREROUTING链中的所有规则
   (6)-L[链名]LIST,列出规则
        v:显示详细信息,包括每条规则的匹配包数量和匹配字节数。
        x:在v的基础上,禁止自动单位换算(k,M)
        n:只显示ip地址和端口号码,不显示域名和服务名称。
        例:iptables -L #粗略出filter表所有链所有规则。
          iptables -t nat -vnL #用详细方式列出nat表所有链的所有规则,只显示ip地址和端口号
          iptables -t nat -vxnL PREROUTING #用详细方式列出nat表PREROUTING链的所有规则以及详细数字
【匹配条件】
       匹配条件:
               流入,流出接口 (-i ,-o)
               来源,目的地址 (-s,-d)
               协议类型       (-p)
               来源,目的端口(--sport,--dport)
   (1),按网络接口匹配
          -i <匹配数据进入网络接口>
        例: iptables -A INPUT -i eth0 -j ACCEPT
             iptables -A INPUT -i eth0 -s 192.168.100.1  -j ACCEPT #允许这个网段数据从eth0 进入
   (2),按源地址目的地址匹配
             -s<匹配来源地址>
              可以是IP ,NET,DOMAIN,也可以(任何地址)
        例:iptables -A INPUT -s 192.168.10.0/24 -j ACCEPT         #允许来自这个网段的数据进入
              -d<匹配目的地址>
               可以使IP ,NET,DOMAIN,也可以空
        例:iptables -A INPUT -d 192.168.10.1 -j DROP             #拒绝去往这个网段的数据包
   (3)按协议类型匹配    
            -p <匹配协议类型>
                可以使TCP,UDP,ICMP等,可以是空
             -p    tcp
             -p    udp
             -p    icmp    --icmp-type 类型
        例:iptables -A INPUT -s 192.168.1.0/24 -p tcp -j ACCEPT   #允许来源这个网段的数据用tcp传输数据
   (4)按来源目的的端口匹配
           --sport<匹配源端口> 可以是个别端口,可以是端口范围
           --sport 1000                 匹配源端口是1000的数据包
           --sport 1000:2000            匹配端口1000-2000的数据包(含1000,3000)
           --sport :3000                匹配源端口3000以下的数据包(含3000)
           --sport 1000:               匹配源端口是1000以下的数据包(1000)
             
        例: iptables -A INPUT -s 192.168.11.0/24 -p tcp --sport 1000 -j ACCEPT   #允许来源这个网段的数据使用tcp的1000端口上传输数据      
            iptables -A INPUT -s 192.168.33.0/24 -p tcp --sport 1000:2000 -j ACCEPT
            --dport<匹配目的的端口>可以是个别端口,也可以是端口范围
            --dport 80                  匹配目的端口是80的数据包
            --dport 1000:2000           匹配目的端口是1000-2000的数据包(含1000,2000)
            --dport :3000               匹配目的端口是3000以下的数据包(含3000)
            --dport 1000:               匹配目的的端口是1000以下的数据包(含1000)
        例: iptables -A INPUT -s 192.168.6.0/24 -p tcp --dport 80 -j ACCEPT    #允许去往这个网段的数据使用tcp的80端口上传输数据
           注意: --sport 和 --dport 必须配合-p参数使用
【动作(处理方式)】
             动作:ACCEPT,DROP,SNAT,DNAT,MASQUERADE
    (1)-j ACCEPT     通过,允许数据包通过本链
      例: iptabes -A INPUT -j ACCEPT  #允许所有访问本机ip的数据包通过
    (2)-j DROP 丢弃,阻止数据包通过本链而丢弃
      例: iptables -A FORWARD -s 192.168.69.34 -j DROP
    (3)-j DNAT
            -j DNAT --to IP[-IP][:端口-端口](nat表的PREROUTING链)
        #目的地址转换,DNAT 支持转换单ip,也支持转换到IP地址池(一组连续的IP地址) 
            例: iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.0.1 #把从ppp0进来要访问TCP/80的数据包目的改为192.168.0.1
    (4)-j SNAT
          -j SNAT --to IP[-IP][:端口-端口](nat表的POSTROUTING链)
       源地址转换,SNAT支持转换单ip,也支持转换到ip地址池(一组连续的IP地址)
          例:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 192.168.8.1 #将内网192.168.0./24 的源地址改为192.168.8.1 ,用于NAT
             iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j SNAT --to 1.1.1.1-1.1.1.10
    (5)-j MASQUERADE  #动态源地址转换(动态ip的情况下使用)
        例:iptables -t nat -A POSTROUTING -s 192.168.0.0/24 -j MASQUERADE #将源地址192.168.0.0/24的数据包进行地址伪装
【附加模块】
             1.按包状态匹配(state)
             2.按来源MAC匹配(mac)
             3.按包速率匹配(limit)
      4.多端口匹配(multiport)
   (1)state
    -m state --state 状态
    状态: NEW ,RELATED,ESTABLISHED,INVALID
          NEW:有别于tcp的syn
          ESTABLISHED:连接态
          RELATED:衍生态,与conntrack关联(FTP)
          INVALID:不能被识别属于哪个连接或没有任何状态
      例: iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
   (2)mac
     -m mac --mac-source MAC #匹配某个MAC地址
      例:iptables -A FORWARD -m mac --mac-source xx:xx:xx:xx:xx:xx -j DROP #阻断来自某个MAC地址的数据包,通过本机。
      注意:报文经过路由后,数据包中原有的mac信息会被替换,所以在路由后iptables中使用mac模块式没有意义的。
    (3)limit
     -m limit --limit 匹配速率[--burst缓冲数量]用一定速率去匹配数据包
      例: iptables -A FORWARD -d 192.168.0.1 -m limit --limit 50/s -j ACCEPT
          iptables -A FORWARD -d 192.168.0.1 -j DROP
      注意: limit 英语上看是限制的意思,但实际上只是按一定速率去匹配而已,要想限制的话后面再跟一条DROP
     (4)multiport
       -m mutiport <--sports|--dports|--ports>端口1[端口2,..端口n] #一次性匹配多个端口,可以区分源端口,目的端口或不指定端口
       例: iptables -A INPUT -p tcp -m multiport --dports 21,22,25,80,110 -j ACCEPT
       注意: 必须与-p参数一起使用
【实例分析】
          1.单服务器的防护
          2.如何做网关
          3.如何限制内网用户
          4.内网如何做对外服务器
          5.连接追踪模块
   (1)单服务器的防护
     弄清对外服务对象
     书写规则
            网络接口lo的处理
            状态监测的处理
            协议+端口的处理
     实例:一个普通的web服务器
           iptables -A INPUT -i lo -j ACCEPT
           iptables -A INPUT -p tcp -m multiport --dports 22,80 -j ACCEPT
           iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
           iptables -P INPUT DROP
       注意:确保规则顺序正确,弄清逻辑关系,学会使用-vnL
   (2)如何做网关
        弄清网络拓扑
        本机上网
        设置nat
               启用路由转发
               地址伪装SNAT/MASQUERADE
        实例:ADSL 拨号上网的拓扑
               echo "1" >/proc/sys/net/ipv4/ip_forward
               iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o ppp0 -j MASQUERADE
   (3)如何限制内网用户
               过滤位置filer 表FORWARD链
               匹配条件 -s -d -p --s/dport
               处理动作 ACCEPT DROP
          实例:
              iptables -A FORWARD -s 192.168.0.8 -j DROP
              iptables -A FORWARD -m mac --mac-source 34:12:44:42:56:23 -j DROP
              iptables -A FORWARD -d bbs.chinaunix.net -j DROP
   (4)内网如何做对外服务器
              服务器协议(TCP/UDP)
              对外服务端口
              内部服务器私网IP
              内部真正服务端口
           实例:
              iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 80 -j DNAT --to 192.168.1.2
              iptables -t nat -A PREROUTING -i ppp0 -p tcp --dport 81 -j DNAT --to 192.168.1.3:80
   (5)连接追踪模块
     modprode ip_nat_ftp 
     iptables -A INPUT -p tcp --dport 21 -j ACCEPT
     iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
     iptables -P INPUT DROP 
必添加项:
       echo "1" >/proc/sys/net/ipv4/ip_forward
       echo  "1">/proc/sys/net/ipv4/tcp_syncookies
       echo "1" >proc/sys/net/ipv4/icmp_ignore_bogus_error_responses 
       modprode ip_nat_ftp
 

你可能感兴趣的:(学习笔记,iptables)