您现在的位置是: 网站首页 >服务部署 >Linux应用服务配置 服务部署

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

admin2020年3月3日 16:10 Linux 41人已围观

Linux应用服务配置简介 各类Linux软件安装配置

# 前言 在公网服务器,用户认证的日志中,经常看到有其他人在尝试登录服务器,暴力破解,万一拿到密码就会对系统造成破坏。一般修改ssh端口号可以一定程度的提高服务器的安全性,但是想要更好的解决这一问题,最好使用密钥登录,虽然可能存在一定的不方便。 ```bash 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用户 ```bash root@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用于扫描服务器上的端口 ```bash [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端口上运行。 ## 修改端口 ```bash 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登录 ```bash root@XXX-Svr:~# grep 'Listen' /etc/ssh/sshd_config #ListenAddress 172.27.0.10 #ListenAddress 172.27.0.10 ``` 如果有多个IP,只需要编辑多行即可。 # 禁用空密码 有些系统用户帐户是在没有密码的情况下创建的。Linux机器的管理员也可以创建没有密码的标准用户。默认情况,SSH配置为不会阻止允许空密码。 ```bash root@XXX-Svr:~# grep 'PermitEmptyPasswords' /etc/ssh/sshd_config #PermitEmptyPasswords no ``` 找到该配置,将其设置为`PermitEmptyPasswords no` # 设置空闲超时间隔 空闲超时间隔是允许ssh会话空闲的时间量。超时后,连接就断开了。默认情况下,此选项是禁用的。可以启用它,并将时间设置为5分钟(300秒)。 ```bash root@XXX-Svr:~# grep 'ClientAliveInterval' /etc/ssh/sshd_config #ClientAliveInterval 0 ``` 将其修改为`ClientAliveInterval 300` # 禁用X11转发 如果服务器有图形图像界面,或者桌面计算机需要使用SSH,则应该禁用X11转发。什么是X11转发?这允许任何人通过SSH隧道GUI应用程序。还能让恶意用户通过GUI轻松查看敏感信息,或者利用这个已经不安全的功能。 ```bash root@XXX-Svr:~# grep 'X11Forwarding' /etc/ssh/sshd_config X11Forwarding yes # X11Forwarding no ``` 将其修改为`X11Forwarding no`,如果不是只是命令行的Linux,则此项可不做修改。 # 限制最大验证尝试次数 通过为登录尝试设置低阈值,可以帮助防止暴力攻击 ```bash root@XXX-Svr:~# grep 'MaxAuthTries' /etc/ssh/sshd_config #MaxAuthTries 6 ``` 将其进行修改`MaxAuthTries 3`,使用`sed`替换方式如下: ```bash 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 暴力破解密码来远程登录到系统。此外,如果将公钥复制到其他用户甚至主机,利用私钥也可以登录。 ## 客户端生成密钥对 首先在客户端上生成密钥对 ```bash [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 ``` ## 公钥复制到服务端 ```bash [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` ## 服务端禁止密码登录 ```bash [root@localhost ~]# grep 'PasswordAuthentication' /etc/ssh/sshd_config #PasswordAuthentication yes PasswordAuthentication no ``` 将`PasswordAuthentication`修改为`no` 如果拷贝了公钥后还是不能登录,检查配置`RSAAuthentication yes`和`PubkeyAuthentication yes`,两项均要设置为`yes`。 ## 客户端登录 现在不需要收入密码即可实现登录。 ```bash [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 ``` ### 指定端口登录 ```bash [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](/media/blog/images/2020/03/BLOG_20200303_161116_97.png "博客图集BLOG_20200303_161116_97.png")

很赞哦! (0)

文章交流

  • emoji
0人参与,0条评论

当前用户

未登录,点击   登录

站点信息

  • 建站时间:网站已运行590天
  • 系统信息:Linux
  • 后台程序:Python: 3.6.6
  • 网站框架:Django: 2.2.9
  • 文章统计:222 篇
  • 文章评论:40 条
  • 腾讯分析网站概况-腾讯分析
  • 百度统计网站概况-百度统计
  • 微信公众号:扫描二维码,关注我们
返回
顶部
标题 换行 登录
网站