iptables总结

 
 
iptables: 包过滤型防火墙
    
Firewall: 防火墙,隔离工具;工做于主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则做匹配检测,对于可以被规则所匹配到的报文作出相应处理的组件;可分为主机防火墙和网络防火墙,centos6中的配置文件为/etc/sysconfig/iptables
 
一. 基础介绍之4表5链
 
  1.   4表
        filter: 过滤,当防火墙;
        nat:  网络地址转换,包括地址和端口;
        mangle:拆解报文,作出修改,封装报文;
        raw:关闭nat表上启用的链接追踪机制;有追踪机制(其实就是记忆功能),才能完成NAT转换
 
  2.   5链(内置):
        PREROUTING
        INPUT
        FORWARD
        OUTPUT
        POSTROUTING
 
        流入报文经由路径:PREROUTING --> INPUT
        流出报文经由路径:OUTPUT --> POSTROUTING
        转发报文经由路径:PREROUTING --> FORWARD --> POSTROUTING
 
 3.   各功能能够实现的位置:
        filter:INPUT, FORWARD, OUTPUT
        nat: PREROUTING(DNAT), OUTPUT, POSTROUTING(SNAT)
        mangle:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
        raw:PREROUTING, OUTPUT
 
 4.   路由发生的时刻:
        报文进入本机后,用于判断目标主机;       
        报文发出以前,判断经由哪一个接口送往下一跳;
            
 5.   小结
      iptables:主要是四表五链
 
      1) 添加规则时的考量点:
            (1) 要实现哪一种功能,用来判断添加在哪张表上;
            (2) 报文流经的路径,用来判断添加在哪一个链上;
 
      2) 链:链上规则的次序,即为检查的次序;依据从上到下的顺序
            (1) 访问同一应用(好比都访问22端口),匹配范围小的放上面;
            (2) 访问不一样应用,匹配到报文频率较大的放上面;
            (3) 尽可能将多个规则合并为一个,进行优化;
            (4) 设置默认策略;
 
        功能的优先级次序:raw --> mangle --> nat --> filter
 
 
 6.   规则说明:
        组成部分:报文的匹配条件,匹配到以后处理动做
 
           1) 匹配条件:根据协议报文特征指定,好比tcp,  ip,udp等报文特征
                基本匹配条件
                扩展匹配条件
 
           2) 处理动做:
                内建处理机制,好比drop, reject
                自定义处理机制, 用于跳转到自定义链
 
          注意:报文不会通过自定义链,只能在内置链上经过规则进行引用后生效;
 
 
 
 
