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

上次更新时间:2020 年 9 月 4 日

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

解决方法

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

不允许根用户使用 SSH 终端

这是 Amazon 提供的 AMI 和 AWS Marketplace 中大多数供应商的默认设置。如果您的实例允许根用户登录,请按照以下步骤拒绝访问。

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

使用 vipw-s 编辑文件。

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

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

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

vi /etc/ssh/sshd_config

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

PermitRootLogin no

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

service sshd restart

有关 PermitRootLogin 选项的其他参数的信息,请参阅 man.openbsd.org 网站上的 OpenBSD 手册页面服务器

确保所有用户使用 SSH 密钥对登录,然后禁用密码验证

Amazon 提供的 AMI 默认配置使用 SSH 密钥对登录,同时禁用密码验证。如果您已更改实例,请使用以下命令恢复为默认配置:

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

vi /etc/ssh/sshd_config

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

PasswordAuthentication no

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

service sshd restart

用户需要在 ~/.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


这篇文章对您有帮助吗?


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