创建 Linux® 云服务器后的第一步是为其设置安全性。您应该在每台服务器上执行此关键步骤,以防止不良行为者获得不需要的访问权限。此操作会产生一个更安全的环境,有助于防止您和您的企业受到损害。执行这些基本步骤并加强服务器上的安全性可以阻止不良行为者,并使他们转向新目标。
用户管理
默认情况下,root 用户被创建为每个 Linux 系统上的第一个用户。您应该通过 Secure Shell (SSH) 禁用它。通过 SSH 禁用此 root 用户会使不良行为者更难访问系统。因为 root 用户是在每台 Linux 服务器上默认创建的,所以如果 root 用户通过 SSH 启用,不良行为者已经拥有登录到您的服务器所需的一半信息。这种情况允许暴力破解 SSH 攻击,直到密码散列中断。
为避免这种情况,您应该在需要登录和管理系统时创建辅助用户。系统上的每个最终用户都应该有自己的登录凭据以用于记录目的。根据最终用户需要执行的操作,他们可能需要sudo权限才能完成管理操作。本节提供有关如何在基于 Debian® 和 Red Hat® Enterprise Linux 的系统上添加具有 sudo 权限的用户的示例。
密码强度准则
在创建任何用户之前,请确保使用需要最小字符长度(甚至可能包括到期日期)的强密码。以下是软件系统安全支持者提倡的共同准则:
- 如果允许,请使用 12 到 14 个字符的最小密码长度。
- 如果允许,包括小写和大写字母、数字和符号。
- 在可行的情况下随机生成密码。
- 避免对多个用户、帐户或软件系统使用相同的密码。
- 避免字符重复、键盘模式、字典单词、字母或数字序列、用户名、亲戚或宠物名、浪漫链接(当前或过去)或个人信息(例如,身份证号、祖先的姓名或日期)。
- 避免使用已公开或可能公开与用户或帐户关联的信息。
- 避免使用用户的同事或熟人可能知道与用户相关的信息。
- 不要使用由弱组件组成的密码。
添加用户(Debian 和 Ubuntu 操作系统)
对于 Debian 和 Ubuntu® 操作系统,请按照以下步骤添加用户:
- 创建一个新用户并设置他们的密码:
useradd {用户名} passwd {用户名}
- 授予新用户sudo对系统特权操作的权限。此用户是远程登录和更改服务器的主要用户。
使用以下方法之一sudo为用户实现权限。
一个。运行以下命令将用户添加到admin用户组。
usermod -aG admin {username}
或者,您可以修改sudoers文件以授予用户sudo权限。
一个。以 root 身份运行以下命令以编辑用户权限列表:
visudo
注意:在某些发行版中,系统将vi文本编辑器用于 visudo. 因为vi它不是一个用户友好的编辑器,您可能需要参考vi 教程来寻求帮助。
湾。在包含的行之后直接添加以下行root ALL=(ALL:ALL) ALL:
{username} ALL=(ALL:ALL) ALL
C。保存并退出。
- 切换到新用户并通过使用sudo运行需要root访问权限的命令来测试他们的权限,例如以下命令:
su {username} sudo systemctl status sshd
在执行命令之前,系统会提示您输入新用户的密码以进行验证。
- root您还可以通过运行以下命令来验证您的用户是否可以提升到该帐户:
sudo -i
如果您正确执行这些步骤,您的用户现在可以sudo访问并且可以提升权限。如果没有正确执行,当您尝试进行身份验证时,您会收到一条消息,指出用户不在sudoers文件中。
添加用户(Red Hat 和 CentOS)
对于 Red Hat 和 CentOS® 操作系统,请按照以下步骤添加用户:
- 使用以下命令创建新用户adduser并设置用户密码passwd:
useradd {username} passwd {username}
- 授予新用户sudo对系统特权操作的权限。此用户是远程登录和更改服务器的主要用户。
使用以下方法之一sudo为用户实现权限。
一个。运行以下命令将用户添加到wheel组
usermod -aG wheel {username}
或者,您可以修改sudoers文件以授予用户sudo权限。
一个。运行以下命令:
visudo
注意:在某些发行版上,系统使用的文本编辑器 visudo是vi. 因为vi它不是一个用户友好的编辑器,您可能需要参考vi 教程来寻求帮助。
湾。在包含的行之后直接添加以下行 root ALL=(ALL:ALL) ALL:
{username} ALL=(ALL) ALL
C。保存并退出。
- 切换到新用户并使用sudo运行需要 root 访问权限的命令来测试他们的权限:
su {username} sudo systemctl status sshd
在执行命令之前,系统会提示您输入新用户的密码以进行验证。
- root您还可以通过运行以下命令来验证您的用户是否可以提升到该帐户:
sudo -i
如果您正确执行了这些步骤,您的用户现在可以sudo访问并且可以提升权限。如果没有正确执行,当您尝试进行身份验证时,您会收到一条消息,指出用户不在sudoers文件中。
生成 SSH 密钥对
对于比使用密码更安全的登录方法,请创建一个 SSH 密钥对以与您之前创建的用户一起使用。这些说明适用于任何 Linux 发行版。
注意:这些说明适用于 Linux 和 macOS® 桌面。如果您从 Windows® 桌面连接,请按照 使用 SSH PUTTYgen 生成 RSA 密钥 和 在 Windows 上使用 SSH 私钥登录中的说明 生成和添加 SSH 密钥对。
- 运行以下命令在本地Linux 或 Mac® 计算机上生成密钥对:
ssh-keygen -b 4096 -t rsa
当询问将密钥保存在哪里时,请使用默认位置。添加密码是可选的并且更安全,但可能不方便。
此操作创建两个文件。默认名称id_rsa用于您的私钥和id_rsa.pub公钥。
- 在本地计算机上创建密钥对后,将公钥上传到您之前创建的用户的远程服务器。
警告:请务必上传公钥,而不是私钥。
ssh-copy-id -i ~/.ssh/id_rsa.pub {username}@{remotePublicIPAddress}
- 使用 ssh {username}@{remotePublicIPAddress}并运行以下命令连接到远程服务器,以验证没有添加您不期望的额外密钥:
cat .ssh/authorized_keys
至此,您已经ssh-key为用户添加了密码验证。下一节将介绍有关如何禁用密码身份验证的可选步骤。
Linux SSH 守护进程配置
现在您有了一个具有sudo权限的新用户和一个 SSH 密钥对,您可以使用 SSH 守护程序(服务器)配置来提高安全性。
注意: 仅适用于托管操作和 RackConnect 客户:为确保我们的自动化系统在需要时可以访问您的服务器,我们要求您不要更改 SSH 配置并跳到下一部分。当连接到您的服务器时,Rackspace 支持团队以用户rack身份登录并在端口 22 上使用密码验证。此外,重建现有服务器或从快照构建新服务器需要您通过将PermitRootLogin选项设置为来启用 root 登录yes。如果您需要更改这些值,请与您的 Rackspace 支持团队成员交谈,以便以不影响我们为您提供 Fanatical Experience™ 的能力的方式进行更改。
本文其余部分的示例命令假定您以新用户身份登录,sudo用于执行特权操作。
SSH 配置选项
本节介绍 SSH 配置文件中有助于提高安全性的常用选项。此信息用于稍后配置您的防火墙。本节仅概述了几个要更改的选项并描述了它们的作用。
本节重点介绍以下选项:
- Port XX:此选项是 SSH 守护程序侦听的端口(默认为 22 端口)。
- PermitRootLogin:此标志启用(是)或禁用(否)通过 SSH 的 root 登录。默认情况下,此行被注释并允许 root 登录。
- PubkeyAuthentication:此标志启用(是)或禁用(否)用于身份验证的 SSH 密钥。默认情况下,此行被注释并允许 ssh-key 访问。
- PasswordAuthentication:此标志启用(是)或禁用(否)密码验证。默认情况下,启用此选项。
SSH 默认使用端口 22 进行通信。root不良行为者在他们攻击的每台服务器上使用用户名尝试端口 22 。因此,通过 SSH 禁用 root 用户并将 SSH 更改为侦听非标准端口有助于防止违规。
更改端口不会阻止确定的入侵者,但它确实会导致大多数 SSH 连接机会的表面扫描忽略您的服务器。同样,删除 root 用户的 SSH 访问权限会干扰通过 SSH 进行的随意暴力攻击。
您还应该考虑在登录时使用哪种身份验证方法。默认情况下,所有 Linux 系统都使用密码身份验证。存在多种在服务器上执行身份验证的方法,但主要的两种方法是使用密码和 SSH 密钥。
SSH 密钥是成对生成的,一个是公共的,另一个是私有的,您只能将它们组合使用。您应该将私钥存储在您连接的计算机上的安全位置,并且永远不要将其泄露。您可以提供公钥,它是您放置在要连接的服务器上的密钥。当您建立连接时,本地计算机上的私钥通过算法运行,如果密钥对哈希与公钥匹配,则授予访问权限。
修改 sshd_config
至此,您已经添加了一个具有sudo权限的新用户,创建了一个 SSH 密钥对,并上传了您的公共 SSH 密钥。您现在可以更改 SSH 配置文件以提高安全性。为此,您可以使用以下步骤将 SSH 更改为侦听自定义端口、限制通过 SSH 的 root 登录、启用公钥身份验证和禁用密码身份验证:
- 打开 SSH 守护程序配置文件进行编辑:
sudo vim /etc/ssh/sshd_config
- 更改以下行:
注意:默认情况下,Port和PermitRootLogin行被注释掉,如#符号所示。注释掉时,这些行将作为默认选项读取,即使对行进行了更改。要实现这些更改,您需要通过删除关联行#开头的符号来取消注释关联行。此外,在禁用之前PasswordAuthentication,请确保您已配置 SSH 密钥,否则您将无法连接到服务器。
改变:
#Port 22 #PermitRootLogin yes PasswordAuthentication yes
至:
Port 2222 PermitRootLogin no PasswordAuthentication no
将2222替换为您要使用的端口。使用netstat确保新端口尚未被其他程序使用。
重要提示:如前所述, sshd_config如果您的服务器具有托管操作服务级别,则不应对文件进行此更改。这些更改可能会拒绝 Rackspace 访问您的服务器。
- 通过运行以下命令来测试更改后的 SSH 配置是否存在错误:
sshd -t
如果您没有收到错误,则 SSH 现在已配置为在自定义端口上运行,并且仅接受传递有效 SSH 密钥的非 root 用户。要应用和保留这些设置,您必须重新启动 SSH 服务。但是,请不要重新启动服务。现在重新启动 SSH 可能会将您锁定在服务器之外,需要您使用救援模式或Web 控制台来恢复配置。您必须在重新启动服务器之前配置防火墙。我们将在下一节讨论防火墙。
修改软件防火墙并重启SSH
注意: RackConnect 客户:要管理防火墙规则,请使用 RackConnect 管理而不是iptables在服务器上。如果您使用 RackConnect,则不应更改 SSH 端口。有关防火墙和 RackConnect 的更多信息,请参阅 管理 RackConnect v2.0 网络策略。
每个 Linux 发行版都使用不同的软件防火墙解决方案。在 Red Hat Enterprise Linux (RHEL) 和 CentOS 7 中,默认防火墙是firewalld. 在基于 Debian 和 Ubuntu 的发行版上,默认的防火墙解决方案是简单防火墙 (UFW)。对于 RHEL 和 CentOS 6,默认解决方案是iptables. 有关您服务器的操作系统,请参阅以下部分。
RHEL、CENTOS 7 和防火墙
- 通过运行以下命令打开新的 SSH 端口:
sudo firewall-cmd --permanent --remove-service=ssh sudo firewall-cmd --permanent --add-port=2222/tcp sudo firewall-cmd --reload
替换2222为您用于 SSH 守护程序的端口。
- sshd通过运行以下命令重新启动服务:
sudo systemctl restart sshd
- 验证您的自定义 SSH 端口是否在服务器上打开:
netstat -plnt | grep ssh
如果您按照这些步骤操作,您应该会看到类似于以下输出的内容:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
UBUNTU、DEBIAN 和 UFW
- 通过运行以下命令打开新的 SSH 端口:
sudo ufw allow 2222
替换2222为您用于 SSH 守护程序的端口。
- sshd通过运行以下命令重新启动服务:
sudo systemctl restart sshd
- 通过运行以下命令验证您的自定义 SSH 端口是否在服务器上打开:
netstat -plnt | grep ssh
如果您按照这些步骤操作,您应该会看到类似于以下输出的内容:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
CENTOS 6 和 IPTABLES
注意:RHEL 和 CentOS 6 将于 2020 年 11 月被标记为生命周期结束。为了获得最佳安全实践,我们强烈建议您考虑使用更新的操作系统版本来托管您的应用程序或网站。
- 通过运行以下命令打开新的 SSH 端口:
sudo iptables -I INPUT -m state --state NEW -m tcp -p tcp --dport 2222 -j ACCEPT sudo service iptables-save
替换2222为您用于 SSH 守护程序的端口。
- 运行以下命令重新启动 SSH 守护程序,以便守护程序应用您设置的新配置:
sudo service sshd restart
- 通过运行以下命令验证您的自定义 SSH 端口是否在服务器上打开:
netstat -plnt | grep ssh
如果您按照这些步骤操作,您应该会看到类似于以下输出的内容:
tcp 0 0 0.0.0.0:2222 0.0.0.0:* LISTEN 1341/sshd tcp6 0 0 :::2222 :::* LISTEN 1341/sshd
对操作系统进行更改后,在本地计算机上打开另一个终端窗口,并以您之前创建的用户身份登录服务器。请记住指定新更改的端口。保持原始连接处于活动状态,以防您需要对配置进行故障排除。
要使用新配置连接到 SSH,您可能需要指定要使用的端口号和密钥。例如:
ssh -p 2222 -i ~/.ssh/id_rsa {username}@{remotePublicIPAddress}
-p选项指定端口,选项-i指定用于连接的私钥。
如果您从 Windows 桌面连接,当您在PuTTY中创建连接时,您可以指定端口号和私钥。
简单的入侵防御
大多数潜在的入侵者对同一个端口进行多次攻击,试图在该端口上运行的软件中找到他们可以利用的东西。幸运的是,您可以在服务器上设置像 fail2ban这样的入侵防御工具来阻止对端口的重复攻击。
注意:托管操作服务器已fail2Ban安装并默认配置为监视 SSH 登录尝试。如果您有任何问题或疑虑,请联系您的支持团队。
fail2ban监控日志并在短时间内发现来自同一主机的过多连接时自动阻止连接。要在您的服务器上设置和配置fail2ban ,请使用以下步骤:
- 要fail2ban在您的服务器上安装,请运行以下命令之一。
RHEL 和 CentOS:
sudo yum install fail2ban
Debian 和 Ubuntu:
sudo apt-get install fail2ban
- 使用以下命令复制您的默认fail2ban配置。新创建的文件会覆盖默认配置并允许您安全地修改文件。
sudo cp -pf /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
- 修改您的文件以在fail2ban.
vim /etc/fail2ban/jail.local
在此文件中,您可以设置以下选项:
- ignoreip:此参数允许您指定不应禁止的任何 IP 地址。
- bantime:此参数允许您指定禁止 IP 地址的秒数。
- findtime:此参数检查maxretry指定时间内的触发器指示。
- maxretry:此参数设置IP地址被禁止之前允许的重试次数。
- 为 SSH 登录尝试创建一个 jail 文件。
vim /etc/fail2ban/jail.d/sshd.local
- 在创建的文件中,复制并粘贴以下文本:
[sshd] enabled = true port = ssh #action = firewallcmd-ipset logpath = %(sshd_log)s maxretry = 3 bantime = 86400
这些选项会在 24 小时内通过 SSH 连接三次失败后禁止 IP 地址。如果您知道您的本地 IP 地址,我们强烈建议您在上一节中添加此 IP 地址作为ignoreip参数。
- fail2ban使用以下命令在您的服务器上启动和启用:
RHEL 和 CentOS 7 或 Debian 和 Ubuntu:
sudo systemctl start fail2ban sudo systemctl enable fail2ban
RHEL 和 CentOS 6:
sudo service fail2ban start sudo chkconfig fail2ban on
入侵检测
入侵检测系统 (IDS) 可以帮助管理员监控系统中的可疑活动和可能的漏洞。IDS 比预防工具更强大,fail2ban但设置和维护起来可能更复杂。
一个流行的开源 IDS 是OSSEC。OSSEC 在多个系统上维护向主服务器报告的代理,即使该服务器已关闭,也允许调查来自潜在受损服务器的日志和警报。
如果您怀疑系统已经受到威胁,您可以通过检查后门和入侵者 以及救援模式调查等程序进行调查。
使您的操作系统保持最新(修补)
使您的内核、包和依赖项保持最新非常重要,尤其是对于与安全相关的模块和包。某些更新(例如内核更新)需要您重新启动服务器。您应该将维护安排在对用户影响最小的时间进行,因为这些维护会导致短暂的停机时间。
重要提示:虽然保持系统处于最新状态至关重要,但请确保您应用的更新不会对您的生产环境产生负面影响。
要在 Ubuntu 操作系统和 Debian 上检查并安装更新,请运行以下命令:
sudo apt-get update sudo apt-get upgrade
要在 CentOS、Red Hat 和 Fedora 系统上检查和安装更新,请运行以下命令:
sudo yum update
操作系统报废
了解您在服务器上运行的 Linux 发行版何时达到其生命周期结束 (EOL)。当一个版本达到其 EOL 时,发行版的维护者不再支持它或通过他们的官方存储库提供包更新。您应该在当前版本达到其 EOL 之前计划好迁移到较新版本。
使用以下链接了解您的 Linux 发行版何时设置为 EOL:
- Ubuntu 操作系统:https ://wiki.ubuntu.com/Releases
- 红帽企业 Linux (RHEL):https ://access.redhat.com/support/policy/updates/errata/
- CentOS:和红帽一样
- Fedora:https ://fedoraproject.org/wiki/End_of_life
- Debian:https ://wiki.debian.org/DebianReleases
账户级安全
尽管保护您的服务器是 Internet 操作的重要组成部分,但保护您的帐户也是必要的。您的帐户名、密码和 API 密钥是您与 Rackspace 云产品交互方式的重要组成部分。就像任何其他密码或访问凭据一样,您希望确保它们的安全。但是,您还需要允许您的团队采取行动并执行必要的任务。
通过使用 基于角色的访问控制 (RBAC),您可以创建用户并向负责使用各种 Rackspace 服务的个人或应用程序授予权限。通过利用 RBAC,您可以让您的团队和承包商仅访问他们需要的实用程序,并在必要时撤销访问权限。
以下是一些使用场景:
- 允许承包商设置您雇用他们创建的环境,但限制他们查看或更改任何信用卡信息或删除您的帐户的能力。
- 允许您的会计师查看账单,但不要删除您的服务器。
- 聘请数据库管理员 (DBA) 并授予 DBA 访问您的 DBaaS 实例的权限。
- 允许客户将文件直接上传到您的 Cloud Files 帐户。
- 配置您的服务器以注册和使用与您的管理员帐户分开的监控和备份代理的特定用户。