专题:Linux应用服务配置
各类Linux软件安装配置
更多内容请点击 我的博客 查看,欢迎来访。
前言
在公网服务器,用户认证的日志中,经常看到有其他人在尝试登录服务器,暴力破解,万一拿到密码就会对系统造成破坏。一般修改ssh端口号可以一定程度的提高服务器的安全性,但是想要更好的解决这一问题,最好使用密钥登录,虽然可能存在一定的不方便。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21root@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用户
1
2
3root@XXX-Svr:~# grep 'PermitRootLogin' /etc/ssh/sshd_config PermitRootLogin yes
将其修改为PermitRootLogin no
创建用户:useradd username
,设置密码passwd username
,用创建的普通用户登录,然后再su root
到root账号下。这样可以避免直接爆破root账号,由于自己创建的用户名不易猜测,也不易登录成功。
其次就是配置允许部分普通用户账号进行ssh登录,这些用户登录后,如有必要再切换特权用户登录,这样安全性就得到了保证。授权用户进行ssh登录,如允许用户账号test1
、test2
登录ssh,需要在/etc/ssh/sshd_config
文件中添加以下行(默认是没有AllowUsers
字段的):AllowUsers test1 test2
密码复杂度
使用较复杂不易猜测的密码
端口不使用22
在本地安装[root@localhost ~]# yum install nmap -y
,nmap用于扫描服务器上的端口
1
2
3
4
5
6
7
8
9
10
11
12
13[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端口上运行。
修改端口
1
2
3
4
5
6
7
8
9root@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登录
1
2
3
4root@XXX-Svr:~# grep 'Listen' /etc/ssh/sshd_config #ListenAddress 172.27.0.10 #ListenAddress 172.27.0.10
如果有多个IP,只需要编辑多行即可。
禁用空密码
有些系统用户帐户是在没有密码的情况下创建的。Linux机器的管理员也可以创建没有密码的标准用户。默认情况,SSH配置为不会阻止允许空密码。
1
2
3root@XXX-Svr:~# grep 'PermitEmptyPasswords' /etc/ssh/sshd_config #PermitEmptyPasswords no
找到该配置,将其设置为PermitEmptyPasswords no
设置空闲超时间隔
空闲超时间隔是允许ssh会话空闲的时间量。超时后,连接就断开了。默认情况下,此选项是禁用的。可以启用它,并将时间设置为5分钟(300秒)。
1
2
3root@XXX-Svr:~# grep 'ClientAliveInterval' /etc/ssh/sshd_config #ClientAliveInterval 0
将其修改为ClientAliveInterval 300
禁用X11转发
如果服务器有图形图像界面,或者桌面计算机需要使用SSH,则应该禁用X11转发。什么是X11转发?这允许任何人通过SSH隧道GUI应用程序。还能让恶意用户通过GUI轻松查看敏感信息,或者利用这个已经不安全的功能。
1
2
3
4root@XXX-Svr:~# grep 'X11Forwarding' /etc/ssh/sshd_config X11Forwarding yes # X11Forwarding no
将其修改为X11Forwarding no
,如果不是只是命令行的Linux,则此项可不做修改。
限制最大验证尝试次数
通过为登录尝试设置低阈值,可以帮助防止暴力攻击
1
2
3root@XXX-Svr:~# grep 'MaxAuthTries' /etc/ssh/sshd_config #MaxAuthTries 6
将其进行修改MaxAuthTries 3
,使用sed
替换方式如下:
1
2
3
4
5
6root@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
使用密钥登录
这也是最安全的一种方式。
其原理是:
- 客户端利用密钥生成器制作一对密钥:一只公钥和一只私钥;
- 将生成的公钥添加到服务端的某个用户上;
- 客户端利用私钥即可完成认证并登录。
这样一来,没有私钥,任何人都无法通过 SSH 暴力破解密码来远程登录到系统。此外,如果将公钥复制到其他用户甚至主机,利用私钥也可以登录。
客户端生成密钥对
首先在客户端上生成密钥对
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26[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
公钥复制到服务端
1
2
3
4
5
6
7
8
9
10
11
12[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
会自动创建对应的文件和赋予文件对应的权限。
手动复制公钥容易出现的问题:
- 公钥文件名称必须是:
authorized_keys
- 公钥权限必须是:600,即:
chmod 600 authorized_keys
- 用户目录
/.ssh/
权限必须是:700 ,即:chmod 700 .ssh
服务端禁止密码登录
1
2
3
4[root@localhost ~]# grep 'PasswordAuthentication' /etc/ssh/sshd_config #PasswordAuthentication yes PasswordAuthentication no
将PasswordAuthentication
修改为no
如果拷贝了公钥后还是不能登录,检查配置RSAAuthentication yes
和PubkeyAuthentication yes
,两项均要设置为yes
。
客户端登录
现在不需要收入密码即可实现登录。
1
2
3
4
5[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
指定端口登录
1
2[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中选择该密钥即可实现登录了。
最后
以上就是听话金毛最近收集整理的关于【ssh】Linux提高ssh安全性配置前言禁用root登录密码复杂度端口不使用22显示监听IP禁用空密码设置空闲超时间隔禁用X11转发限制最大验证尝试次数使用密钥登录的全部内容,更多相关【ssh】Linux提高ssh安全性配置前言禁用root登录密码复杂度端口不使用22显示监听IP禁用空密码设置空闲超时间隔禁用X11转发限制最大验证尝试次数使用密钥登录内容请搜索靠谱客的其他文章。
发表评论 取消回复