【ssh】Linux提高ssh安全性配置

专题:Linux应用服务配置

各类Linux软件安装配置

更多内容请点击 我的博客 查看,欢迎来访。

前言

在公网服务器,用户认证的日志中,经常看到有其他人在尝试登录服务器,暴力破解,万一拿到密码就会对系统造成破坏。一般修改ssh端口号可以一定程度的提高服务器的安全性,但是想要更好的解决这一问题,最好使用密钥登录,虽然可能存在一定的不方便。

root@XXX-Svr:~# tail -f -n 10 /var/log/auth.log
# ....
Mar  3 10:48:20 XXX-Svr sshd[30743]: pam_unix(sshd:auth): check pass; user unknown
Mar  3 10:48:20 XXX-Svr sshd[30743]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=94.177.216.68
Mar  3 10:48:22 XXX-Svr sshd[30743]: Failed password for invalid user gitlab-runner from 94.177.216.68 port 34656 ssh2
Mar  3 10:48:23 XXX-Svr sshd[30743]: Received disconnect from 94.177.216.68 port 34656:11: Bye Bye [preauth]
Mar  3 10:48:23 XXX-Svr sshd[30743]: Disconnected from 94.177.216.68 port 34656 [preauth]
Mar  3 10:48:41 XXX-Svr sshd[30796]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=111.229.168.229  user=root
Mar  3 10:48:43 XXX-Svr sshd[30796]: Failed password for root from 111.229.168.229 port 39866 ssh2
Mar  3 10:48:43 XXX-Svr sshd[30796]: Received disconnect from 111.229.168.229 port 39866:11: Bye Bye [preauth]
Mar  3 10:48:43 XXX-Svr sshd[30796]: Disconnected from 111.229.168.229 port 39866 [preauth]
Mar  3 10:48:50 XXX-Svr sshd[30822]: Invalid user zuoguangming from 58.20.246.71 port 42175
Mar  3 10:48:50 XXX-Svr sshd[30822]: input_userauth_request: invalid user zuoguangming [preauth]
Mar  3 10:48:50 XXX-Svr sshd[30822]: pam_unix(sshd:auth): check pass; user unknown
Mar  3 10:48:50 XXX-Svr sshd[30822]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=58.20.246.71
Mar  3 10:48:51 XXX-Svr sshd[30822]: Failed password for invalid user zuoguangming from 58.20.246.71 port 42175 ssh2
Mar  3 10:48:51 XXX-Svr sshd[30822]: Received disconnect from 58.20.246.71 port 42175:11: Bye Bye [preauth]
Mar  3 10:48:51 XXX-Svr sshd[30822]: Disconnected from 58.20.246.71 port 42175 [preauth]
Mar  3 10:48:56 XXX-Svr sshd[30871]: pam_unix(sshd:auth): authentication failure; logname= uid=0 euid=0 tty=ssh ruser= rhost=116.239.33.22  user=root
# ....

禁用root登录

从安全角度看,是不应当允许root用户通过ssh登录的,因为这将带来严重的安全风险,一旦恶意攻击者获取到root密码,即可对系统进行无法预估的破坏。

限制用户登录ssh的第一步,就是禁止root用户

root@XXX-Svr:~# grep 'PermitRootLogin' /etc/ssh/sshd_config
PermitRootLogin yes

将其修改为PermitRootLogin no

创建用户:useradd username,设置密码passwd username,用创建的普通用户登录,然后再su root到root账号下。这样可以避免直接爆破root账号,由于自己创建的用户名不易猜测,也不易登录成功。

其次就是配置允许部分普通用户账号进行ssh登录,这些用户登录后,如有必要再切换特权用户登录,这样安全性就得到了保证。授权用户进行ssh登录,如允许用户账号test1test2登录ssh,需要在/etc/ssh/sshd_config文件中添加以下行(默认是没有AllowUsers字段的):AllowUsers test1 test2

密码复杂度

使用较复杂不易猜测的密码

