如何提高Ubuntu 18.04系统的SSH安全性?

目的

SSH服务是云服务器的主要访问点,同时也是最容易受到攻击的服务之一。本指南将通过不同的技巧和技术帮助提高服务的安全性。

更改端口

监听SSH连接的默认端口是22,更改此设置将允许将服务云化,并增加连接的安全性。
为了避免干扰机器上的其他现有服务,使用netstat命令检查哪些端口正在使用:

$ netstat -n -l


通过传递给netstat的-l参数,强制它处于LISTEN状态的连接。本例中使用的端口如下:

  • 3306 MySQL service
  • 22 SSH
  • 80 Apache2 / HTTP
  • 53 DNS

若更改端口,需编辑/ etc / ssh / sshd_config中的配置文件,取消注释Port指令:

#Port 22

然后设置一个新的值(建议选值更大的),以防止它被任何端口自动扫描软件(例如2200、5574、1022)截获:

Port 5574

要申请更改,请通过以下方式上传:

$ sudo service sshd reload

之后,再通过使用reload来纠正任何错误并检查对另一个SSH客户机的任何新访问,从而保持连接活动。应用更改之后,指定新端口连接到服务器。例如,如果您从命令行使用SSH客户端:

$ ssh root@ -p 5574

身份验证

由于其安全性,通过RSA密钥访问是基于密码登录的另一种选择。在这种类型的身份验证中,客户端生成一个私钥和安装在服务器机器上的相关公钥,以明确地对客户端进行身份验证。
如果需要安装公钥,客户端首先需要使用ssh-keygen命令生成密钥对:

$ ssh-keygen
Generating public/private rsa key pair.
Enter file where 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.

在继续生成之前,ssh-keygen要求一个可用于身份验证的可选密码短语。为了方便访问,我们将这一部分留空。
完成后,软件将在指定的文件中保存两个文件

  • id_rsa: 客户端的私钥,不可与他人共享。
  • id_rsa.pub: 可共享的公钥。

要准备服务器环境,在用户文件夹内的.ssh文件夹中创建一个名为authorized_keys的文件,用于登录:

$ sudo mkdir ~/.ssh
$ sudo touch ~/.ssh/authorized_keys
$ sudo chmod 600 ~/.ssh/authorized_keys

确保该文件具有如上所示的权限。
然后继续粘贴客户端机器之前准备的公钥:

$ sudo nano ~/.ssh/authorized_keys
ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQCoTzd9RnqT0yioQG1klsLEK/VG9myo7CQ47aRXu7hnPit6Lgw5kAjC7vzNWYLTy2oIlsrVI7R/tvWmVNISGkWDp9U3fONbSLp+vgBKDzRUVAIqP/AIJ2THanyZxj2b8XU/4s2uzGoTLSR3ViX0JU6zTc+IkaBp1o3W3OolvO15E10/VYJCKN3TkxPsSSGE3QReXnCcnIZYAnrPf9f1DPP1Lo+VUCIzZ7IzcZajAWQ53hC71mTYNHkUgIlWxpRyEhnsRfmqEfUSFbTwpNEarv7vGlK686C4xVxlVfKbqlNa3/g2Vrae4ArVBM958JPZ6aa+7KDZfH5TDgPPtlFCIGkd root@testclient

保存文件并重新加载SSH服务:

$ sudo service sshd reload

此时访问服务器可能不需要任何密码:

$ ssh root@

如果一切正常,通过修改文件/ etc / ssh / sshd_config禁用从服务器机器的密码访问,使用以下参数:

ChallengeResponseAuthentication no
PasswordAuthentication no

请注意,您可以添加其他公钥,只需将它们保存在服务器计算机中以~ / .ssh / authorized_keys为末尾的文件。

可用时间限制

减少不必要的访问和攻击的一种策略是缩减SSH服务的可用时间。如果确定在某些时间(例如晚上11点到第二天早上8点)不需要使用服务器,可以设置一个自动时间表来停止连接端口。
建议使用名为iptables的默认防火墙,但是请谨记,根据其性质,iptables不保存输入的配置。
为加快保存和加载配置,可以使用iptables-persistent,它将重新加载系统启动时保存的配置。
继续安装:

$ sudo apt-get install iptables-persistent


安装完成后,输入“chain”,阻止SSH服务:

$ sudo iptables -N chain-ssh
$ sudo iptables -A INPUT -p tcp --dport 22 -j chain-ssh

通过这种方式,所有指向端口22的连接(如果您的SSH服务使用另一个端口,请根据您的自行更改该值)将通过新创建的“chain- SSH”链。
用以下命令保存当前配置(将由iptables-persistent加载):

$ sudo iptables-save > /etc/iptables/rules.v4

然后通过修改crontab,创建一个时间时间表,用于在链上输入和删除规则,具体操作如下:

$ sudo crontab -e
# m h  dom mon dow   command
0 23   * * *   iptables -A chain-ssh -j DROP
0 8    * * *   iptables -F chain-ssh

如您所见,通过第一个操作添加在11.00 pm连接的DROP规则,而第二个操作在08.00 am清空链以恢复服务。
保存文件以使更改生效。

您的免费试用从这里开始!
联系我们的团队申请物理服务器服务!
注册成为会员,尊享专属礼遇!
您的免费试用从这里开始!
联系我们的团队申请物理服务器服务!
注册成为会员,尊享专属礼遇!
Telegram Skype