亚马逊AWS官方博客

利用 Gateway Load Balancer 打造符合 MLPS2.0 的安全网络架构 – 日志审计篇

一、概述

在上一篇博客《利用 Gateway Load Balancer 打造符合 MLPS2.0 的安全网络架构 – 网络部署篇》中,我们详细介绍了如何围绕 AWS Gateway Load Balancer(GWLB)部署符合网络安全等级保护(MLPS2.0)的可扩展,高可用带有入侵检测能力的网络架构。在本文中,我们会继续在架构中加入 MLPS2.0 里要求的另一个重要部分,日志审计模块。

MLPS2.0 对日志集中审计有明确要求,且实际测评中对该要求越来越严格。防火墙的操作日志是重要的安全日志,需要集中到集中式日志系统中,与其他日志一起进行存储、分析。我们将在本文中介绍如何使用 Amazon CloudWatch 作为集中式日志系统对防火墙进行日志收集与监控,以满足 MLPS2.0 对安全审计的要求。

二、总体架构

架构图

基本上所有的网络安全设备都能够支持 syslog 协议发送日志给日志服务器,本文会使用 EC2 构建日志服务器,使用系统自带的 rsyslog 后台程序,通过 syslog 协议接收来自安全设备的日志,并保存在本地文件中,再使用 CloudWatch Agent 将日志从本地文件中提取并写入 Amazon CloudWatch 的日志组里,下列为整体架构图:

三、部署

创建日志服务器 EC2 role

  • 参考此链接创建 CloudWatchAgentServerRole role,备用

创建日志服务器

  • 首先,登录 AWS 控制台,EC2 Console > Launch Instance 创建实例,在 Application and OS Images (Amazon Machine Image) 里选择 Amazon Linux 2 AMI
  • Instance type 里,选择一个 micro 实例,在实际场景中实例的选型取决于你的防火墙预期的活动量
  • Key pair (login) 里选择你已经有并可以找到的 SSH 密钥对,或选择创建新的密钥对
  • Network Settings 里,点击 EditVPC 选择 Appliance VPC,Subnet 选择 appliance2 的子网,关于安全组,你可以创建一个新的安全组或使用现有的安全组。只需确保它允许来自 Appliance 所在的子网组的 udp 514 端口的入站通信,出站通信全放通
  • 当然,你需要为 EC2 实例添加存储。因为我们将日志从这个实例发送到 CloudWatch,所以我们只需要 8G 就够
  • 展开 Advanced details,在 IAM instance profile 中,将上一步创建出来的 CloudWatchAgentServerRole Role 赋予本 EC2
  • 点击 Launch Instance 创建启动实例

在 CloudWatch 创建 Log Group,存储 Appliance 日志

  • 进入 CloudWatch 服务,Log groups > create log group, log group name 填入 my-loggroup1,日志保存时间 Retention 设置为 180 天,满足 MLPS 2.0 的日志保存时间要求;点击 Create


配置 CloudWatch Agent,将收集的日志写入 CloudWatch

  • 在日志服务器 EC2 实例中,依次运行下列命令
    sudo yum update -y
    sudo yum install -y amazon-cloudwatch-agent
    
  • 创建 config.json 配置文件
    sudo vi /opt/aws/amazon-cloudwatch-agent/bin/config.json

文件内容如下:

{
  "agent": {
    "metrics_collection_interval": 60,
    "run_as_user": "cwagent"
  },
  "logs": {
    "logs_collected": {
      "files": {
        "collect_list": [
          {
            "file_path": "/opt/aws/amazon-cloudwatch-agent/logs/test.log",
            "log_group_name": "my-loggroup1",
            "log_stream_name": "my-logstream1"
          }
        ]
      }
    }
  }  
}

  • 运行下列命令加载配置并运行 CloudWatch Agent
    export AWS_REGION=cn-northwest-1
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a fetch-config -m ec2 -c file:/opt/aws/amazon-cloudwatch-agent/bin/config.json -s
    
  • 运行下列命令检查 CloudWatch Agent 状态
    sudo /opt/aws/amazon-cloudwatch-agent/bin/amazon-cloudwatch-agent-ctl -a status

