使用流量镜像对VPC流量进行安全审查

云上网络安全,往往是用户将核心业务部署上云时优先考虑的因素。您可使用VPC的流量镜像功能对云上网络流量的安全性进行实时检测与分析。

场景示例

某公司将核心业务部署上云,需要保证云上业务的正常运行的同时,高效且无侵入地监控阿里云ECS实例的网络流量,以识别并记录潜在的安全威胁,进行安全审查。

在本场景下,使用流量镜像,将ECS的网络流量复制到另一台部署着网络威胁检测系统的ECS上,通过配置安全规则,实时检测镜像网络流量。

image
  • 流量镜像:从目标ECS实例的弹性网卡ENI复制网络流量,并将流量转发给指定的ENI,适用于内容检查、威胁监控和问题排查等场景。

  • 流量审查:使用Suricata作为报文接收和异常检测的核心组件,因其支持VXLAN解封装、提供入侵检测(IDS)、入侵防御(IPS)和网络安全监控功能,能有效识别恶意流量模式,易与现有的Elasticsearch等可视化分析系统集成。用户也可以自行选择云市场中其他安全厂商的分析工具。

  • 日志处理与存储:通过Filebeat采集Suricata日志,通过Elasticsearch进行索引存储,在Kibana进行可视化查询、分析和展示。

  • 索引文件存储:配置Elasticsearch将经过索引标记的流量记录备份至阿里云OSS,确保数据的安全存储与长期可访问性。

前提条件

  • 已创建两个VPC,每个VPC内创建1台ECS实例。

    • 您可以结合业务需求,为ECS1绑定EIP,通过EIP提供公网服务。

    • ECS2作为镜像目的,绑定EIP访问公网,以部署Suricata。

    • 本文示例中服务器操作系统统一为Alibaba Cloud Linux 3.2104 LTS 64位

    • 确保ECS2的安全组入方向放开4789端口,允许ECS1封装的UDP协议报文访问ECS2的4789端口,以接收镜像流量。

  • 初次使用流量镜像功能时,根据提示开通流量镜像功能。

  • 镜像源和镜像目的不属于同一个VPC时,需要确保VPC间互通。本文示例通过VPC对等连接连通两个VPC。

  • 已创建阿里云Elasticsearch实例并开启Kibana公网访问将本机公网IP地址添加到白名单

操作步骤

步骤一:配置Suricata

您需要在ECS2服务器中部署Suricata,接收网络流量并进行安全审查。

  1. 登录ECS2服务器,执行如下命令,安装Suricata。

    #安装依赖
    sudo dnf install -y gcc libpcap-devel pcre-devel libyaml-devel file-devel \
                         zlib-devel jansson-devel nss-devel libcap-ng-devel libnet-devel
    
    #安装suricata
    sudo dnf install suricata -y
    
    #确保suricata自动启动
    sudo systemctl enable suricata
    sudo systemctl start suricata
  2. 配置Suricata。

    Suricata的配置存放在/etc/suricata/suricata.yaml,使用默认配置即可。

  3. 更新安全规则。

    执行suricata-update更新规则文件,默认保存在/var/lib/suricata/rules/suricata.rules

  4. 执行sudo service suricata restart重启Suricata。

步骤二:配置流量镜像

  1. 创建筛选条件。

    1. 登录专有网络管理控制台在左侧导航栏,选择运维与监控 > 流量镜像 > 筛选条件

    2. 筛选条件页面,单击创建筛选条件规则配置区域的出方向规则页签下,单击添加规则,按照默认配置添加规则,采集全部流量。

  2. 创建并启动镜像会话。

    1. 在左侧导航栏,选择运维与监控 > 流量镜像 > 镜像会话

    2. 镜像会话页面,单击创建镜像会话基础配置保持默认,关联筛选条件选择上一步创建的规则,镜像源选择ECS1的弹性网卡,镜像目的选择ECS2的弹性网卡。

    3. 镜像会话页面,找到目标镜像会话,在操作列单击启动。

  3. 流量镜像配置完成且Suricata正常运行时,会在/var/log/suricata/目录下产生一系列日志文件。

    /var/log/suricata/
    ├── certs
    ├── core
    ├── eve.json		    ##以JSON格式产生的所有捕获的flow,alert,stats等日志,以及例如HTTP等协议的应用日志
    ├── fast.log		    ##检测分析产生的alert日志
    ├── files
    ├── stats.log		    ##捕获,处理数据包数量的详细统计
    ├── suricata.log	    ##服务运行时的详细日志
    └── suricata-start.log	    ##服务启动时的详细日志