二.     iptables命令:
 
   它是一个规则生成器,相关操做有添加、修改、删除、显示等;
 
   规则和链有计数器:
            pkts:由规则或链所匹配到的报文的个数;
            bytes:由规则或链匹配到的全部报文大小之和;
 
    iptables命令:
       iptables [-t table] {-A|-D} chain rule-specification
       iptables [-t table] -I chain [rulenum] rule-specification
       iptables [-t table] -R chain rulenum rule-specification
       iptables [-t table] -D chain rulenum
       iptables [-t table] -S [chain [rulenum]]
       iptables [-t table] {-F|-L|-Z} [chain [rulenum]] [options...]
       iptables [-t table] -N chain
       iptables [-t table] -X [chain]
       iptables [-t table] -P chain target
       iptables [-t table] -E old-chain-name new-chain-name
 
       -t table包括:filter, nat, mangle, raw
               
         1.  链管理:
               -F:flush,清空规则链;省略链,表示清空指定表上的全部的链;
               -N:new, 建立新的自定义规则链;
               -X:drop, 删除用户自定义的空的规则链;
               -Z:zero,清零,置零规则计数器;
               -P:Policy,为指定链设置默认策略;对filter表中的链而言,默认策略一般有ACCEPT, DROP, REJECT;
                      例如:iptables -P INPUT DROP
                                 iptables -P OUTPUT DROP
                                 iptables -P FORWARD ACCEPT
                                 设定INPUT、OUTPUT的默认策略为DROP,FORWARD为ACCEPT。
               -E: rEname,重命令自定义链;引用计数不为0的自定义链,没法更名,也没法删除;
 
         2.  规则管理:
               -A:append,将新规则追加于指定链的尾部;
               -I:insert,将新规则插入至指定链的指定位置;
               -D:delete,删除指定链上的指定规则; 有以下两种指定方式:
                       (1) 指定匹配条件;
                       (2) 指定规则编号;
               -R:replace,替换指定链上的指定规则;
 
         3.  查看:
               -L:list,列出指定链上的全部规则,后面还能够跟以下的子参数来显示更详细的内容;
                     -n: numberic,以数字格式显示地址和端口号;
                     -v: verbose,显示详细信息;
                        -vv, -vvv
                     --line-numbers:显示规则编号;
                     -x: exactly, 显示计数器计数结果的精确值;
 
         4.  匹配条件:
 
             1)基本匹配:
                   [!] -s, --src, --source IP|Netaddr:检查报文中源IP地址是否符合此处指定的地址范围,!表示取反;
                   [!] -d, --dst, --destination IP|Netaddr:检查报文中目的IP地址是否符合此处指定的地址范围;
                   -p, --protocol {tcp|udp|icmp}:检查报文中的协议,即ip首部中的protocols所标识的协议;
                   -i, --in-interface IFACE:数据报文的流入接口;仅能用于PREROUTING, INPUT及FORWARD链上;
                   -o, --out-interface IFACE:数据报文的流出接口;仅能用于FORWARD, OUTPUT及POSTROUTING链上;
 
            
                    例1:容许别人ping我(本机地址:172.16.100.9)
                              iptables -A INPUT -d 172.16.100.9 -p icmp -j ACCEPT
                              iptables -A OUTPUT -s 172.16.100.9 -p icmp -j ACCEPT
                   
                    例2:对流入流出接口进行限制,只容许eth0进行流入流出
                             iptables -A INPUT -d 172.16.100.9 -i eth0 -j ACCEPT
                             iptables -A OUTPUT -s 172.16.100.9 -o eth0 -j ACCEPT
 
       
        5.  目标:
               -j  TARGET:jump至指定的TARGET,目标以下
                   ACCEPT: 接受
                   DROP: 丢弃
                   REJECT: 拒绝
                   RETURN: 返回调用链
                   REDIRECT:端口重定向
                   LOG: 记录日志
                   MARK:作防火墙标记
                   DNAT:目标地址转换
                   SNAT:源地址转换
                   MASQUERADE:地址假装
                   ...
                   自定义链:由自定义链上的规则进行匹配检查
 
 
 
 
