Server - Apache - 日志 - 使用 mod_security 记录请求 body

  1. 概述

    1. 尝试记录 post 请求里的内容
  2. 背景

    1. 之前试过 dumpio 模块
      1. 成功了
      2. 但是效果不好
    2. 这次决定尝试下 mod_security
  3. 环境

    1. 虚拟机 - OS
      1. VirtualBox6.0
      2. CentOS7.2
    2. apache
      1. 2.4.6-90
      2. yum 安装
    3. 宿主机 - OS
      1. Win10
    4. 网络
      1. 虚拟机使用 桥接模式

1. 思路

  1. 概述

    1. 简单思路
  2. 思路

    1. 校验模块
    2. 安装模块
    3. 理解配置
    4. 修改配置
    5. 验证日志
  3. 书上

    1. 反正也说的很简单, 我就略过了
      1. 反正最后也基本不会有啥用

1. 校验模块

  1. 概述

    1. 校验当前 apache 加载的模块
  2. 命令

    # 1. 显示当前 httpd 加载的模块
    # 2. 配合 grep 加载查看具体模块
    > httpd -M | grep 'security'
    
  3. 结果

    1. 模块没有安装
      1. 那就装

2. 安装模块

  1. 概述

    1. 添加 mod_security
  2. 安装 mod_security

    1. 概述

      1. 两个方案
        1. 编译安装
        2. yum 安装
    2. 编译安装

        1. 自己也装上过, 但是感觉这块还是不熟悉
    3. yum 安装

      1. 使用的版本, 是 modsecurity2

      2. 命令

        # 记得使用 rpm 验证
        > yum install -y mod_security mod_security-devel
        
  3. 重启 apache

    1. 命令

      # 确保安装成功后, 记得重启 httpd
      > apachectl graceful
      

3. 理解配置

  1. 概述

    1. 简单描述下 新增的配置项
  2. 配置文件

    1. /etc/httpd/conf/httpd.conf
      1. 没有一点变化
    2. /etc/httpd/conf.d
      1. mod_security.conf
        1. 新增的配置文件
        2. 里面是 mod_security 的 主要配置
    3. /etc/httpd/conf.modules.d
      1. 10-mod_security.conf
        1. module 的导入文件
          1. 导入 mod_security 和其他相关模块

4. 修改配置

  1. 概述
    1. 尝试使用 mod_security 记录 body 日志

1. 检查加载

  1. 概述

    1. 检查模块是否加载
  2. 命令

    # 如果没有发现 security2, 请确保安装成功, 并尝试重启 httpd
    > http -M | grep 'security2_module'
    
  3. 疑问

    1. yum 一下, 重启 httpd 就能用了?
      1. 是的没错...

2. 尝试1: 直接开启, 观察反应

  1. 前提

    1. 之前步骤验证通过
  2. 结果

    1. log 目录下, 多了文件, 但是没有内容
      1. modsec_audit.log
      2. modsec_debug.log
  3. 疑问

    1. 模块加载了, 难道是 配置不对?
    2. 结果
      1. 得去查 mod_security 的相关文档