步骤三:采集并存储Suricata日志

您可以使用Filebeat将Suricata日志数据传输至阿里云Elasticsearch进行索引存储,并通过Kibana进行可视化展示与分析。

  1. 登录ECS2服务器,执行如下命令,安装Filebeat。

    curl -L -O https://artifacts.elastic.co/downloads/beats/filebeat/filebeat-7.10.0-x86_64.rpm
    sudo rpm -vi filebeat-7.10.0-x86_64.rpm
  2. 修改Suricata模块配置,指定待采集的Suricata流量日志文件。

    1. 执行sudo filebeat modules enable mysql命令,启用Suricata模块。

    2. 执行sudo vim /etc/filebeat/modules.d/suricata.yml命令,按照以下内容修改Suricata模块配置。

      - module: suricata
        # 配置采集的流量日志文件
        eve:
          enabled: true
          var.paths: ["/var/log/suricata/eve.json"]
    3. 按下Esc键,输入:wq并回车,以保存并关闭文件。

  3. 执行sudo vim /etc/filebeat/filebeat.yml配置filebeat.yml文件,设置连接信息。

    1. 修改Filebeat modules配置。

      filebeat.config.modules:
        # 全局加载
        path: /etc/filebeat/modules.d/suricata.yml
      
        # 允许动态地重新加载和应用新的配置文件或设置
        reload.enabled: true
      
        # 在设定的时间周期内系统自动检查指定路径下的文件是否有任何更改
        reload.period: 1s
    2. 修改Kibana配置。

      setup.kibana:
        host: "https://es-cn-8l**********2r7ln-kibana.cn-hangzhou.elasticsearch.aliyuncs.com:5601"

      host:Kibana的访问地址,可在Kibana配置页面获取,格式为<Kibana公网地址>:5601

    3. 修改Elasticsearch output配置。

      output.elasticsearch:
        # 配置存储日志的Elasticsearch实例
        hosts: ["http://es-cn-8ly**********r7ln.elasticsearch.aliyuncs.com:9200"]
        username: "elastic"
        password: "<your_password>"

      host:Elasticsearch的访问地址,可在实例的基本信息页面获取,格式为<实例的私网或公网地址>:9200

      username:Elasticsearch实例的访问用户名,默认为elastic。

      password:创建实例时设定的密码,若遗忘,可选择重置实例访问密码

    4. 按下Esc键,输入:wq并回车,以保存并关闭文件。

    5. 执行以下命令,将Dashboard等信息上传到Elasticsearch和Kibana中,并启用Filebeat服务。

      sudo filebeat setup
      sudo service filebeat start

步骤四:可视化分析VPC流量

  1. 登录目标Elasticsearch实例的Kibana控制台。在左侧导航栏,单击Kibana > Discover更改索引模式filebeat

  2. 您可以添加alert筛选条件,在页面右上角选择查询时间,查看对应时间段内的有潜在威胁的VPC流量。

    image

步骤五:告警验证

  1. 登录ECS1,执行curl http://testmynids.org/uid/index.html命令,模仿id命令的输出,以触发警报。

    mirror.png

    说明

    Suricata规则集中包含如下规则,当数据包的内容具有字符串值uid=0|28|root|29|并且流量被分类为未知流量时,将丢弃数据包并生成警报。

    alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)
  2. 在Kibana页面,添加GPL筛选条件,即可查看匹配到Suricata IDS特征规则“GPL ATTACK_RESPONSE id check returned root”的告警事件。mirror1.png

后续步骤:数据备份

您可以将阿里云Elasticsearch索引存储的数据备份,确保数据安全存储与长期可访问性。Elasticsearch默认开启数据自动备份,您可以将自动备份快照保存至阿里云OSS仓库

常见问题

  1. 修改Filebeat配置后如何生效?

    修改配置文件后,需要重启服务以应用新的设置。您需要执行以下命令重启Filebeat。

     sudo systemctl restart filebeat
  2. 配置流量镜像后,如何验证流量已被正确转发至镜像目的?

    登录镜像目的ECS2,执行如下命令,查看是否可以获取到报文的数据包。

    tcpdump -i eth0 udp port 4789 -nne

    vni 1为镜像会话的标识,表示镜像目的通过镜像会话,成功获取到数据包。

    mirror-test.png