三.  匹配条件之扩展匹配
 
       扩展匹配:包括隐式扩展,显示扩展,基本格式为-m macth_name --spec_options,例如 -m tcp --dport 22
 

    1. 隐式扩展:对-p protocol指明的协议进行的扩展,可省略-m选项,按协议分类以下;html

               1)  -p tcp
                           --dport PORT[-PORT]:目标端口,能够是单个端口或连续多个端口;
                           --sport PORT[-PORT]
                           --tcp-flags LIST1 LIST2:检查LIST1所指明的全部标志位,且这其中,LIST2所表示出的全部标记位必须为1,而余下的必须为0;没有LIST1中指明的,不做检查                                                                 
                              好比:  --tcp-flags SYN,ACK,FIN,RST SYN   能够简写为--syn,表示检查tcp链接的第一次请求
                                             6个标志位: SYN, ACK, FIN, RST, PSH, URG(请求同步,确认号有效,断开请求,重置链接,推送,紧急指令)
 
                           例1:打开22端口,容许远程管理。(设定了不少的附加条件:管理机器IP必须是250,而且必须从eth0网卡进入)
                                  iptables -A INPUT -i eth0 -s 192.168.100.250 -d 192.168.100.1 -p tcp --dport 22 -j ACCEPT
                                  iptables -A OUTPUT -o eth0 -d 192.168.100.250 -s 192.168.100.1 -p tcp --sport 22 -j ACCEPT
                 
               2)  -p udp
                           --dport
                           --sport
                
                     例子:对于基于udp的dns服务,使用如下命令开启端口服务
                                iptables -A OUTPUT -o eth2 -p udp --dport 53 -j ACCEPT
                                iptables -A INPUT -i eth2 -p udp --sport 53 -j ACCEPT
 
               3)   -p icmp
                           --icmp-type
                               可用数字表示其类型:
                                   0:echo-reply
                                   8: echo-request
                    
                           例1:容许ping别人,不容许别人ping我(本机地址:172.16.100.9)                
                                    iptables -A OUTPUT -d 172.16.100.9 -p icmp --icmp-type 8 -j ACCEPT
                                    iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 0 -j ACCEPT
 
                           例2:在全部网卡上打开ping功能,便于维护和检测
                                   iptables -A INPUT -i eth+ -p icmp --icmp-type 8 -j ACCEPT
                                   iptables -A OUTPUT -o eth+ -p icmp --icmp-type 0 -j ACCEPT

 
 
   2. 显式扩展: 必须显式指明使用的扩展模块(rpm -ql iptables | grep "\.so")
           
        CentOS 6: man iptables
        CentOS 7: man iptables-extensions
 
      1) multiport扩展
            以离散方式定义多端口匹配;最多指定15个端口;
            [!] --source-ports,--sports port[,port|,port:port]...:指明多个离散的源端口,22:25表示连续的端口;
            [!] --destination-ports,--dports port[,port|,port:port]...:指明多个离散的目标端口;
            [!] --ports port[,port|,port:port]... :源和目标都行,不多用
           ~]# iptables -I INPUT -s 172.16.0.0/16 -d 172.16.100.9 -p tcp -m multiport --dports 22,80 -j ACCEPT
           ~]# iptables -I OUTPUT -d 172.16.0.0/16 -s 172.16.100.9 -p tcp -m multiport --sports 22,80 -j ACCEPT
 
      2) iprange扩展
            指明连续的(但通常是不能扩展为整个网络)ip地址范围时使用;
            [!] --src-range from[-to]:指明连续的源IP地址范围;
            [!] --dst-range from[-to]:指明连续的目标IP地址范围;
            ~]# iptables -I INPUT -d 172.16.100.9 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.16.100.1-172.16.100.120 -j ACCEPT
            ~]# iptables -I OUTPUT -s 172.16.100.9 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.16.100.1-172.16.100.120 -j ACCEPT      
  
      3)string扩展
           检查报文中出现的字符串;
           --algo {bm|kmp},2种比对算法
             bm = Boyer-Moore
             kmp = Knuth-Pratt-Morris
 
             [!] --string pattern,从头至尾进行检查
             ~]# iptables -I OUTPUT -m string --algo bm --string 'movie' -j REJECT (对网页中有'movie‘字符的禁止访问---容许请求此网页,可是回应不能到达本机)
 
      4)time扩展
           根据报文到达的时间与指定的时间范围进行匹配;
          --datestart
          --datestop
          --timestart
          --timestop
          --monthdays
          --weekdays
          iptables -I INPUT -d 172.16.100.9 -p tcp --dport 80 -m time --timestart 14:00 --timestop 16:00 -j REJECT (UTC格式时间)
 
      5)connlimit扩展
           根据每客户端IP(也能够是地址块)作并发链接数数量匹配;
           --connlimit-above n:链接的数量大于n,后面通常跟REJECT
           iptables -I INPUT -p tcp --dport 22 -m connlimit --conlimit-above 3 -j REJECT
 
           --connlimit-upto n: 链接的数量小于等于n,后面通常跟ACCEPT
 
      6)limit扩展
           基于收发报文的速率作检查;
 
           基于令牌桶过滤器来实现速率匹配,理解为发令牌给人去办事,只有办完事还了令牌,才能发给下一我的去办事
           --limit rate[/second|/minute|/hour|/day]
           --limit-burst number(峰值,不是必须的,就是空闲的时候不限速率,先最多给几个)
          
           例1:
           iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 30/minute -j ACCEPT
           iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0  -j ACCEPT
 
           例2:Dos攻击防范
           iptables -A INPUT -p tcp --dport 80 -m limit --limit 25/minute --limit-burst 100 -j ACCEPT
           --limit 25/minute表示每分钟限制最大链接数为25
           --limit-burst 100指定当总链接数超过100时,启动limit/minute限制
 
      7)state扩展--重要
 
           根据链接追踪机制检查链接的状态;(在指定时间内,好比6秒,记忆链接记录,须要用内核内存空间)
           调整链接追踪功能所可以容纳的最大链接数量:/proc/sys/net/nf_conntrack_max  
           已经追踪到并记录下的链接:/proc/net/nf_conntrack            
           不一样协议或链接类型追的时长:/proc/sys/net/netfilter/
            
           可追踪的链接状态:
             NEW:新发出的请求;链接追踪模板中不存此链接相关的信息条目,所以,将其识别为第一次发出的请求;
             ESTABLISHED:NEW状态以后,链接追踪模板中为其创建的条目失效以前期间内所进行的通讯的状态;
             RELATED:相关的链接;如ftp协议的命令链接与数据链接之间的关系;
             INVALIED:没法识别的链接;
 
            例子1
            iptables -I INPUT -d 172.16.100.9 -p tcp --dport 22 -m state --state NEW,ESTABLISHED -j ACCEPT
            iptables -I OUTPUT -s 172.16.100.9 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
 
            例子2:  PING只响应别人
            iptables -A INPUT -d 172.16.100.9 -p icmp --icmp-type 8 -m state --state NEW,ESTABLISHED -j ACCEPT
            iptables -A OUTPUT -s 172.16.100.9 -p icmp --icmp-type 0 -m state --state ESTABLISHED -j ACCEPT
 
            例子3: 配置web流量均衡
            把一台服务器做为前段服务器,利用iptables进行流量分发,配置方法以下        
            iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.101:80
            iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.102:80
            iptables -A PREROUTING -i eth0 -p tcp --dport 80 -m state --state NEW -m nth --counter 0 --every 3 --packet 0 -j DNAT --to-destination 192.168.1.103:80
 
 
        问题:如何开放被动模式的ftp服务?
            (1) 装载ftp追踪时的专用的模块:
                # modprobe nf_conntrack_ftp
            (2) 放行请求报文:
                命令链接:NEW, ESTABLISHED,经过21端口
                数据链接:RELATED, ESTABLISHED,随机端口
                # iptables -A INPUT -d LocalIP -p tcp --dport 21 -m state --state NEW,ESTABLISHED -j ACCEPT
                # iptables -A INPUT -d LocalIP -p tcp -m state --state RELATED,ESTABLISHED -j ACCEPT
            (3) 放行响应报文:
                ESTABLISEHD
                # iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT
 
 
 
 