端口不使用22

在本地安装[root@localhost ~]# yum install nmap -y,nmap用于扫描服务器上的端口

[root@localhost ~]# nmap xxx.xxx.xxx.xxx

Starting Nmap 6.40 ( http://nmap.org ) at 2020-03-03 10:43 CST
Nmap scan report for xxx.xxx.xxx.xxx
Host is up (0.080s latency).
Not shown: 995 filtered ports
PORT    STATE SERVICE
22/tcp  open  ssh
25/tcp  open  smtp
80/tcp  open  http
110/tcp open  pop3
443/tcp open  https

可以看到当前ssh正在22端口上运行。

修改端口

root@XXX-Svr:~# vim /etc/ssh/sshd_config
# 将端口修改为其他的
Port 22000
# 然后重启服务
root@XXX-Svr:~# service sshd restart
# 查看ssh端口
root@XXX-Svr:~# netstat -atnp
tcp        0      0 0.0.0.0:22000           0.0.0.0:*               LISTEN      30893/sshd

一般情况下不退出,暂时不会断,记得登录云服务器,将要修改的端口添加到安全组规则中,然后拒绝22端口的安全组。

再次使用nmap扫描,或者运行带有版本检测选项的nmap命令nmap -sV xxx.xxx.xxx.xxx扫描。

显示监听IP

如果服务器有多个网卡及IP,那么可以限制只允许指定的IP登录

root@XXX-Svr:~# grep 'Listen' /etc/ssh/sshd_config
#ListenAddress 172.27.0.10
#ListenAddress 172.27.0.10

如果有多个IP,只需要编辑多行即可。

禁用空密码

有些系统用户帐户是在没有密码的情况下创建的。Linux机器的管理员也可以创建没有密码的标准用户。默认情况,SSH配置为不会阻止允许空密码。

root@XXX-Svr:~# grep 'PermitEmptyPasswords' /etc/ssh/sshd_config
#PermitEmptyPasswords no

找到该配置,将其设置为PermitEmptyPasswords no

设置空闲超时间隔

空闲超时间隔是允许ssh会话空闲的时间量。超时后,连接就断开了。默认情况下,此选项是禁用的。可以启用它,并将时间设置为5分钟(300秒)。

root@XXX-Svr:~# grep 'ClientAliveInterval' /etc/ssh/sshd_config
#ClientAliveInterval 0

将其修改为ClientAliveInterval 300

禁用X11转发

如果服务器有图形图像界面,或者桌面计算机需要使用SSH,则应该禁用X11转发。什么是X11转发?这允许任何人通过SSH隧道GUI应用程序。还能让恶意用户通过GUI轻松查看敏感信息,或者利用这个已经不安全的功能。

root@XXX-Svr:~# grep 'X11Forwarding' /etc/ssh/sshd_config
X11Forwarding yes
#	X11Forwarding no

将其修改为X11Forwarding no,如果不是只是命令行的Linux,则此项可不做修改。

限制最大验证尝试次数

通过为登录尝试设置低阈值,可以帮助防止暴力攻击

root@XXX-Svr:~# grep 'MaxAuthTries' /etc/ssh/sshd_config
#MaxAuthTries 6

将其进行修改MaxAuthTries 3,使用sed替换方式如下:

root@XXX-Svr:~# sed 's/#MaxAuthTries 6/MaxAuthTries 3/g' /etc/ssh/sshd_config | grep MaxAuthTries
MaxAuthTries 3
root@XXX-Svr:~# sed -i 's/#MaxAuthTries 6/MaxAuthTries 3/g' /etc/ssh/sshd_config
root@XXX-Svr:~# grep 'MaxAuthTries' /etc/ssh/sshd_config
MaxAuthTries 3

使用密钥登录

这也是最安全的一种方式。

其原理是:

  1. 客户端利用密钥生成器制作一对密钥:一只公钥和一只私钥;
  2. 将生成的公钥添加到服务端的某个用户上;
  3. 客户端利用私钥即可完成认证并登录。

这样一来,没有私钥,任何人都无法通过 SSH 暴力破解密码来远程登录到系统。此外,如果将公钥复制到其他用户甚至主机,利用私钥也可以登录。

客户端生成密钥对

首先在客户端上生成密钥对

[root@localhost ~]# ssh-keygen 
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa): # 直接回收保存在默认路径
Enter passphrase (empty for no passphrase): # 如果将密码留空,可以用私钥进行身份验证,登录时不需要再输入密码。如果输入密码了,需要私钥和密码才能登陆。使用密码保护密码会更加安全。
Enter same passphrase again: 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:Ot1VM6XM0Cat1dm75ZWPqWx+mSNo04aHDNwqm7p0Q6k root@localhost.localdomain
The key`s randomart image is:
+---[RSA 2048]----+
|            .o .+|
|            .+=+o|
|             =B o|
|       .    .. =o|
|      o.S.  .  +=|
|     o oo...  o.o|
|    E = .+.* . o |
|   . ..+. B O =  |
|    oooo . *.o . |
+----[SHA256]-----+

# 将会在当前用户主目录中生成id_rsa私钥和id_rsa.pub公钥
[root@localhost ~]# ls /root/.ssh/
id_rsa  id_rsa.pub  known_hosts

公钥复制到服务端

[root@localhost ~]# ssh-copy-id -i ~/.ssh/id_rsa.pub root@192.168.10.10
# 如果没有修改过公钥的默认路径,直接使用ssh-copy-id root@192.168.10.10也是可以的
/usr/bin/ssh-copy-id: INFO: Source of key(s) to be installed: "/root/.ssh/id_rsa.pub"
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
root@192.168.10.10`s password: 