配置日志服务器 rsyslog ,从appliance 收集日志

  • 登录到上一步创建好的 EC2 实例中,rsyslog 应该已经默认在运行,若无,则执行下列命令
    sudo yum update -y
    sudo yum install -y rsyslog
    sudo service rsyslog status
    
  • 修改/etc/rsyslog.conf 文件,将下列行数的注释“#”删除
     # Provides UDP syslog reception
    	 $ModLoad imudp
    $UDPServerRun 514
    
  • 继续修改/etc/rsyslog.conf 文件,在 RULES 的部分添加下列配置
    #### RULES ####
    
    # Define the template for RemoteLogs
    $template RemoteLogs,"/opt/aws/amazon-cloudwatch-agent/logs/test.log"
    
    # Use property-based configuration to set file owner for the specific log
    if $fromhost-ip != '127.0.0.1' then {
        action(type="omfile" DynaFile="RemoteLogs" fileOwner="cwagent" fileGroup="cwagent" fileCreateMode="0640")
        stop
    }
    
  • 保存文档,运行 sudo systemctl restart rsyslog 将新的配置文件生效,然后运行下列命令检查 rsyslog 服务器状态,确保他在监听 udp 514 端口
    sudo service rsyslog status
    sudo netstat -tuln | grep 514
    

四、测试

使用用 EC2 模拟的 Appliance 进行测试:

  • 登陆 Appliance 2 运行下列命令,发送测试日志
    logger -n 192.168.1.21 -P 514 "Test message to remote server"
  •  在 CloudWatch 控制台上检查 syslog:

登录到 AWS 管理控制台,在“服务”中选择“CloudWatch”

在左侧导航栏中,点击“日志”,在日志组列表中,选择 my-loggroup1

在日志流列表中,选择 my-logstream1,在这里,您应该能够看到从 Appliance 2 发送的测试消息

使用 fortigate 防火墙测试:

  • 登陆 fortigate 防火墙,进入 Log Setting,Syslog logging 选择 Enable,在 IP address 中填入 rsyslog 服务器的 IP 地址:
  • 在 CloudWatch 控制台上检查 syslog:

登录到 AWS 管理控制台,在“服务”中选择“CloudWatch”

在左侧导航栏中,点击“日志”,在日志组列表中,选择 my-loggroup1

在日志流列表中,选择 my-logstream1,在这里,您应该能够看到从 fortigate 防火墙发送的防火墙日志:

五、总结

本文阐述了如何使用 Amazon CloudWatch 对网络安全设备进行日志收集并提供审计,监控能力以及保存至少 180 天的能力,满足网络等级保护(MLPS2.0)对日志审计的主要的核心技术要求。

六、参考文档

https://aws.amazon.com/blogs/apn/monitoring-your-palo-alto-networks-vm-series-firewall-with-a-syslog-sidecar/

本篇作者

黄俊杰

AWS 解决方案架构师,负责面向跨国企业客户的云计算方案架构咨询和设计,客户涵盖医疗、零售、咨询等行业。擅长混合云网络设计、DevOps 以及新技术钻研,对 GenAI、Web3 领域有着浓厚兴趣。

李阳

亚马逊云科技安全解决方案架构师,负责基于亚马逊云科技云原生安全服务的解决方案架构设计、咨询和落地,包括网络安全等级保护解决方案、多账号安全治理解决方案等。加入亚马逊云科技前曾在移动通信安全技术研究和标准化、国密算法及标准化、云计算安全产品管理(云安全运维审计、云应用身份管理 IDaaS)和解决方案方面有着丰富经验。

李琳

AWS 解决方案架构师,负责面向跨国企业客户的云计算方案架构咨询和设计,客户涵盖医疗、零售、制造等行业。熟悉云原生网络技术及混合云网络架构。