四.    如何保存及重载规则:
 
          保存规则至指定文件:iptables-save > /PATH/TO/SOMEFILE           
          从指定文件重载规则:iptables-restore < /PATH/FROM/SOMEFILE
            
        CentOS 6:
            service iptables save 至关于iptables-save > /etc/sysconfig/iptables                
            service iptables restart 至关于iptables-restore < /etc/sysconfig/iptables
                
 
        CentOS 7:
            引入了新的iptables前端管理服务工具:firewalld
                firewalld-cmd
                firewalld-config
 
       其实centos7中也可使用iptables,那么须要先禁用firewalld,方法以下
         禁止firewall开机启动:systemctl disable firewalld.service
         关闭firewall: systemctl stop firewalld.service
         启动iptables: service iptables start
 
 
 
 
五.  回顾和练习:
 
    iptables/netfilter
        netfilter: kernel framework,
        iptables
        四表:filter, nat, mangle, raw
        五链:PREROUTING, INPUT, FORWARD, OUTPUT, POSTROUTING
  
        子命令:
            链:-F, -X, -N, -E, -Z, -P, -L
            规则:-A, -I, -D, -R
        -j TARGET:
            ACCEPT, DROP, REJECT, RETURN, LOG, MARK, DNAT, SNAT, MASQUEARDE, ...
 
        匹配标准:
 
            通用匹配:-s, -d, -p, -i, -o
 
            扩展匹配
                隐含扩展:
                    -p tcp: --dport, --sport, --tcp-flags, --syn (--tcp-flags SYN,ACK,FIN,RST SYN)
                    -p udp: --dport, --sport
                    -p icmp: --icmp-type
                显式扩展: -m
 
 
    练习:
        主机防火墙:
            放行telnet, ftp, web服务;
            放行samba服务;
            放行dns服务(查询和区域传送);
 
        网络防火墙:
            放行telnet, ftp, web服务;
            放行samba服务;
            放行dns服务(查询和区域传送)
相关文章
相关标签/搜索