day52--综合架构扩展安全服务篇

iptables防火墙概述介绍

    概念: 防火墙将不安全的网络流量信息进行隔离
    实现: 硬件(思科 华为)  软件(iptable firewalld)
    准备: 
    1) 网络知识 OSI (2(mac) 3(IP) 4(port))  
    2) 名词概念 什么是容器 iptables防护墙服务组成
                防火墙服务(容器)    --- 表概念
                防火墙服务表(容器)  --- 链概念
                防火墙链(容器)      --- 规则
                配置防火墙:  开启防护墙服务 --- 指定表 --- 指定链 --- 指定规则        
       表的概念 4张表  filter(过滤)          NAT(映射/转发)                 mangle(流量数据包进行标记)
                       raw(取消标记)
       链的概念 5个链  INPUT FORWARD OUTPUT  PREROUTING POSTROUTING OUTPUT  INPUT FORWARD OUTPUT PREROUTING POSTROUTING
                       PREROUTING OUTPUT
       
       vlan 虚拟局域网  
       sw 01  -  10   vlan10   hostA  data数据包 --> 01 sw vlan10  --> data数据包+tag:10
       sw 11  -  21   vlan20

iptables防火墙工作原理

    基础工作原理: 
    1.  防火墙是层层过滤的,实际是按照配置规则的顺序从上到下,从前到后进行过滤的。
    2.  如果匹配上规则,即明确表示是阻止还是通过,数据包就不再向下匹配新的规则。
    3.  如果规则中没有明确表明是阻止还是通过的,也就是没有匹配规则,向下进行匹配,直到匹配默认规则得到明确的阻止还是通过。
    4.  防火墙的默认规则是所有规则执行完才执行的。

