记录nginx漏洞升级问题处理
1. 问题描述:
- nginx 安全漏洞(CVE-2019-9511)
- Nginx 1.9.51 至 16.0版本及1.17.2.版本中的HTTP/2实现中存在拒绝服务漏洞,攻击者以多个数据流请求特定资源上的大量数据,通过操纵窗口大小和流优先级,强迫服务器将数据排列在1字节的块中,导致CPU及内存资源耗尽,造成拒绝服务。
- nginx 安全漏洞(CVE-2019-9513)
- Nginx 1.9.51 至 16.0版本及1.17.2.版本中的HTTP/2实现中存在拒绝服务漏洞,攻击者以多个数据流请求特定资源上的大量数据,通过操纵窗口大小和流优先级,强迫服务器将数据排列在1字节的块中,导致CPU及内存资源耗尽,造成拒绝服务。
- nginx 安全漏洞(CVE-2018-16843)
- nginx 1.15.6和1.14.1之前的版本的HTTP/2实现过程中存在安全漏洞。攻击者可利用该漏洞消耗大量的内存空间。
- nginx 安全漏洞(CVE-2021-23017)
- nginx存在安全漏洞,该漏洞源于一个离一错误在该漏洞允许远程攻击者可利用该漏洞在目标系统上执行任意代码。
受影响版本:0.6.18-1.20.0
- nginx存在安全漏洞,该漏洞源于一个离一错误在该漏洞允许远程攻击者可利用该漏洞在目标系统上执行任意代码。
- nginx 安全漏洞(CVE-2018-16844)
- Nginx 1.15.5之前的版本和1.14.1版本中的HTTP/2实现过程中存在安全漏洞。远程攻击者可通过发送恶意的请求利用该漏洞造成拒绝服务。
- nginx 安全漏洞(CVE-2018-16845)
- Nginx 1.15.5及之前的版本和1.14.1版本中的ngx_http_mp4_module组件存在内存泄露漏洞,该漏洞源于程序没有正确处理MP4文件。远程攻击者可利用该漏洞获取敏感信息或造成拒绝服务。
- NGINX 环境问题漏洞(CVE-2019-20372)
- NGINX 1.17.7之前版本中存在环境问题漏洞。攻击者可利用该漏洞读取未授权的Web页面。
2.解决方案:
- nginx旧版本存在安全隐患,升级新版本,由于是线上环境,需要平滑升级。
3. nginx平滑升级经验:
1、 下载需要安装的nginx版本
下载地址:http://nginx.org/download/
我下载的是nginx-1.20.1.tar.gz
解压到任意目录:tar zxvf nginx-1.20.1.tar.gz -C /usr/local/hqb/nginx2
2、 查看nginx现有的版本以及之前的安装配置
进入nginx二进制文件所在目录:
[root@houqingbao sbin]# cd /usr/local/hqb/nginx/sbin/
[root@houqingbao sbin]# ll
总用量 7456
-rwxr-xr-x. 1 root root 3883616 7月 14 10:50 nginx
-rwxr-xr-x. 1 root root 3746632 7月 5 2021 nginx.bak
./nginx -v (查看当前版本)
./nginx -V (查看安装配置)
我的安装配置(后边需要用到):
[root@houqingbao sbin]# ./nginx -V
nginx version: nginx/1.20.1
built by gcc 4.8.5 20150623 (Red Hat 4.8.5-44) (GCC)
[root@houqingbao sbin]# configure arguments: --prefix=/usr/local/hqb/nginx
3、 按照之前的配置安装解压的nginx,按照原来的编译参数安装 nginx 的方法进行安装,只需要到 make,千万不要 make install 。如果make install 会将原来的配置文件覆盖
[root@houqingbao nginx-1.20.1]# ./configure --prefix=/usr/local/hqb/nginx
[root@houqingbao nginx-1.20.1]# make
4、 备份原来的nginx二进制文件
[root@houqingbao sbin]# mv /usr/local/hqb/nginx/sbin/nginx /usr/local/hqb/nginx/sbin/nginx.bak
5、 复制新的nginx二进制文件,进入新的nginx源码包
[root@houqingbao nginx-1.20.1]# cp /objs/nginx /usr/local/hqb/nginx/sbin
6、 测试新版本的nginx是否正常
[root@houqingbao sbin]# ./nginx -t
nginx: the configuration file /usr/local/hqb/nginx/conf/nginx.conf syntax is ok
nginx: configuration file /usr/local/hqb/nginx/conf/nginx.conf test is successful
7、 给nginx发送平滑迁移信号(若不清楚pid路径,请查看nginx配置文件)
[root@houqingbao logs]# kill -USR2 `cat nginx.pid`
8、 查看nginx pid,会出现一个nginx.pid.oldbin
[root@houqingbao logs]# ll
总用量 1368012
-rw-r--r--. 1 root root 1374367224 7月 14 12:21 access.log
-rw-r--r--. 1 root root 26459139 7月 14 11:58 error.log
-rw-r--r--. 1 root root 6 7月 14 11:02 nginx.pid
-rw-r--r--. 1 root root 6 7月 14 11:02 nginx.pid.oldbin
9、 从容关闭旧的Nginx进程
[root@houqingbao logs]# kill -WINCH `cat nginx.pid.oldbin`
10、 此时不重载配置启动旧的工作进程
[root@houqingbao logs]# kill -HUP `cat nginx.pid.oldbin`
11、 结束工作进程,完成此次升级
[root@houqingbao logs]# kill -QUIT `cat nginx.pid.oldbin`
12、验证Nginx是否升级成功
[root@houqingbao sbin]# ./nginx -v