Number of key(s) added: 1

Now try logging into the machine, with:   "ssh 'root@192.168.10.10'"
and check to make sure that only the key(s) you wanted were added.

复制公钥到服务端,如果是root用户,则是/root/.ssh/authorized_key文件,如果是其他普通用户,则是:/用户/.ssh/authorized_keys文件。由于这是root用户,服务端就会在当前用户目录生成/root/.ssh/authorized_key文件,将密钥添加到该文件中。若没有authorized_keys会自动创建对应的文件和赋予文件对应的权限。

手动复制公钥容易出现的问题:

  1. 公钥文件名称必须是: authorized_keys
  2. 公钥权限必须是:600,即: chmod 600 authorized_keys
  3. 用户目录/.ssh/权限必须是:700 ,即: chmod 700 .ssh

服务端禁止密码登录

[root@localhost ~]# grep 'PasswordAuthentication' /etc/ssh/sshd_config 
#PasswordAuthentication yes
PasswordAuthentication no

PasswordAuthentication修改为no

如果拷贝了公钥后还是不能登录,检查配置RSAAuthentication yesPubkeyAuthentication yes,两项均要设置为yes

客户端登录

现在不需要收入密码即可实现登录。

[root@localhost ~]# ssh root@192.168.10.66
Last failed login: Tue Mar  3 14:40:07 CST 2020 from 192.168.10.10 on ssh:notty
There was 1 failed login attempt since the last successful login.
Last login: Tue Mar  3 14:25:13 2020 from 192.168.10.10

指定端口登录

[root@localhost ~]# ssh -p 22 root@192.168.10.66

在服务端CentOS上可以通过[root@localhost ~]# tail -f -n 10 /var/log/secure命令看到用户ssh认证的信息,Debian系统为/var/log/auth.log文件。

Windows登录方法

Xshell连接:工具—新建用户密钥生成向导,然后下一步即可,生成的公钥保存。例如生成了id_rsa_2048.pub文件,复制其内容追加(在Linux可使用>>符号)到服务端~/.ssh/authorized_keys文件中。

在Xshell中选择该密钥即可实现登录了。

BLOG_20200303_161116_97

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值