35、等保2.0 Nginx中间件测评 安全审计

nginx是一款自由的、开源的、高性能的HTTP服务器和反向代理服务器,一般主要功能会有两种,一种作为一个HTTP服务器进行网站的发布处理,另外一种nginx可以作为反向代理进行负载均衡的实现。所以这里填主要功能的时候就要分清。

安全审计

a)应启用安全审计功能,审计覆盖到每个用户,对重要的用户行为和重要安全事件进行审计

针对于各类的中间件来说,日志一般会分为两种,一种是 error.log 错误日志,另一种是 access.log 网页访问日志。都开启的情况下,我们就可以判符合(前提日志级别配置正确)。

先来看一下 errlog_log

error_log:设置服务器运行的相关日志

设置格式

error_log 路径 级别

默认值:error_log logs/error.log error;

配置段:main,http,server,location

关闭error_log:error_log off

日志的级别

debug:调试级别,记录的信息最多;

info:普通级别;

notice:可能需要注意的信息;

warn:警告消息;

error:错误消息;

crit:严重错误消息;

access_log

访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息。

access_log:用来配置访问日志的输出格式和输出的路径;

语法: access_log path [format [buffer=size [flush=time]]];

默认值: access_log logs/access.log combined;

后续版本好像有变更,默认为 main;

配置段: http, server, location, if in location, limit_except

关闭access_log:access_log off

path:指定日志的存放位置

format:指定日志的格式。默认使用预定义的combined

buffer:用来指定日志写入时的缓存大小。默认是64k

gzip:日志写入前先进行压缩。压缩率可指定,从1到9数值越大压缩比越高,同时压缩的速度也越慢。默认是1。

flush:设置缓存的有效时间。如果超过flush指定的时间,缓存中的内容将被清空。

if:条件判断。如果指定的条件计算为0或空字符,那么当前作用域下的所有的请求日志都会被关闭。

所以我们这里先在 Nginx 主目录下找到conf文件夹

其中会有一个叫 nginx.conf 的文件

查看对应error_log和access_log配置情况,默认情况下都是为注释状态

若为注释状态,nginx 会有一个默认值,如下:

error_log logs/error.log error;

access_log logs/access.log main;

b)审计记录应包括事件的日期和时间、用户、事件类型、事件是否成功及其他与审计相关的信息

日志文件在nginx主目录下的log目录中

默认情况下都是满足条款要求的,比如查看一下 access.log 日志

另外考虑的点就是日志记录的时间是否准确,中间件时间一般跟随操作系统时钟,如果操作系统时间正确,那么基本也不会有问题。

或者我们可以去配置文件中,配置我们自己想要的日志记录内容。

对应参数:log_format

log_format:用来设置日志格式

nginx的log_format有很多可选的参数用于标示服务器的活动状态,默认为:

‘$remote_addr – $remote_user [$time_local] “$request” ‘ ‘$status $body_bytes_sent “$http_referer” ‘ ‘”$http_user_agent” “$http_x_forwarded_for”‘;

如果要记录更详细的信息需要自己修改log_format,具体可设置的参数格式及说明如下:

这条日志是之前实验访问应用留下的,我们可以分析一下。

192.168.21.176 - - [28/Sep/2020:14:34:48 +0800] “GET /favicon.ico HTTP/1.1” 404 555 “-” “Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36”

参数 说明 示例
$remote_addr 客户端地址 192.168.21.176
$remote_user 客户端用户名称
$time_local 访问时间和时间 [28/Sep/2020:14:34:48 +0800]
$request 请求的URI和HTTP协议 “GET /favicon.ico HTTP/1.1”
$http_host 请求地址,即浏览器中你输入的地址(域名或IP) www.test.com
192.168.0.23
$status HTTP请求状态 404
$upstream_status upstream状态
$body_bytes_sent 服务器发送客户端的相应body字节数 555
$http_referer url跳转来源 -
https://www.google.com/
$http_user_agent 用户终端浏览器等信息 “Mozilla/5.0 (Windows NT……"
$http_x_forwarded_for 当前端有代理服务器时,设置web节点记录客户端地址的配置,此参数生效的前提是代理服务器也要进行相关的x_forwarded_for设置
$ssl_protocol SSL协议版本 TLSv1
$ssl_cipher 交换数据中的算法 Rc4-SHA
$upstream_addr 后台upstream的地址,即真正提供服务的主机地址 10.36.10.80:80
$request_time 整个请求的总时间 0.165
$upstream_response_time 请求过程中,upstream响应时间 0.002

所以如果想要记录更详细,可以自己进行配置。

c)应对审计记录进行保护,定期备份,避免受到未预期的删除、修改或覆盖等

1. 确认本机的日志文件权限

确认是否仅管理员组具有日志的管理权限,其他组没有修改权限

如users组无权管理修改

Linux系统下同理,对应的日志文件不高于644

2. 是否对日志文件进行定期备份

这个好像默认自带的方式没有找到,那么就去询问一下运维人员,是否有备份措施对中间件日志进行备份。

一般有的现场看到好像是通过FTP同步,会将日志文件同步一份到备份服务器上。

3. 日志留存时间

查看日志留存时间是否达到6个月以上,满足法律法规要求。

d)应对审计进程进行保护,防止未经授权的中断

审计进程与中间件主进程关联,无法单独中断审计进程,只要开启即符合。