美文网首页
iptables知识点总结

iptables知识点总结

作者: leomon | 来源:发表于2017-05-01 15:43 被阅读0次

    iptables: 包过滤型防火墙
    Firewall: 防火墙,隔离工具:工作与主机或网络的边缘,对于进出本主机或网络的报文根据事先定义好的检查规则作匹配检测,对于能够被规则所匹配到的报文做出相应处理的组件;

    主机防火墙
    网络防火墙
    ipfw
    ipchains
    iptables/netfilter
    framework: netfilter
    hooks function
    rule utils: iptables

    功能:

    filtter : 过滤,防火墙;
    nat : network address translation, 网络地址转换;
    mangle : 拆解报文,做出修改,封装报文
    raw : 关闭nat表上启用的连接追踪机制;

    链(内置)

    PREROUTING
    INPUT
    FORWARD
    OUTPUT
    POSTROUNTING

    流入: PREROUTING --> INPUT
    流出 : OUTPUT --> POSTROUTING
    转发 : PREROUTING --> FORWARD --> POSTROUTING

    各功能的分别实现:

          filter : INPUT, FORWARD, OUTPUT
          nat :  PREROUTING(DNAT), OUTPUT, POSTROUTING(SNAT),
         mangle :   PREROUTING , INPUT, FORWARD, OUTPUT, POSTROUTING
           raw:   PREROUTING , OUTPUT
    

    路由发生的时刻:
    报文进入本机后
    判断目标主机
    报文发出之前
    判断经由哪个接口送往下一跳
    iptables: 四表无链
    添加规则时的考量点

            (1) 要实现哪种功能,判断添加在哪张表上;
            (2)报文流经的路径,判断添加在哪个链上;
    

    链: 链上规则的次序,即为检查的次序,因此隐含一定的法则

    (1) 同类规则(访问同一应用),匹配范围小的放上面
    (2) 不同类规则(访问不同应用),匹配到报文频率较大的放上面;
    (3) 将那些可由一条规则描述的多个规则合并为一个;

    设置默认策略;

    功能的优先级次序: raw --> mangle --> nat --> filter

    规则:

    组成部分:报文的匹配条件,匹配到之后处理动作。
    匹配条件: 根据协议报文特征指定
    基本匹配条件
    扩展匹配条件

    处理动作:

    内建处理机制
    自定义处理机制

    注意:报文不会经过自定义 链,只能在内置链上通过规则进行引用后生效;
    

    iptables : 规则管理工具

    添加、修改、删除、显示等;
    规则和链有计数器:

        pkts:由规则或链所匹配到的报文的个数;
        bytes : 由规则或链匹配到的所有报文大小之和;
    

    iptables命令

         iptables [-t table] {-A|-C|-D} chain rule-specification
    
         ip6tables [-t table] {-A|-C|-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
    
         rule-specification = [matches...] [target]
    
         match = -m matchname [per-match-options]
    
         target = -j targetname [per-target-options]
    
    

    iptables [-t table] SUBCOMMAND CHAIN CRETERIA -j TAEGWT

    -t table:

    filter, nat,mangle,raw

    链管理:

    -F: flush,清空规则链:省略链,表示清空指定表上的所有的链;
    
    -N :  new ,创建新的自定义规则链;
    -X: drop, 删除用户自定义的空的规则链;
    -Z: zero,清零,置零规则计数器
    -P: Policy,为指定链设置默认策略,对filter表中的链而言,默认策略通常有ACCEPT,DROP,REJECT;
    -E:rEname, 重命令自定义链;引用计数不为0的自定义链,无法改名,也无法删除
    

    规则管理:

    -A:  append,将新规则追加于指定链的尾部;
    
    -I :     insert, 将新规则插入至指定链的指定位置;
    -D: delete,删除指定链上的指定规则;
            有两种指定方式:
                (1) 指定匹配条件;
                (2) 指定规则编号;
    -R:replace, 替换指定链上的指定规则;
    

    查看:

     -L: list, 列出指定链上的所有规则;
    
        -n:  numberic, 以数字格式实现地址和端口
        -v: verbose, 显示详细信息;
                -vv ,-vvv
        --line-numbers: 显示规则编号;
       -x: exactly, 显示计数器计数结果的精确值
    

    示例:

          iptables -t  filter -N IN_public
          iptables -L -n
          iptables -t filter -E IN_public  OUT_public
          iptables -L -n
          #重启防火墙 
          systemctl restart firevalld.service
          iptables -L -n
          #修改默认策略 
          iptables -t filter -P FORWARD DROP
          iptables -L -n
          #恢复默认策略
          iptables  -t filter -P FORWARD ACCEPT
          iptables -L -n
         #查看规则编号
          iptables -n -L --line-numbers
          # 根据规则编号2删除规则
           iptables -D FORWARD 2
          # 查看详细信息
          iptables -n -L -v         #或使用-vv -vvv
         #清除链上的所有规则
         iptables -X
    

    匹配条件:

    基本匹配:

    [i]   -s,--src, --source IP|Neraddr : 检查报文中源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链上;
    

    示例:

      iptables -F
      iptables -X
      iptables -t filter -A INPUT -d 172.18.251.117 -p tcp -j ACCEPT
      iptables -L  -n
      iptables -t filter -A OUTPUT -s 172.18.251.117 -p tcp -j  ACCEPT
      iptables -L -n -v
      iptables -P INPUT DROP
      iptables -P OUTPUT DROP
      iptables -P FORWARD DROP
      iptables -n -L -v && sleep 5 && iptables -F
      # 添加icmp规则
      iptables -A iNPUT -d 172.18.251.117 -p icmp -j ACCEPT
      iptables -n -L 
      ping 172.18.251.117
      iptables -A OUTPUT -s 172.18.251.117 -p icmp -j ACCEPT
      ping 172.18.251.117
      # 删除规则
      iptables -n -L --line-numbers
      iptables -D INPUT 2
      iptables -D OUTPUT 2
      iptalbes -n -L --line-numbers
     #根据接口添加规则
     iptables -A iNPUT -d 172.18.251.117 -i ens37 -j ACCEPT
     ping 172.18.251.117
     iptables -A OUTPUT -s 172.18.251.117 -o ens37 -j  ACCEPT
     ping 172.18.251.117
    

    扩展匹配:-m macth name --spec_options
    例如: -m tcp --dport 22

    隐式扩展: 对-p protocol 指明的协议进行的扩展,可省略-m

    -p tcp
    
          --dport PORT[-PORT]: 目标端口,可以是单个端口或连续多个端口;
         --sport  PORT[-PORT]
         --tcp-flags  LIST1, LIST2: 检查LIST1所指明的所有标志位,且这其中,LIST2所表示的所有标志位必须为1,而余下的必须为0,没有LIST1中指明的,不作检查;
             SYN , ACK , FIN , RST , PSH , URG
     --tcp-flags   SYN,ACK,FIN,RST SYN
    --syn:
       -p  udp
               --dport
               --sport
       -p icmp
               --icmp-type
                  可用数字表示其类型:
                         0: echo-reply
                         8:  echo-request
    

    示例:

    iptables -I INPUT -d 172.18.251.117 -p tcp --dport 22 -j ACCEPT
    iptables -I INPUT -s 172.18.251.117 -p tcp --sport 22 -j ACCEPT
    iptables  -n -L --line-numbers
    systemctl start httpd.service
    systemctl status httpd.service
    # web端访问:172.18.251.117
    iptables -D input 2
    # web端访问:172.18.251.117 访问不成功
    # 根据icmp-type类型设定规则
    iptables -A  OUTPUT -s 172.18.251.117 -p icmp --icmp-type 8 -j ACCEPT
    iptables -A INPUT -d 172.18.251.117 -p icmp --icmp-type 0 -j ACCEPT
    iptables -n -L -v  --line-numbers
    ping 172.18.251.116
    

    显示扩展:必须使用-m选项指定使用的扩展;

    目标:
    
       -j  TARGET: jump至指定的TARGET
           ACCEPT:  接受
           REJECT: 拒绝
            RETURN: 返回调用链
            REDIRECT: 端口重定向
             LOG: 记录日志
             MARK: 做防火墙标记
             DNAT:目标地址转换
             SNAT::源地址转换
             MASQUERADE : 地址伪装
             ....
    

    自定义链: 由自定义链上的规则进行匹配检查

    iptables:
    显式扩展:必须显式指明使用的扩展模块(rpm -ql iptables)
    CentOS 6 : man iptables
    CentOS 7: man iptables-extensions

    1、 multiport 扩展
       已离散方式定义多端口匹配,最多指定15个端口
      [!] --source-ports,--sports port[,port|,port:port]...:  指明多个源端口;
     [!]--destination-ports,--dports port[,port|,port:port]...:指明多个离散的目标端口
    [!] --ports port[,port|,port:port]...
    

    示例:

    #多端口匹配
    iptables -I INPUT -s 172.18.0.0/16 -d 172.18.251.117 -p tcp -m  multiport --dports=22,80 -j ACCEPT
    iptables -I OUTPUT -d 172.18.0.0/16 -s 172.18.251.117 -p tcp -m multiport --sports=22,80 -j ACCEPT
    iptables -vnL --line-numbers
    iptables -D INPUT 2
    iptables -D OUTPUT 2
    # web端访问172.18.251.117可以正常访问
    
    2、iprange 扩展

    指明连续的(但一般是不能扩展为整个网络)ip 地址范围时使用:
    [!] --src-range from[-to]: 指明连续的源IP地址范围;
    [!] --dst-range from[-to]: 指明连续的目标IP地址范围;

    iptables -I iNPUT -d 172.18.251.117 -p tcp -m multiport --dports 22:23,80 -m iprange --src-range 172.18.250.50-172.18.250.120 -j ACCEPT
    iptables I OUTPUT -s 172.18.251.117 -p tcp -m multiport --sports 22:23,80 -m iprange --dst-range 172.18.250.50-172.18.250.120 -j ACCEPT
    iptables -D iNPUT 2
    iptables -D OUTPUT 2
    # web端访问172.18.251.117
    
    3、string扩展
      检查报文中出现的字符串
      --algo{bm|kmp}
           bm=Boy
           kmp=knuth-Pratt-Morris
    [!] --string  pattern
    

    示例:

    echo "this is usa page" > test.html
    iptables -I OUTPUT -m string --algo bm string 'usa' -j REJECT
    #web端访问test.html 页面
    
    4、time扩展

    根据报文到达的时间与指定的时间范围进行匹配;

    --datestart
    
    --datestop
    --timestart
    --timestop
    --monthdays
    --weekdays
    

    示例:

    iptables -I INPUT -d 172.18.251.117 -p tcp --dport 80 -m time --timestart 9:00 --timestop 23:00 -j ACCEPT
    

    5、connlimit 扩展

    根据每客户端IP(也可以是地址块) 做并发连接数数量匹配;

    --connlimit-above n: 连接的数量大于n
    --connlimit-upto n: 连接的数量小于等于n

    示例

     iptables -I INPUT -p tcp --dport 22 -m connlimit --connlimit-above 3 -j REJECT
    

    6、limit扩展

    基于收发报文的速率做检查:

    令牌桶过滤器
    --limit rate[/second|/minute|/hour|/day]
    --limit-burst number

    示例:

    iptables -A INPUT -d 172.18.251.117 -p icmp --icmp-type 8 -m limit --limit-burst 5 --limit 3/minute -j ACCEPT
    iptables -A OUTPUT -s 172.18.251.117 -p icmp --icmp-type 0 -j ACCEPT
    ping 172.18.251.117
    

    7、state扩展

    根据连接追踪机制检查连接的状态:
    调整连接追踪功能所能够容纳连接的最大连接数量:
    /proc/sys/net/nf_conntrack_max
    已经追踪到并记录下的连接:
    /proc/net/nf_conntrack
    不同协议或连接类型追踪的时长:
    /proc/sys/net/netfilter/
    可追踪的连接状态:

    NEW: 新发出的请求,连接追踪模板中不存在此里阿杰相关的信息条目,因此,将其识别为第一次发出的请求;
    ESTABLISHED: NEW状态之后,连接追踪模块中为其建立的条目失效之前期间内所进行的通信状态;
    RELATED:相关的连接;如ftp协议的命令连接与数据连接之间的关系;
    INVALIED: 无法识别的连接;

    --state STATE1,STATE2,...

    示例:

    iptables -vnL --line-numbers
    iptables -I iNPUT -d 172.18.
    251.117 -p tcp --dport 22 -m state --state NEW,ESTABLELISHED -j ACCEPT
    iptables -A OUTPUT -s 172.18.251.117 -p tcp --sport 22 -m state --state ESTABLISHED -j ACCEPT
    iptables -I INPUT -d 172.18.251.117 -p tcp --dport 80 -m state --state NEW,ESTABLELISHED -j ACCEPT
    iptables -A OUTPUT -s 172.18.251.117 -p tcp --sport 80 -m state ESTABLELISHED -j ACCEPT
    iptables -A INPUT -d 172.18.251.117 -p icmp --icmp-type 8 -m state --state NEW,ESTABLELISHED -j ACCEPT
    iptables -A OUTPUT -s 172.18.251.117 -p icmp --icmp-type 0 -m state --state ESTABLELISHED -j ACCEPT
    #对以上规则作优化
    iptables -I iNPUT -m state --state ESTABLISHED -j ACCEPT
    iptables -I INPUT 2 -p tcp -m multiport --dports 22,80 -m state --state NEW -j ACCEPT
    iptables -I OUPUT -m state --state ESTABLISHED -j ACCEPT
    
    

    问题: 如何开放被动模式的ftp服务?
    (1)装载ftp追踪时的专用的模块:
    # modprobe nf_conntrak_ftp

             >( 2 ) 放行请求报文:
                 #     命令连接:  NEW,ESTABLISHED
                 #     数据连接:  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)  放行响应报文
                #      ESTABLISHED
               iptables -A OUTPUT -s LocalIP -p tcp -m state --state ESTABLISHED -j ACCEPT
    

    示例:

    lsmod | grep ftp
     modprobe nf_conntrak_ftp
    yum install vsftpd
    cp /etc/issue /var/ftp/pub
    ls -l /var/ftp/pub/
    systemctl start vsftpd.service
    ss -tnl
    systemctl status vsftpd.service
    iptables-save > /root/iptables `date +%F`
    iptables -P INPUT ACCEPT
    iptables -P OUTPUT ACCEPT
    iptables -P FORWARD ACCEPT
    iptables -vnL --line-numbers
    iptables -F
    iptables-restore < /root/iptables2017-05-01
    iptables -vnL
    lsmod | grep ftp
    iptables -I iNPUT -d 172.18.251.117 -p tcp -m multiport --dports 21:23,80 -m state --state NEW -j ACCEPT
    iptables -I INPUT -d 172.18.251.117 -p tcp -m state --state RELATED,ESTABLELISHED -j ACCEPT
    iptables -vnL --line-numbers
    #web端访问ftp://172.18.251.117/pub
    

    如何保存和重载规则:
    保存规则至指定文件
    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

    关于firewalld:
    firewalld文章

    示例:
    网络防火墙: 放行 telnet,ftp ,web服务

    规划图
    #192.168.16.113 内部服务器端
    echo " hellow world" > /var/httpd/html/index.html
    systemctl start httpd
    systemctl status httpd
    yum install vsftpd
    cp /etc/fstab   /var/ftp/pub
    systemctl start vsftpd
    #网络防火墙端
    lsmod | grep ftp 
    modprobe nf_conntrack_ftp
    iptables -vnL
    iptables -A FORWARD -m state --state ESTAVLISHED,RELATED -j ACCEPT
    iptables -A FORWARD -d 192.168.16.113 -p tcp -m multiport --dport 21,22,80 -m state --state NEW -j ACCEPT
    iptables -vnL 
    #172.18.251.117外部主机端
    curl 192.168.16.113
    lftp 192.168.16.113
    #注意:
    telnet :23/tcp
    samba: 137/udp,138/dup,139/tcp/445/tcp
    dns: INPUT :53/dup, OUTPUT :53/udp
    #核心转发: 
                    /pro/sys/net/ipv4/ip_forward
                    /etc/sysct.conf
                     net.ipv4.ip_forward = 1
    
    

    iptables:
    nat : Network Address Translation , 安全性,网络层+传输层
    proxy : 代理,应用层
    nat:
    SNAT : 只修改请求报文的源地址;
    DNAT : 只修改请求报文的目标地址;
    nat 表:
    PREROUTING : DNAT
    OUTPUT
    POSTROUTING : SNAT
    源地址转换:

    iptables -t nat  -A POSTROUTING -s LocalNet ! -d LocalNet -j SANT --to-source ExtIP
    iptables -t nat -A POSTROUTING -s LocalNet !  -d LocalNet -j MASQUERADE
    

    目录地址转换:

    iptables -t nat -A PREROUTING -d ExtIP -p tcp| udp --dport  PORT -j DNAT --to-destination InterServerIP
    

    示例:

    # 内部主机192.168.164.122 需要访问外部web主机172.18.250.233
    iptables -t nat -A POSTROUTING -s 192.168.164.0/24 ! -d 192.168.164.0/24 -j SNAT --to source 172.18.250.222
    #外部主机192.168.164.122 访问外部地址 192.168.164.144 发生地址转换
    iptables -t nat -A PREROUTING -d 192.168.164.144 -p tcp --dport 80 -j  DNAT --to-destination 172.18.252.209
    

    相关文章

      网友评论

          本文标题:iptables知识点总结

          本文链接:https://www.haomeiwen.com/subject/kcdazttx.html