3. 尝试2: 修改配置

  1. 配置 SecAuditLogRelevantStatus

    1. 概述

      1. 配置 安全审计日志 关注的返回状态
    2. 默认值

      # 文档上说, 是记录 4XX, 5XX 中除了 404 以外的值
      # 文档里说的是 正则, 但是它给的表达式, 我是真的没看懂...
      SecAuditLogRelevantStatus "^(?:5|4(?!04))"
      
    3. 尝试

      # 暂时造不出 4xx, 5xx, 我改下配置试试
      # 改完记得重启服务器
      SecAuditLogRelevantStatus "200"
      
  2. 结果

    1. 日志如下

      --26b87c3b-A--
      [10/Mar/2020:14:10:07 +0800] XmcvP-Q2Il5IiC7G9bslrQAAAAA 192.168.2.6 51334 192.168.2.6 80
      --26b87c3b-B--
      POST /hello.html HTTP/1.1
      User-Agent: curl/7.29.0
      Host: 192.168.2.6
      Accept: */* 
      Content-Length: 16
      Content-Type: application/x-www-form-urlencoded
      
      --26b87c3b-C--
      {"key": "value"}
      --26b87c3b-F--
      HTTP/1.1 200 OK
      Last-Modified: Fri, 06 Mar 2020 16:37:46 GMT 
      ETag: "f-5a03245f92c80"
      Accept-Ranges: bytes
      Content-Length: 15
      Content-Type: text/html; charset=UTF-8
      
      --26b87c3b-E--
      
      --26b87c3b-H--
      Stopwatch: 1583820607575206 624 (- - -)
      Stopwatch2: 1583820607575206 624; combined=37, p1=25, p2=10, p3=0, p4=0, p5=2, sr=0, sw=0, l=0, gc=0
      Response-Body-Transformed: Dechunked
      Producer: ModSecurity for Apache/2.9.2 (http://www.modsecurity.org/).
      Server: Apache/2.4.6 (CentOS)
      Engine-Mode: "ENABLED"
      
      --26b87c3b-Z--
      
    2. 结果

      1. 日志很清楚
        1. 记录下的信息, 很多
          1. A
            1. 访问时间
            2. 访问 ip
            3. 源端口
            4. 目的 ip
            5. 目的端口
          2. B
            1. 请求头部
          3. C
            1. 请求 body
          4. F
            1. 响应头部
          5. E
            1. 响应 body
          6. H
            1. 其他信息
          7. Z
            1. 未知
        2. 形式
          1. 相比 dumpio, 也好很多
            1. 内容清晰明了
            2. 而且还和 error 日志分开, 便于分析整理

5. 日志验证

  1. 概述
    1. 上一部分一起讲了, 这里就不再复述

2. 屏蔽 mod_security

  1. 概述

    1. 尝试 屏蔽 mod_security 模块
  2. 想法

    1. 模块感觉很不错
    2. 但是如果不需要, 我也想把它关了
  3. 尝试: 干掉 conf.module.d 里的 配置文件

    1. 命令

      > mv 10-mod_security.conf 10-mod_security.conf.bak
      > apachectl graceful
      
    2. 验证

      # 验证成功, 模块没有被加载
      > httpd -M | grep security
      
  4. 后续

    1. 如果有需要, 会整理下 mods_ecurity 的相关配置
    2. 那个正则真的看的我蒙蔽, 是不是需要复习一下了...

其他

  1. ref

    1. yum 安装
    2. Reference Manual (v2.x)
  2. 编译安装

    1. 感觉这块真的是 完全不会
    2. 以后有需要再看吧
  3. 正则

    1. 那个正则让我一脸懵逼
      1. 回头复习
  4. 模块安装

    1. 感觉
      1. 书上写的并不靠谱
    2. 思路
      1. yum 安装
        1. 优点
          1. 方便. yum 好后, 直接重启 apache 就行
        2. 缺点
          1. 版本无法指定
      2. 编译安装
        1. 前提

          1. yum 没有模块
          2. yum 版本不对
        2. 优点

          1. 灵活
        3. 缺点

          1. 流程复杂
            1. 主要是我不熟悉
          2. 编译有点慢
            1. 还是我的缺点, 电脑不好...
      3. 选择
        1. 如果没有特殊要求, 我愿意先使用 yum 来安装
          1. 尝试一下使用
          2. 顺便找找 不足
          3. 而且安装, 维护也比较方便
  5. 其他

    1. 这些日志, 如果多起来, 绝对令人头痛
      1. 看来那些管理日志的工具, 还真的学一学
posted @ 2020-03-10 17:26  轩辕拾銉  阅读(1062)  评论(0编辑  收藏  举报