iptables表和链关系详细说明

    filter表: 真正起到防火墙功能
    INPUT链:   流量在进入时进行访问控制
    OUTPUT链:  流量在出去是进行访问控制
    forward链: 流量是否可以经过防火墙 
    
    nat表:    实现访问映射/流量转发  实现内网访问外网/外网访问映射到指定内网主机

    准备工作:
    01. 安装部署iptables服务
    yum install -y iptables-services
    02. 查看一些默认iptables配置策略
    iptables -L -n
    iptables -nL
    Chain INPUT (policy ACCEPT)
    target     prot opt source               destination         
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
    ACCEPT     icmp --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     all  --  0.0.0.0/0            0.0.0.0/0           
    ACCEPT     tcp  --  0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    
    Chain FORWARD (policy ACCEPT)
    target     prot opt source               destination         
    REJECT     all  --  0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    
    Chain OUTPUT (policy ACCEPT)
    target     prot opt source               destination    
    [root@firewall-server ~]# iptables -nL -v
    Chain INPUT (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
      860 1379K ACCEPT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            state RELATED,ESTABLISHED
        0     0 ACCEPT     icmp --  *      *       0.0.0.0/0            0.0.0.0/0           
        0     0 ACCEPT     all  --  lo     *       0.0.0.0/0            0.0.0.0/0           
        2   104 ACCEPT     tcp  --  *      *       0.0.0.0/0            0.0.0.0/0            state NEW tcp dpt:22
        4   381 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    
    Chain FORWARD (policy ACCEPT 0 packets, 0 bytes)
     pkts bytes target     prot opt in     out     source               destination         
        0     0 REJECT     all  --  *      *       0.0.0.0/0            0.0.0.0/0            reject-with icmp-host-prohibited
    
    Chain OUTPUT (policy ACCEPT 754 packets, 108K bytes)
     pkts bytes target     prot opt in     out     source               destination 


    03. iptable初始化操作: 清除操作
    iptables -F
    iptables -X
    iptables -Z
    
    
    练习01: 
    阻止任意用户访问22端口  -- INPUT
    iptables -t filter -A INPUT -p tcp --dport 22 -j DROP
    阻止任意用户访问22端口  -- OUTPUT
    iptables -t filter -A OUTPUT -p tcp --sport 22 -j DROP
    
    练习02:
    允许10.0.0.1主机访问22端口,其他网段,其他主机不能访问  -- INPUT
    iptables -A INPUT -s 10.0.0.1 -d 10.0.0.81 -p tcp --dport 22 -j ACCEPT 
    iptables -A INPUT -s 10.0.0.0/24 -p tcp --dport 22 -j DROP  
    允许10.0.0.1主机访问22端口,其他网段,其他主机不能访问  -- OUTPUT
    iptables -A OUTPUT -d 10.0.0.1 -s 10.0.0.81 -p tcp --sport 22 -j ACCEPT 
    iptables -A OUTPUT -d 10.0.0.0/24 -p tcp --sport 22 -j DROP
    
    练习03:
    允许所有通过eth0流量访问22端口, 拒绝通过eth1接口访问22端口  --INPUT链
    iptables -A INPUT -i eth0 -p tcp --dport 22 -j ACCEPT
    iptables -A INPUT -i eth1 -p tcp --dport 22 -j DROP
    允许所有通过eth0流量访问22端口, 拒绝通过eth1接口访问22端口  --OUTPUT链
    iptables -A OUTPUT -o eth0 -p tcp --sport 22 -j ACCEPT
    iptables -A OUTPUT -o eth1 -p tcp --sport 22 -j DROP

    练习04:
    除了10.0.0.1这个地址可以访问22端口,其余所有地址都不能通过eth0端口访问22端口  ---INPUT
    方法一: 做取反操作  --- 默认策略是允许
    iptables -A INPUT ! -s 10.0.0.1 -i eth0 -p tcp --dport 22 -j DROP
    
    方法二: 修改默认策略
    iptables -A INPUT    -s 10.0.0.1 -i eth0 -p tcp --dport 22 -j ACCEPT
    iptables -P INPUT DROP
    iptables -t 表 -P 链 动作
    
    插入指定规则信息
    iptables -I INPUT 3 -s 10.0.0.0/24 -i eth0 -p tcp --dport 24 -j ACCEPT
    
    显示规则序号信息
    iptables -nL --line-number

    删除指定规则信息:
    iptables -D INPUT  2

    修改指定规则信息
    iptables -R INPUT 2 -s 10.0.0.0/24 -i eth0 -p tcp --dport 24
    
    练习题: 05
    如何阻止用户访问防火墙服务器的多个端口 
    连续的多个端口   22-80
    iptables -A INPUT -s 10.0.0.100 -p tcp --dport 22:80 -j DROP    
    不连续的多个端口 22,80,3306
    iptables -A INPUT -s 10.0.0.100 -m  multiport -p tcp --dport 23,25,27,80 -j DROP    -

    练习题: 06
    实现主机访问禁ping
    icmp协议: icmp数据包分类 
    type 8: 表示ping包请求流量
    type 0: 表示ping包响应流量
    
    别人访问防火墙服务器
    主机X -icmp type 8-> 阻止 防火墙服务器
    iptables -I INPUT -s 10.0.0.31 -p icmp  --icmp-type 8 -j DROP   icmp请求流量做阻止
    
    主机x -icmp type 0-> 阻止 防火墙服务器
    iptables -I OUTPUT -d 10.0.0.31 -p icmp --icmp-type 0 -j DROP   icmp响应流量做阻止
    
    防火墙服务器不能ping其他主机
    防火墙   -icmp type 8->    其他主机
    iptables -A OUTPUT -p icmp --icmp-type 8 -j DROP

    防火墙   <-icmp type 0-     其他主机 
    iptables -A INPUT  -p icmp --icmp-type 0 -j DROP
    
    在一个INPUT 阻止进入 0 和 8 流量
    iptables -A INPUT -p icmp -m icmp --icmp-type any -j DROP
    
    练习题:07
    利用防火墙限制数据包数量 == 网络流量限速
    -m limit --limit n/{second/minute/hour}    一定时间内可以产生传输多少个数据包
             --limit-burst [n]                 到达阈值之后进行限速
    iptables -A INPUT -s 10.0.0.31 -p icmp --icmp-type 8 -m limit --limit 6/min --limit-burst 5 -j ACCEPT
    iptables -P INPUT DROP

企业实际配置过程

    第一个里程: 确认filter表中所有链默认策略
    链上默认规则为允许: 配置了黑名单功能   逛公园(谁不能进公园)
    连上默认规则为阻止: 配置了白名单功能   看电影(买票)          *
    iptables -P INPUT DROP 
    iptables -P FORWARD DROP 
    iptables -P OUTPUT ACCEPT 
    
    第二个里程: 按照流程配置防火墙规则信息(INPUT链配置)
    iptables -A INPUT -s 10.0.0.0/24  -p tcp --dport 22 -j ACCEPT
    iptables -P INPUT DROP 
    iptables -P FORWARD DROP 
    iptables -P OUTPUT ACCEPT 
    设置换回接口可以进行通讯   
    逻辑接口: loopback
    01. 系统中作用: 可以自己ping自己网卡地址
    02. 在网络环境: 可以作为管理接口进行远程连接使用
    iptables -A INPUT -i lo -j ACCEPT
    iptables -A OUTPUT -o lo -j ACCEPT  不用配置 
    允许访问的白名单主机地址信息
    iptables -A INPUT -s 124.43.62.96/27 -p all -j ACCEPT
    iptables -A INPUT -p tcp --dport 80 -j ACCEPT 
    iptables -A INPUT -p tcp --dport 443 -j ACCEPT
    
    第三个里程: 保存配置信息
    防火墙配置说明:
    iptable命令配置防火墙策略信息时, 是临时配置, 防火墙服务重启或者系统重启, 所有配置失效
    
    如何永久保留配置信息:
    方法一: centos6 
    /etc/init.d/iptables save
    方法二: 
    iptables-save > /etc/sysconfig/iptables
    方法三:
    直接编写配置文件
    /etc/sysconfig/iptables

防火墙NAT表配置方法

    prerouting:   可以实现外网用户访问内网主机   跳板机+vpn
    postrouting:  可以实现内网主机访问外网
    
    实践: 实现内网主机访问外网
    第一个里程: 修改内网网卡网关信息
    cat /etc/sysconfig/network-scripts/ifcfg-eth1
    GATEWAY=172.16.1.81
    DNS1=223.5.5.5
    确保防火墙可以允许内网主机ping网关测试
    iptables -A INPUT -p icmp --icmp-type 8 -j ACCEPT
    
    第二个里程: 开启服务器路由转发功能  ???
    echo "net.ipv4.ip_forward = 1" >>/etc/sysctl.conf 
    sysctl -p /etc/sysctl.conf 
    
    第三个里程: 配置防火墙postrouting链  == 完成了地址转换功能 将私网地址转换为公网地址  NAT
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0     -j SNAT --to-source 10.0.0.81
    命令      表        链            要映射源地址  在哪做映射   做什么映射    映射什么地址
    iptables -t nat -A POSTROUTING -s 172.16.1.0/24 -o eth0 -j MASQUERADE   --- 外网接口地址不固定时
    
    第四个里程: 配置FORWARD链信息
    iptables -A FORWARD -i eth1 -s 172.16.1.0/24 -j ACCEPT 
    iptables -A FORWARD -o eth0 -s 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -i eth0 -d 172.16.1.0/24 -j ACCEPT
    iptables -A FORWARD -o eth1 -d 172.16.1.0/24 -j ACCEPT
    
    实践: 实现外网主机访问内网服务器
    配置防火墙nat中prerouting链规则
    iptables -t nat -A PREROUTING -d 10.0.0.81 -i eth0 -p tcp --dport 9000 -j DNAT --to-destination 172.16.1.31:22
    

    A 服务器  <-01- 主机01(肉鸡)
              <-02- 主机02(肉鸡)       攻击者A  DDOS  
              <-03- 主机03(肉鸡)              

iptables防火墙自定义链配置 == 变量功能

    iptables -N syn-flood                               --- 创建自定义链   == 创建一个变量  syn-flood    
         
    iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN   --- 创建自定义链规则  === 设置变量的值
    iptables -A syn-flood -j DROP

    iptables -A INPUT -i eth0 -syn -j syn-flood         --- 调用自定义链   == 调用变量
    
    iptables -A INPUT -i eth0 -syn -m limit -limit 5000/s -limit-burst 200 -j RETURN
    iptables -A INPUT -i eth0 -syn -j DROP
    网络: 控制syn泛洪攻击
    
    A 攻击者      --01 syn01 -->        B(服务器)
                  <-02 syn ack--
                  03 不发出             syn_rcvd  
                  --01 syn02 -->
                  <-02 syn ack--
                  03 不发出             syn_rcvd
    
    iptables -N syn-flood
    # 创建一个syn-flood自定义链
    iptables -A INPUT -i eth0 -syn -j syn-flood
    # 将INPUT链中抓取的syn数据流量都放入到syn-flood自定义链中
    iptables -A syn-flood -m limit -limit 5000/s -limit-burst 200 -j RETURN
    # 一旦获取到流量大于每秒5000,并发大于200时,就执行下一条规则
    iptables -A syn-flood -j DROP
    # 丢弃syn-flood链上的数据
    
    自定义链实际作用:
    
    防火墙服务器: 8080:8090
    允许 172.16.1.0/24 网段访问   iptables -A INPUT -s 172.16.1.0/24 -p tcp --dport 8080 -j ACCEPT
    允许 172.17.1.0/24 网段访问   iptables -A INPUT -s 172.17.1.0/24 -p tcp --dport 8080 -j ACCEPT
    允许 172.18.1.0/24 网段访问   iptables -A INPUT -s 172.18.1.0/24 -p tcp --dport 8080 -j ACCEPT
    ...
    允许 172.100.1.0/24 网段访问
    
    创建自定义链:
    iptables -N oldboy 
    
    设置自定义链规则:
    iptables -A oldboy -p tcp --dport 8080 -j ACCEPT 
    调整自定义链规则
    iptables -R oldboy 1 -p tcp --dport 8080:8090 -j ACCEPT 
    
    调用自定义链:
    iptables -A INPUT -s 172.16.1.0/24 -j oldboy
    iptables -A INPUT -s 172.17.1.0/24 -j oldboy
    iptables -A INPUT -s 172.18.1.0/24 -j oldboy

iptables命令常用参数说明

    查询参数
    --list    -L [chain [rulenum]]     List the rules in a chain or all chains
                                       列出链上规则配置信息(默认查看filter表上信息)
    --table   -t table                 table to manipulate (default: `filter')  
                                       指定操作处理哪张表  默认处理 filter表  
    --verbose -v                       verbose mode 
                                       显示详细规则配置信息                                      
    --numeric -n                       numeric output of addresses and ports
                                       查询信息中 地址和端口以数字形式显示                                  
    --line-numbers                     print line numbers when listing
                                       输出规则行号信息

    清除参数:
    --flush   -F [chain]               Delete all rules in  chain or all chains 
                                       清除链上所有规则信息    
    --zero    -Z [chain [rulenum]]     Zero counters in chain or all chains
                                       清除计数器信息(排查) 
                                       pkts:   匹配了几个包                 5个包 每个包1500字节
                                       bytes:  匹配数据包总共尺寸/访问流量  5*1500字节
              -X [chain]               Delete a user-defined chain
                                       删除用户自定义链 ???

    添加规则参数:
    --append   -A chain                Append to chain
                                       指定规则添加到哪个链上
    --insert   -I chain [rulenum]       Insert in chain as rulenum (default 1=first)    
                                       在指定链上插入规则(默认插入到第一条规则之上)  

    --protocol -p proto                protocol: by number or name, eg. `tcp'
                                       指定规则匹配的协议: tcp udp icmp ???
                                       
    --dport 端口                       规则匹配的目标端口信息    
    --sport 端口                       规则匹配的源端口信息 
    
    --source    -s address[/mask][...]    source specification
                                          指定规则匹配的源地址信息
    --destination -d address[/mask][...]  destination specification 
                                          指定规则匹配的目标地址信息
                                          
    --in-interface -i input name[+]       network interface name ([+] for wildcard)
                                          根据进入流量,在网卡进行规则配置
    --out-interface -o output name[+]     network interface name ([+] for wildcard)
                                          根据流出流量,在网卡进行规则配置
                                      

    --jump     -j target               target for rule (may load target extension)
                                       指定处理策略动作: ACCEPT *  DROP *  REJECT 
                                       
    删除指定规则:
     --delete  -D chain                Delete matching rule from chain
                                       删除指定规则信息
    
    修改默认策略:
    --policy  -P chain target          Change policy on chain to target
                                       修改指定链上默认策略
                                       
    修改指定策略:
    --replace -R chain rulenum         Replace rule rulenum (1 = first) in chain    
                                       修改指定规则策略
                                       
    扩展参数信息
    --match   -m match                 extended match (may load extension)  
                                       可以加上扩展匹配信息
                                       
    策略处理方法:
    ACCEPT     允许接收
    DROP       丢弃     *  更安全
    REJECT     拒绝

你可能感兴趣的:(day52--综合架构扩展安全服务篇)