麒麟ARM服务器运维-升级Nginx版本及漏洞修复

前言

Nginx 1.22.0漏扫发现很多漏洞,这里考虑升级后的配置兼容性建议升级到1.26.3

这个版本经过了充分测试,适合生产环境,修复了 1.22 的所有已知高危漏洞。

服务器信息

系统名称

1
cat /etc/.productinfo

比如银河麒麟系统V10

Kylin Linux Advanced Server
release V10 (SP2) /(Sword)-aarch64-Build09/20210524

查看服务器架构

1
uname -m
  • 如果输出是 x86_64,则表示服务器是 x86 架构。
  • 如果输出是 aarch64,则表示服务器是 ARM 架构(ARM 64位)。
  • 如果输出是 armv7l,则表示服务器是 ARM 架构(ARM 32位)。

制作本地yum源

下载iso镜像

1
scp root@10.184.70.65:/home/Kylin-Server-10-SP2-Release-Build09-20210524-arm64.iso /home

密码是服务器的初始密码

挂载镜像

1
2
cd /home
mount Kylin-Server-10-SP2-Release-Build09-20210524-arm64.iso /mnt/

备份数据源

1
2
3
4
5
cd /etc/yum.repos.d/
ls
mkdir test
mv *.repo test
ls

配置本地源

1
vi local.repo

内容如下

1
2
3
4
5
[local]
name = local
baseurl = file:///mnt
gpgcheck = 0
enabled = 1

查看源

1
2
yum repolist all
yum repoinfo local

清除缓存,建立本地源

1
2
yum -y clean all
yum makecache

安装Nginx

备份旧版本

1
cp /usr/local/nginx/sbin/nginx /usr/local/nginx/sbin/nginx.bak

安装

本地下载Nginx后上传

1
https://nginx.org/download/nginx-1.26.3.tar.gz

安装依赖

1
yum install -y pcre pcre-devel zlib zlib-devel gcc-c++ openssl openssl-devel

解压

1
2
tar -zxvf nginx-1.26.3.tar.gz
cd nginx-1.26.3

编译安装

1
2
3
4
5
6
7
8
9
10
11
./configure \
--prefix=/usr/local/nginx \
--with-http_ssl_module \
--with-poll_module --with-threads --with-file-aio \
--with-http_v2_module --with-http_realip_module \
--with-stream --with-stream_ssl_module --with-stream_realip_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_stub_status_module

make && make install

查找安装路径

1
whereis nginx

查看配置信息

1
2
cd  /usr/local/nginx/sbin
./nginx -t

添加软连接

1
sudo ln -s /usr/local/nginx/sbin/nginx /usr/local/bin/nginx

查看Nginx信息

1
nginx -V

这时就可以这样检测了

1
nginx -t

注意

覆盖的时候不用停止Nginx服务吗?

答:完全不需要停止服务。

这正是 Nginx 最强大的特性之一:热更新(Hot Swapping)

你可以直接在 Nginx 正在运行的时候覆盖(替换)二进制文件,服务不会中断,现有的连接(比如用户正在下载文件或浏览网页)也不会断开。

注册服务

在 Linux 上,将 Nginx 配置为一个服务以便它可以作为系统服务启动、停止和管理,通常需要创建一个 systemd 服务文件。

以下是如何为编译安装的 Nginx 创建一个 systemd 服务文件的步骤:

1. 创建 Nginx 服务文件

/etc/systemd/system/ 目录下创建一个新的服务文件,例如 nginx.service

1
sudo vi /etc/systemd/system/nginx.service

2. 编辑服务文件内容

将以下内容粘贴到 nginx.service 文件中。

注意,根据你的 Nginx 安装路径调整 ExecStartExecReload 的路径。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
[Unit]
Description=The NGINX HTTP and reverse proxy server
After=syslog.target network.target remote-fs.target nss-lookup.target

[Service]
Type=forking
PIDFile=/usr/local/nginx/logs/nginx.pid
ExecStartPre=/usr/local/nginx/sbin/nginx -t
ExecStart=/usr/local/nginx/sbin/nginx
ExecReload=/usr/local/nginx/sbin/nginx -s reload
ExecStop=/bin/kill -s QUIT $MAINPID
PrivateTmp=true

[Install]
WantedBy=multi-user.target

3. 启用并启动 Nginx 服务

保存并关闭文件后,使用以下命令重新加载 systemd 配置,启动 Nginx 服务,并设置开机自启动:

1
2
3
sudo systemctl daemon-reload
sudo systemctl start nginx
sudo systemctl enable nginx

4. 检查服务状态

你可以使用以下命令检查 Nginx 服务的状态:

1
sudo systemctl status nginx

5. 常用操作

启动服务

1
sudo systemctl start nginx

停止服务

1
sudo systemctl stop nginx

重启服务

1
sudo systemctl restart nginx

重新加载配置

1
sudo systemctl reload nginx

查看服务日志

1
sudo journalctl -u nginx

添加配置

1
cd /usr/local/nginx/conf

修改根配置

1
vi nginx.conf

http内,server同级添加

1
include /etc/nginx/conf.d/*.conf;

创建目录

1
mkdir -p /etc/nginx/conf.d/

添加配置

1
2
cd /etc/nginx/conf.d/
vi _localhost_80.conf

内容

1
2
3
4
5
6
server {  
listen 80;
server_name localhost;
index index.html;
root /data/wwwjarapi/schoolfile/static;
}

重启Nginx

1
systemctl restart nginx

查看是否生效

1
lsof -i:80

访问测试

1
2
3
curl http://127.0.0.1/test.txt
curl http://172.26.69.13/test.txt
curl http://localhost/test.txt

禁用弱加密算法

禁用 DES 和 3DES 主要是为了修复 Sweet32 漏洞 (CVE-2016-2183)。这些是过时的 64 位弱加密算法,容易受到攻击。

找到 ssl_ciphers 这一行,将其修改为以下推荐配置。这个配置明确排除了 3DES 和 DES,并优先使用现代安全算法。

1
2
3
4
5
6
7
8
9
10
11
12
server {
listen 443 ssl;
server_name your_domain.com;

# ... 其他 SSL 配置 (证书等) ...

# 推荐配置:明确禁用 3DES 和 DES,并禁用 RC4、MD5 等弱算法
# 这里的 !3DES 和 !DES 就是关键
ssl_ciphers 'ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:!aNULL:!MD5:!RC4:!3DES:!DES';

ssl_prefer_server_ciphers on;
}