使用 SSH 安全访问 EC2 Linux 实例,同时避免未经授权的访问的最佳实践有哪些?

上次更新时间:2021 年 10 月 5 日

我想使用 SSH 访问我的 Amazon Elastic Compute Cloud (Amazon EC2) 实例。在使用 SSH 时,确保我的实例安全并避免未经授权的访问的最佳实践是怎样的?

解决方法

注意:请使用根权限运行以下命令。运行 sudo -i 命令,以成为根用户。

不允许根用户使用 SSH 终端

默认情况下,亚马逊提供的 AMI 和来自 AWS Marketplace 的大多数供应商都不允许根用户从 SSH 终端登录。如果您的实例允许根用户登录,请按照以下步骤拒绝访问。

1.    在/etc/shadow 文件的密码字段中添加一个*(星号)以使根用户的密码失效:

使用 vipw -s 编辑文件。

第一行通常是根用户行。按如下方式更改根用户行:

root:*LOCK*:14600::::::

2.    使用 vi 编辑器或其他编辑器编辑 SSH 守护程序的配置文件:

vi /etc/ssh/sshd_config

确保以下行存在且未注释。该行拒绝根用户的登录权限。

PermitRootLogin no

3.    重新启动 SSH 守护进程:

systemctl restart sshd

有关 PermitRootLogin 选项的其他参数的信息,请参阅“sshd_config”手册页

确保所有用户都使用 SSH 密钥对登录,然后停用密码身份验证

Amazon 提供的 AMI 默认配置使用 SSH 密钥对登录,同时停用密码身份验证。这是因为使用密码会使您的实例面临诸如暴力攻击之类的安全风险。弱密码可以被破解以获取访问权限。

因此,如果您将实例更改为使用密码,请使用以下命令恢复为默认配置:

1.    使用 vi 编辑器或您选择的其他编辑器访问 sshd_config 文件:

vi /etc/ssh/sshd_config

2.    验证以下行是否存在且未注释:

PasswordAuthentication no

3.    重新启动 SSH 守护进程:

systemctl restart sshd

注意:在停用密码身份验证之前,请确保已安装密钥对。这样可以防止您失去对 EC2 实例的 SSH 访问权限。每个用户都需要将他们的公钥插入在~/.ssh/authorized_keys 路径中。有关密钥登录的更多信息,请参阅 Amazon EC2 密钥对和 Linux 实例

限制来自未知来源的访问

对于公有实例,如果存在错误配置或存在意外软件漏洞,则开放且不受限制的 SSH 端口可能会导致入侵。为帮助防止入侵,请遵循以下最佳实践:

1.    将 SSH 守护程序更新到 Linux 发行版维护者提供的最新版本。SSH 守护程序通常会从上游提供商接收来自更高版本的向后移植更新。有关向后移植的更多信息,请参阅 Red Hat 客户门户网站上的向后移植安全修复程序

yum -y install openssh-server # for Amazon Linux, RHEL, Centos
apt update && apt install openssh-server # For Ubuntu, Debian

2.    限制您的安全组以仅允许从受信任的 IP(如企业网络 IP)传入连接到端口 22。有关更多信息,请参阅为您的 Linux 实例授权入站流量

3.    一些入侵者可能会试图猜测用户名和密码,或者如果端口 22 向全世界开放,可能会试图使 SSH 守护程序溢出。实用程序 fail2ban 会监控您的日志文件,以了解其是否持续尝试登录到您的实例,然后在几次尝试失败后阻止这些尝试。安装 fail2ban 的步骤:

Ubuntu:

apt -y install fail2ban

Amazon Linux、CentOS、RHEL:

安装 EPEL 存储库

运行以下命令:

yum -y install fail2ban
systemctl enable fail2ban
systemctl start fail2ban

有关如何配置 fail2ban 的详细信息,请参阅 Red Hat 网站上的 Linux 安全性:使用 fail2ban 保护您的系统

使用 AWS Systems Manager 会话管理器以通过 shell 访问 EC2 实例

会话管理器允许 AWS Identity and Access Management (IAM) 用户使用加密和日志记录功能登录到您的实例。Systems Manager 的流量通过 Systems Manager 终端节点,从而可以轻松安全地访问私有实例,而无需打开入站端口。有关 Systems Manager 的更多信息,请参阅 AWS Systems Manager Session Manager for shell access to EC2 instances

使用 EC2 实例连接获得对 EC2 实例的 shell 访问

Amazon EC2 实例连接允许您使用 IAM 角色和策略使用安全外壳 (SSH) 连接到 Linux 实例。有关 EC2 实例连接的更多信息,请参阅使用 EC2 实例连接连接到您的 Linux 实例

注意:以下发行版支持 EC2 实例连接:

  • Amazon Linux 2(任何版本)
  • Ubuntu 16.04 或更高版本

这篇文章对您有帮助吗?


您是否需要账单或技术支持?