大部分问题都源于当前部署版本产生了一些漏洞,需要根据公告升级到已解决的版本。

由于当前出问题的服务器都是没有网络的离线服务器,所以在处理难度上要麻烦一些,所以写一个文档留存一下处理方式。

Nginx

离线更新Nginx服务,基于二进制方式

Nginx除了漏洞,还有一个配置项的问题

在通过响应头中包含了server字段,内部包含了server的类型和版本,攻击者可以根据这个去做对应的攻击策略,所以需要对这个进行修改。

首先在官网下载最新版的Nginx版本

放到指定位置解压,接下来我的配置都将以/app作为基础根目录

下载修改表头的module:headers-more-nginx-module

# 我当前的最新版是1.27.5 在更新的时候一定要获取更新时的最新版本
tar -zxvf nginx-1.27.5.tar.gz
# 这里我是下载的zip然后转换成tar,如果能解压zip可以不用
tar -xvf headers-more-nginx-module-master.tar

cd nginx-1.27.5
./configure \
  --prefix=/app/nginx \
  --with-http_stub_status_module \
  --with-http_ssl_module \
  --with-pcre=/app/pcre-8.45 \
  --add-module=/usr/local/src/headers-more-nginx-module

# 生成产物
make

# 停止服务
/app/nginx/sbin/nginx -s stop
# 备份之前版本
cp /app/nginx/sbin/nginx /app/nginx/sbin/nginx.bak_1.26.1
# 替换新版
cp ./objs/nginx /app/nginx/sbin/nginx
# 启动服务
/app/dharbor/nginx/sbin/nginx
cd /app/nginx/conf
vim nginx.conf

# 在http块中添加下面内容,首先是关闭版本号显示,然后修改headers指向一个不同的server类型
server_tokens off;
more_set_headers 'Server: Wintendo httpD w/Dotmatrix display';

离线更新openssh

这里要麻烦一些,因为我的一部分服务器没有相关依赖,所以我会按照最全的部分进行调整,如果是可以编译nginx的服务器,可以直接从openssh升级部分进行处理。

# 安装gcc相关依赖
# 这里我是通过其他在线ubuntu服务器donwload的deb安装包
mkdir /app/gcc-debs
cd /app/gcc-debs
dpkg -i *.deb

# 安装zlib zlib和openssl在安装nginx服务器的时候会用到,直接拿来用就可以了
cd zlib-1.3.1/
./configure
make
make install

# 安装openssl
cd openssl-1.1.1t/
./config
make
make install

# 由于我是自己通过特殊方法安装的gcc所以在这里可能有部分依赖产生了问题
# 需要重新再安装一下
cd /app/gcc-debs
dpkg -i *.deb

这里需要注意一个问题,下面要开始更新openssl,我是先通过一台闲置服务器进行测试,测试后没有问题才更新的其他服务器。如果为了安全应该先安装一个telent远程,防止ssh安装失误后,无法登录系统。

# 这里也是要注意是哪个版本的openssh
tar -zxvf openssh-9.9p2.tar.gz
cd openssh-9.9p2/

# 备份当前的ssh配置文件
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

./configure 
make
make install

/usr/local/bin/ssh -V

配置基础防火墙拦截

在漏洞报告上还有一些如ICMP时间戳检测、允许Traceroute探测等问题,由于我是用的是ubuntu服务器,可以对iptables进行配置。

如果是centos系服务器,需要配置防火墙,可能还要对当前业务端口进行一些放行配置。

sudo iptables -A INPUT -p icmp --icmp-type timestamp-request -j DROP

sudo iptables -A OUTPUT -p icmp --icmp-type 0 -j DROP 
sudo iptables -A OUTPUT -p icmp --icmp-type 3 -j DROP 
sudo iptables -A OUTPUT -p icmp --icmp-type 11 -j DROP 

# 查看防火墙配置是否配置上
sudo iptables -L -n -v

MySQL离线升级

由于我从8.0升级到8.5,主从配置在8.4发生了改变,所以我升级后,主从失效了。

# 服务停止
service mysql stop

# 对数据目录进行备份
cp -a /app/mysql /app/backup/mysql_backup_$(date +%F)
# 备份配置文件
sudo cp -r /etc/mysql /etc/mysql.bak

cd /app
mkdir mysql_deb
cd /app/mysql_deb

// mysql版本也是获取新版,根据当前服务器版本下载tar
tar -xvf mysql-server_8.4.5-1ubuntu24.04_amd64.deb-bundle.tar
# 安装顺序一定要按照这个顺序
sudo dpkg -i mysql-common_*.deb
sudo dpkg -i mysql-community-client-plugins_*.deb
sudo dpkg -i mysql-community-client-core_*.deb
sudo dpkg -i mysql-community-client_*.deb
sudo dpkg -i mysql-client_*.deb
sudo dpkg -i mysql-community-server-core_*.deb
sudo dpkg -i mysql-community-server_*.deb
sudo dpkg -i mysql-server_*.deb

# 重启服务后就可以
sudo systemctl start mysql
mysql -uroot -p