赞
踩
系统进行漏扫后输出如下信息,服务器为内网环境
漏洞名称 | 漏洞描述 | 等级 | 安全建议 |
---|---|---|---|
SSH Weak Key Exchange Algorithms Enabled SSH 弱密钥交换算法已启用 | 远程 SSH 服务器配置为允许被认为是弱的密钥交换算法。这是基于 IETF 草案文档 Key Exchange (KEX) Method Updates and Recommendations for Secure Shell (SSH) draft-ietf-curdle-ssh-kex-sha2-20。第 4 节列出了关于不应和不得启用的密钥交换算法的指南。这包括:diffie-hellman-group-exchange-sha1、diffie-hellman-group1-sha1、gss-gex-sha1-、gss-group1-sha1-、gss-group14-sha1-*、rsa1024-sha1 | 低危 | 联系供应商或查阅产品文档以禁用弱算法。 |
首先服务器是云服务器,目前只有ssh远程登陆,ssh的弱密钥交换算法的修复对ssh服务有一定的风险,保险期间。打开telnet服务处理该问题
# rpm -qa telnet-server
# rpm -qa xinetd
# systemctl status telnet
# mkdir -p /root/tools/telnet
# cd /root/tools/telnet
# yum -y install telnet-server --downloadonly --downloaddir ./
# yum -y install xinetd --downloadonly --downloaddir ./
讲下载的安装包拷贝至离线服务器进行安装
# rpm -ivh telnet-server-0.17-66.el7.x86_64.rpm
# rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm
# systemctl start telnet.socket
# systemctl start xinetd
# systemctl status telnet.socket
# systemctl status xinetd
# systemctl enable xinetd.service
# systemctl enable telnet.socket
# systemctl list-unit-files | grep enabled | grep telnet
查看防火墙状态
# systemctl status firewalld
# systemctl start firewalld # 开启防火墙
# systemctl stop firewalld # 关闭防火墙
# systemctl restart firewalld # 重启防火墙
查看防火墙端口
# firewall-cmd --list-all
新增telnet端口
telnet服务默认使用23端口查看端口是否开放
# firewall-cmd --query-port=23/tcp
添加端口
# firewall-cmd --zone=public --add-port=23/tcp --permanent
重新加载防火墙
# firewall-cmd --complete-reload
重启后验证查看23端口
登陆
linux默认情况下root用户使用telnet是登录不了的,需要修改/etc/securetty文件
开启root账号telnet登陆
# vim /etc/pam.d/login
# auth requisite pam_securetty.so
安全考虑不应使用root账号直接登陆,需要使用普通账户登陆
确认telnet登陆成功后,重启一下服务器,使用telnet登陆,登陆成功后开始第二部修复漏洞
本文通过升级openssh开修复漏洞
# yum install -y gcc gcc-c++ glibc make autoconf openssl openssl-devel pcre-devel pam-devel
# yum install -y pam* zlib*
以下安装涉及到多台服务器同时安装,本次使用ansible工具进行操作,ansible的使用可以参考《win10系统下ansible环境搭建》,在本文不多介绍ansible的基础知识,以使用为主。
在这里插入图片描述
https://openbsd.hk/pub/OpenBSD/OpenSSH/portable/
https://ftp.openssl.org/source/
拷贝文件
# ansible jgxt1 -m copy -a 'src=openssl-3.0.0.tar.gz dest=/home/Downloads'
# ansible jgxt1 -m copy -a 'src=openssh-8.8p1.tar.gz dest=/home/Downloads'
解压文件
# ansible jgxt1 -a 'chdir=/home/Downloads tar xfz openssl-3.0.0.tar.gz'
# ansible jgxt1 -a 'chdir=/home/Downloads tar xfz openssh-8.8p1.tar.gz'
查看系统默认版本
# ansible jgxt1 -a 'openssl version'
# ansible jgxt1 -a 'ssh -V'
备份文件
# 查看文件
# ansible jgxt1 -a 'ls -all /usr/bin/openssl'
# 移动文件
# ansible jgxt1 -a 'mv /usr/bin/openssl /usr/bin/openssl_bak'
编译安装openssl
配置、编译、安装
# ansible执行
# ansible jgxt1 -m shell -a 'chdir=/home/Downloads/openssl-3.0.0 ./config shared --prefix=/opt/openssl && make && make install'
此处如果弹出
/usr/bin/env: perl: No such file or directory
需要安装一下perl,安装完毕后,重新执行安装
yum install perl -y
执行编译安装提示,perl安装完毕,执行还是报如下错误,
Can't locate CPAN.pm in @INC (@INC contains: /usr/local/lib/perl5 /usr/local/share/perl5 /usr/lib/perl5/vendor_perl /usr/share/perl5/vendor_perl /usr/lib/perl5 /usr/share/perl5 .).
BEGIN failed--compilation aborted.
使用yum安装perl-CPAN模块
yum -y install perl-CPAN
是perl版本未安装Net::SNMP和CPAN.pm模块,使用Perl自带的模块——CPAN.pm模块。
perl -MCPAN -e shell
# 弹出提示框后回车或者输入yes自动安装
cpan[1]> install Net::SNMP
安装以上两个perl的模块后,重新执行以上编译安装命令。
验证安装
# ansible jgxt1 -a 'echo $?'
输出0表示没有问题
创建链接
# ansible jgxt1 -a 'ln -s /opt/openssl/bin/openssl /usr/bin/openssl'
# ansible jgxt1 -a 'ln -s /opt/openssl/include/openssl /usr/include/openssl'
查看
# ansible jgxt1 -a 'ls -all /usr/bin/openssl'
# ansible jgxt1 -a 'ls -all /usr/include/openssl'
加载配置
# ansible jgxt1 -m shell -a 'echo "/opt/openssl/lib64" >> /etc/ld.so.conf'
# ansible jgxt1 -m shell -a '/sbin/ldconfig'
查看openssh版本
删除原ssh配置文件和目录
# # ansible jgxt1 -m shell -a 'rm -rf /etc/ssh/*'
配置、编译、安装
切换到文件目录,配置编译
# ansible jgxt1 -m shell -a './configure --prefix=/opt/openssh --sysconfdir=/etc/ssh --with-openssl-includes=/opt/openssl/include --with-ssl-dir=/opt/openssl --with-zlib --with-md5-passwords --with-pam && make && make install'
检查结果
修改配置文件
当前连接异常
修改配置文件两处
# vim /etc/ssh/sshd_config
PermitRootLogin yes
UseDNS no
配置文件拷贝
# cd /home/Downloads/openssh-8.8p1
# cp -a contrib/redhat/sshd.init /etc/init.d/sshd
# cp -a contrib/redhat/sshd.pam /etc/pam.d/sshd.pam
# chmod +x /etc/init.d/sshd # 赋权限
# chkconfig --add sshd # 添加系统服务
# systemctl enable sshd # 设置开机启动
移除原服务文件
# mkdir -p /home/service
# mv /usr/lib/systemd/system/sshd.service /home/service/
设置开机启动
# chkconfig sshd on
重启服务
# /etc/init.d/sshd restart
重启服务器
起来后无法连接使用,直接登陆服务器发现sshd没有启动,启动报错
排查问题
1、将源码安装包中 contrib/redhat/sshd.init 文件复制到 /etc/init.d/ 目录下并添加可执行权限
# cp contrib/redhat/sshd.init /etc/init.d/
# chmod +x /etc/init.d/sshd.init
2、启动服务
# /etc/init.d/sshd.init start
这时,/run/systemd/generator.late/ 目录下会产生一个名为 sshd.service的 systemd 服务配置文件。
3、将这个文件复制到 systemd 的服务配置文件目录下
# cp /run/systemd/generator.late/sshd.service /usr/lib/systemd/system/sshd.service
重启防火墙
# firewall-cmd --reload # 重新加载防火墙
重启服务
# systemctl daemon-reload
# systemctl restart sshd.socket
目前使用的是 sshd.socket 服务,而想切换至 sshd.service 服务,可以执行如下命令:
# systemctl disable sshd.socket
# systemctl enable sshd.service
# systemctl stop sshd.socket;
# systemctl start sshd.service
查看状态
查看开机确认已经添加,
# systemctl enable sshd # 设置自动启动
# systemctl list-unit-files| grep enabled | grep sshd # 查询启动设置
重启服务器ssh登陆
登陆查看版本
确认没有问题,关闭telnet服务
# systemctl disable xinetd.service
# systemctl stop xinetd.service
# systemctl disable telnet.socket
# systemctl stop telnet.socket
# netstat -nltp
远程telnet登陆
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。