Server - Apache - 日志 - 使用 mod_security 记录请求 body
-
概述
- 尝试记录 post 请求里的内容
-
背景
- 之前试过 dumpio 模块
- 成功了
- 但是效果不好
- 这次决定尝试下 mod_security
- 之前试过 dumpio 模块
-
环境
- 虚拟机 - OS
- VirtualBox6.0
- CentOS7.2
- apache
- 2.4.6-90
- yum 安装
- 宿主机 - OS
- Win10
- 网络
- 虚拟机使用 桥接模式
- 虚拟机 - OS
1. 思路
-
概述
- 简单思路
-
思路
- 校验模块
- 安装模块
- 理解配置
- 修改配置
- 验证日志
-
书上
- 反正也说的很简单, 我就略过了
- 反正最后也基本不会有啥用
- 反正也说的很简单, 我就略过了
1. 校验模块
-
概述
- 校验当前 apache 加载的模块
-
命令
# 1. 显示当前 httpd 加载的模块 # 2. 配合 grep 加载查看具体模块 > httpd -M | grep 'security'
-
结果
- 模块没有安装
- 那就装
- 模块没有安装
2. 安装模块
-
概述
- 添加 mod_security
-
安装 mod_security
-
概述
- 两个方案
- 编译安装
- yum 安装
- 两个方案
-
编译安装
- 略
- 自己也装上过, 但是感觉这块还是不熟悉
- 略
-
yum 安装
-
使用的版本, 是 modsecurity2
-
命令
# 记得使用 rpm 验证 > yum install -y mod_security mod_security-devel
-
-
-
重启 apache
-
命令
# 确保安装成功后, 记得重启 httpd > apachectl graceful
-
3. 理解配置
-
概述
- 简单描述下 新增的配置项
-
配置文件
- /etc/httpd/conf/httpd.conf
- 没有一点变化
- /etc/httpd/conf.d
- mod_security.conf
- 新增的配置文件
- 里面是 mod_security 的 主要配置
- mod_security.conf
- /etc/httpd/conf.modules.d
- 10-mod_security.conf
- module 的导入文件
- 导入 mod_security 和其他相关模块
- module 的导入文件
- 10-mod_security.conf
- /etc/httpd/conf/httpd.conf
4. 修改配置
- 概述
- 尝试使用 mod_security 记录 body 日志
1. 检查加载
-
概述
- 检查模块是否加载
-
命令
# 如果没有发现 security2, 请确保安装成功, 并尝试重启 httpd > http -M | grep 'security2_module'
-
疑问
- yum 一下, 重启 httpd 就能用了?
- 是的没错...
- yum 一下, 重启 httpd 就能用了?
2. 尝试1: 直接开启, 观察反应
-
前提
- 之前步骤验证通过
-
结果
- log 目录下, 多了文件, 但是没有内容
- modsec_audit.log
- modsec_debug.log
- log 目录下, 多了文件, 但是没有内容
-
疑问
- 模块加载了, 难道是 配置不对?
- 结果
- 得去查 mod_security 的相关文档
3. 尝试2: 修改配置
-
配置 SecAuditLogRelevantStatus
-
概述
- 配置 安全审计日志 关注的返回状态
-
默认值
# 文档上说, 是记录 4XX, 5XX 中除了 404 以外的值 # 文档里说的是 正则, 但是它给的表达式, 我是真的没看懂... SecAuditLogRelevantStatus "^(?:5|4(?!04))"
-
尝试
# 暂时造不出 4xx, 5xx, 我改下配置试试 # 改完记得重启服务器 SecAuditLogRelevantStatus "200"
-
-
结果
-
日志如下
--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--
-
结果
- 日志很清楚
- 记录下的信息, 很多
- A
- 访问时间
- 访问 ip
- 源端口
- 目的 ip
- 目的端口
- B
- 请求头部
- C
- 请求 body
- F
- 响应头部
- E
- 响应 body
- H
- 其他信息
- Z
- 未知
- A
- 形式
- 相比 dumpio, 也好很多
- 内容清晰明了
- 而且还和 error 日志分开, 便于分析整理
- 相比 dumpio, 也好很多
- 记录下的信息, 很多
- 日志很清楚
-
5. 日志验证
- 概述
- 上一部分一起讲了, 这里就不再复述
2. 屏蔽 mod_security
-
概述
- 尝试 屏蔽 mod_security 模块
-
想法
- 模块感觉很不错
- 但是如果不需要, 我也想把它关了
-
尝试: 干掉 conf.module.d 里的 配置文件
-
命令
> mv 10-mod_security.conf 10-mod_security.conf.bak > apachectl graceful
-
验证
# 验证成功, 模块没有被加载 > httpd -M | grep security
-
-
后续
- 如果有需要, 会整理下 mods_ecurity 的相关配置
- 那个正则真的看的我蒙蔽, 是不是需要复习一下了...
其他
-
ref
-
编译安装
- 感觉这块真的是 完全不会
- 以后有需要再看吧
-
正则
- 那个正则让我一脸懵逼
- 回头复习
- 那个正则让我一脸懵逼
-
模块安装
- 感觉
- 书上写的并不靠谱
- 思路
- yum 安装
- 优点
- 方便. yum 好后, 直接重启 apache 就行
- 缺点
- 版本无法指定
- 优点
- 编译安装
-
前提
- yum 没有模块
- yum 版本不对
-
优点
- 灵活
-
缺点
- 流程复杂
- 主要是我不熟悉
- 编译有点慢
- 还是我的缺点, 电脑不好...
- 流程复杂
-
- 选择
- 如果没有特殊要求, 我愿意先使用 yum 来安装
- 尝试一下使用
- 顺便找找 不足
- 而且安装, 维护也比较方便
- 如果没有特殊要求, 我愿意先使用 yum 来安装
- yum 安装
- 感觉
-
其他
- 这些日志, 如果多起来, 绝对令人头痛
- 看来那些管理日志的工具, 还真的学一学
- 这些日志, 如果多起来, 绝对令人头痛
尽量尝试解释清楚; 自己校对能力有限, 如果有错误欢迎指出