背景

客户应网安部门要求需要升级openssh及配置禁用弱加密方法,今天做了下升级,记录一下

一、升级openssh

1、下载openssl、openssh、telnet、xinetd包以及pam包上传到/usr/local/src

          说明:openssl需要不需要依赖openssh版本这边没有确认,按网上的方法一起更新了;

          telnet和xinetd是用来防止更新过程中ssh不能用故配置telnet连接 需要的rpm包我是提前在另外一台centos上配置yum install缓存在本地,然后拷贝

2、rpm安装telnet、xinetd

安装xinetd和telnet是以防在安装openssh过程中意外断开了,使用telnet还能连接

rpm -ivh xinetd-2.3.15-14.el7.x86_64.rpm

rpm -ivh telnet-server-0.17-66.el7.x86_64.rpm
3、配置telnet登录的终端类型,在/etc/securetty文件末尾增加一些pts终端,如下:
pts/0
pts/1
pts/2
pts/3
4、防火墙开放telnet端口
<?xml version="1.0" encoding="utf-8"?>
<zone>
  <short>Public</short>
  <description>For use in public areas. You do not trust the other computers on networks to not harm your computer. Only selected incoming connections are accepted.</description>
  <service name="ssh"/>
  <service name="telnet"/>
</zone>
5、启动xinetd和telnet,并登陆
systemctl enable xinetd
systemctl start xinetd
systemctl enable telnet.socket
systemctl start telnet.socket
6、安装pam包(不安装在编译ssh的时候会报错)
rpm -ivh --replacefiles pam-1.1.8-23.el7.x86_64.rpm 
rpm -ivh pam-devel-1.1.8-23.el7.x86_64.rpm 

PS 如果没有gcc编译工具需要安装gcc编译工具

安装以下依赖包,因为本机不能上网,所以需要在另外一台机器下载好了再传过去,离线下载rpm包的方式如下:

yum install --downloadonly --downloaddir=/tmp gcc

image.png

7、安装openssl
mv /usr/bin/openssl /usr/bin/openssl_bak
mv /usr/include/openssl /usr/include/openssl_bak
cd /usr/local/src/openssl-1.1.1k
./config shared --prefix=/usr/local/ssl && make && make install
ln -s /usr/local/ssl/bin/openssl /usr/bin/openssl
ln -s /usr/local/ssl/include/openssl /usr/include/openssl

确认版本

openssl version

如果提示以下错误:

libssl.so.1.1: cannot open shared object file: No such file or directory

cp /usr/local/src/openssl-1.1.1k/libssl.so.1.1 /usr/local/ssl/lib/libssl.so.1.1
echo "/usr/local/ssl/lib" >> /etc/ld.so.conf
ldconfig -v
8、安装完后如果没有报错则继续安装openssh,如果有报哪个依赖包没有,则下载相应依赖包
mv /etc/ssh /etc/ssh.bak
cd /usr/local/src/openssh-8.0p1
./configure --prefix=/usr/ --sysconfdir=/etc/ssh  --with-openssl-includes=/usr/local/ssl/include --with-ssl-dir=/usr/local/ssl   --with-zlib   --with-md5-passwords   --with-pam  && make && make install
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
9、添加启动项,并启动
 mv  /usr/lib/systemd/system/sshd.service  /usr/lib/systemd/system/sshd.service.bak
chkconfig sshd on
systemctl restart sshd

ssh -V查看版本

PS

升级后openssh配置文件默认不允许root登陆,所以即使密码正确也会提示密码错误,修改以下配置

vi /etc/ssh/sshd_config
PermitRootLogin yes

二、配置禁用弱加密算法

vi /etc/ssh/sshd_config 添加

    Ciphers aes128-ctr,aes192-ctr,aes256-ctr,aes128-cbc,3des-cbc,blowfish-cbc,cast128-cbc,aes192-cbc,aes256-cbc
    KexAlgorithms ecdh-sha2-nistp256,ecdh-sha2-nistp384,ecdh-sha2-nistp521,diffie-hellman-group14-sha1,diffie-hellman-group-exchange-sha256
    MACs hmac-sha2-256,hmac-sha2-512,hmac-sha1

验证

    ssh -vv -oCiphers=aes128-cbc,3des-cbc,blowfish-cbc <server>
    ssh -vv -oMACs=hmac-md5 <server>
    ssh -vv -c aes256-cbc <server>
    nmap --script "ssh2*" <ipaddr>

如果能返回输入密码界面,说明可以使用

ssh8.5的不能直接配置以上

1.先查看支持的算法

[root@localhost-203-root-all oracle]# ssh -Q cipher
3des-cbc
aes128-cbc
aes192-cbc
aes256-cbc
aes128-ctr
aes192-ctr
aes256-ctr
aes128-gcm@openssh.com
aes256-gcm@openssh.com
chacha20-poly1305@openssh.com

2.再配置sshd_config

Ciphers 3des-cbc,aes128-cbc,aes192-cbc,aes256-cbc,aes128-ctr,aes192-ctr,aes256-ctr,aes128-gcm@openssh.com,aes256-gcm@openssh.com,chacha20-poly1305@openssh.com

PS:如果漏扫程序还一直提示弱加密算法,干脆只保留以下算法:

Ciphers aes128-ctr,aes192-ctr,aes256-ctr

3、验证 image.png 只启用aes128-ctr,aes192-ctr,aes256-ctr这三个加密算法,当使用其他加密方法会提示报错如上图所示

三、已经升级到最高版本的openssh,仍然被扫描出OpenSSH 输入验证错误漏洞

解决方法

cp /usr/bin/ssh /usr/bin/ssh.bak
cp /usr/sbin/sshd /usr/sbin/sshd.bak
sed -i 's/OpenSSH_8.5/OpenSSH_9.9/g' /usr/bin/ssh
sed -i 's/OpenSSH_8.5/OpenSSH_9.9/g' /usr/sbin/sshd

参考:https://www.cnblogs.com/nmap/p/10779658.html