编程开源技术交流,分享技术与知识

网站首页 > 开源技术 正文

SSH 堡垒主机最佳实践(堡垒机配置手册)

wxchong 2024-07-20 08:42:02 开源技术 9 ℃ 0 评论

更多互联网精彩资讯、工作效率提升关注【飞鱼在浪屿】(日更新)

SSH 堡垒主机是安全基础设施访问中不可或缺的一环。部署堡垒主机相对容易,但保护堡垒主机需要考虑从设计到部署的各个方面。堡垒主机是攻击者想要破坏对基础设施的访问的第一个目标。

这篇博文重点关注关于构建和部署基于 OpenSSH 的安全 SSH 堡垒服务器的最佳实践。


设计和构建堡垒主机

堡垒主机的最终能力取决于基础设施访问的场景。例如,通过堡垒访问数据库服务器的要求可能不同于 Windows 服务器的访问要求。带有 OpenSSH 服务器的 Linux 操作系统是设置堡垒主机的流行选择之一。OpenSSH 使用 SSH 和端口转发功能连接到任何服务。

总体而言,堡垒主机安全加固的核心理念是用最少的组件运行堡垒服务器,并尽可能减少攻击面。

下面,介绍了在设计堡垒主机时需要考虑的一些重要事项。


选择正确的服务器操作系统

使用命令快速检查$ dpkg-query -W | wc -l显示在新的 AWS Ubuntu 20.04 LTS 服务器映像中预装了 567 个软件包。同样,$ yum list installed | wc -l命令显示有 453 个软件包预安装在新的 AWS Amazon Linux 2 服务器映像中。堡垒主机不需要所有这些软件包!最好检查所有预安装的包并删除堡垒主机不需要的包。

经验法则是根据需要使用最少的操作系统映像和安装包。例如,请参阅以下网站,这些网站将指导您安装最小操作系统:ubuntu minimum、debian netinst和centos。


限制在操作系统上运行的活动服务

使用正确的服务器操作系统后,请确保仅安装和运行所需的服务。例如,一个 SSH 堡垒主机应该只运行sshd守护进程而不是其他任何东西。运行不必要的服务只会增加堡垒主机的攻击面。要快速查看Systemd下的活动和正在运行的服务,使用systemctl命令:

$ systemctl list-units --type=service --state=running

也可以使用进程状态命令ps(例如$ ps auxtophtop命令)列出正在运行的进程。这些命令可帮助你识别所有正在运行的进程和服务,并根据需要停止或删除它们。


锁定操作系统网络功能

类似于限制堡垒主机上的活动服务,限制网络功能并使用拒绝所有策略锁定所有端口。对于使用 OpenSSH 配置的堡垒主机,只允许进入 SSH(端口 22 或自定义端口,如果更改了默认值)和出口到上游 SSH 服务器。对于管理入口和出口流量,原生netfilter iptables很强大。使用 iptables 命令快速检查$ iptables -L将显示网络防火墙是否已配置。要仅允许来自特定 IP 地址的 SSH,使用以下iptables命令:

$ iptables -A INPUT -p tcp -s your-ip-address --dport 22 -j ACCEPT

如果需要简单化,使用UFW,极大地简化了 iptables 管理。另一个方便的查看开放网络端口的 Linux 工具是lsof. lsof列出正在侦听特定端口的服务的进程 ID。例如,要列出处于侦听状态的开放 TCP 端口,使用以下lsof命令:

$ lsof -i -P -n | grep LISTEN

限制用户帐户和限制帐户功能

在堡垒主机中,谨慎地创建额外的用户帐户。如果需要除管理 root 帐户之外的用户帐户,请使用SELinux或Capabilities实施访问控制。如果需要用户帐户来运行特定服务,请确保禁用 shell 访问。这可以在 ubuntu 中使用以下usermod命令完成:

$ usermod <username> -s /sbin/nologin

记录访问记录

默认情况下会记录操作系统身份验证事件。可以在 centos/RHEL 系统下/var/log/auth.log和上的 Debian 系统中检查身份验证事件。/var/log/secure

[root@centos ~]# tail /var/log/secure
Dec 30 06:21:51 centos sshd[1287]: Server listening on 0.0.0.0 port 22.
Dec 30 06:21:51 centos sshd[1287]: Server listening on :: port 22.
Dec 30 06:22:21 centos sshd[5012]: Accepted publickey for root from 122.254.81.217 port 54660 ssh2: RSA SHA256:55nl8iEyh3L2trQhhc4aq+5qgEAdM0mnmYIYC7g/k6Y
Dec 30 06:22:21 centos systemd[5100]: pam_unix(systemd-user:session): session opened for user root by (uid=0)
Dec 30 06:22:21 centos sshd[5012]: pam_unix(sshd:session): session opened for user root by (uid=0)
Dec 30 06:41:39 centos sshd[13532]: error: kex_exchange_identification: Connection closed by remote host

这些日志仅限于身份验证事件,如果想获得更详细的访问和记帐事件,auditd是一种流行的选择。auditd挂钩到系统调用并记录系统调用事件,例如打开和关闭文件。由于在 Linux 系统上一切都是文件,这意味着auditd可以捕获进程、网络和文件事件。

记录事件的挑战之一与日志存储有关。将日志存储在同一台服务器上是有风险的,因为 root 用户可以更改它们,或者文件可能在系统崩溃期间被破坏。这些日志应发送到外部集中式日志服务器。ELK stack和Graylog是存储访问日志的流行选择。


限制登录堡垒主机的要求

限制用户登录堡垒主机容易锁定操作系统。例如,对服务器进行故障排除和调试的需求是 SSH 访问的首要原因之一。出于调试和故障排除的目的,管理员可能很想通过 SSH 连接到堡垒主机,但这会带来安全风险,因为允许 SSH 访问会打开一个额外的攻击向量。

要克服这个问题,请在远程日志服务器中实施适当的调试日志记录,并优先考虑不可变的基础架构原则。要修补服务器,而不是在运行时更新堡垒主机,使用所需的修补程序创建一个新的堡垒映像,并用新的更新的堡垒主机替换旧的堡垒主机。


实施主机入侵检测系统

主机入侵检测系统 (HIDS) 最适合检测操作系统中的异常情况。OSSEC和Wazuh是两个流行的用于主机安全监控的开源项目。


加固 OpenSSH 服务器

下面列出了一些强化 OpenSSH 服务器的最佳实践。


更新可能带来安全风险的默认配置

sshd_config下找到的文件中/etc/ssh/sshd_config,更新默认设置以禁用 root 登录、禁用密码验证、配置空闲超时以及将 SSH 用户列入白名单,如下所示。

# Disable root ssh acces
PermitRootLogin no

# Disable password login
PasswordAuthentication no
AuthenticationMethods publickey,keyboard-interactive:pam

# Configure idle time logout
ClientAliveInterval <value in seconds>

# Explicitly Allow SSH users
AllowUsers <user names>

安全的密码操作

OpenSSH 有许多可能已过时或易受攻击的加密算法。以下是确保OpenSSH 配置有最强大的加密算法和操作的一些任务。

  • 重新生成服务器主机密钥。
    如果堡垒主机映像是从现有服务器派生/克隆的,请确保重新生成服务器主机密钥,因为每个 SSH 服务器实例的主机密钥应该是唯一的。为此,请使用该命令删除任何现有的主机密钥,
    rm /etc/ssh/ssh_host_*然后使用以下命令重新生成主机密钥:
  • $ ssh-keygen -t rsa -b 4096 -f /etc/ssh/ssh_host_rsa_key -N "" $ ssh-keygen -t ed25519 -f /etc/ssh/ssh_host_ed25519_key -N ""
  • 停用 Diffie-Hellman 短模加密方式。
    Diffie-Hellman (DH) 密钥交换协议用于在客户端和服务器之间交换共享密钥(加密密钥)。短模(较小的素数)容易受到Logjam 攻击。为了解决 OpenSSH 配置的问题,Mozilla 建议使用以下命令停用短模数:
    $ awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && mv /etc/ssh/moduli.tmp /etc/ssh/moduli`这将确保小于 3071 位的 DH 模数永远不会用于 DH 交换。
  • 使用强密码和算法。
    尽管 OpenSSH 的最新版本支持强大的算法,但请确保
    CHACHA20curve25519是首选算法,以确保最安全的加密操作。

使用第二阶段身份验证

可能最简单但最有效的控制是在您的 SSH 服务器中实施第二阶段身份验证。Google 的Google Authenticator PAM模块是流行的选择。但它只支持基于 TOTP 的身份验证。要获得更强大的身份验证,请选择启用基于U2F或WebAuthn的身份验证的解决方案以用于 SSH。


使用证书进行用户身份验证

SSH 的基于证书的身份验证解决了基于密钥的身份验证带来的密钥管理问题,并增加了时间范围访问的额外安全性和即时撤销访问的能力。虽然维护证书颁发机构同样具有挑战性,但有一些解决方案可以完全自动化 SSH 的 CA 管理。


部署堡垒主机

堡垒主机在基础设施中的放置对堡垒主机的整体安全性起着重要作用。不正确的网络配置可能会让攻击者完全绕过堡垒主机,直接到达他们的目标服务器。此外,资源不足可能使攻击者有机会执行拒绝服务攻击,这可能导致服务停机。


确保堡垒主机的高可用性

遵循机密性、完整性和可用性 (CIA) 三元组,安全控制应增强服务的可用性,反之亦然。由于通过堡垒主机进行访问是唯一的途径,因此堡垒主机的可用性起着至关重要的作用。确保为堡垒主机分配足够的服务器和网络资源。多节点部署和设置多个可用区是保证堡垒主机可用性的有效方法。


解决延迟问题

没有人喜欢缓慢访问远程服务器。如果团队人员是分布式的,那么对于从不同地理区域访问基础设施的用户来说,延迟可能是一个严重的问题。由于云提供商内部的网络路由通常很快,因此可以通过将堡垒主机放置在离用户最近的云可用区,更近的位置来解决延迟问题。


防御 DDOS

由于堡垒主机暴露在互联网上,因此它们是分布式拒绝服务 (DDOS) 攻击的优先目标。防御 DDOS 攻击并不是一件容易的事,如果攻击向量有千兆bit级别,那么除非基础设施前还有 DDOS 服务,否则堡垒主机很可能无法幸免于难。微软报告称他们最近成为2.4 TBPS DDOS 攻击的受害者。如果堡垒提供对关键任务服务的访问,则值得购买 DDOS 保护服务。


总结

这篇文章完成了基于 OpenSSH 服务器的堡垒主机的设计、构建和部署中,需要考虑的重要事项。以最少的基本服务、用户帐户和网络功能运行堡垒主机,并将堡垒主机部署为高可用性服务器。

另外,Teleport 是一个现代堡垒服务器,允许在所有环境中统一访问 SSH 和 Windows 服务器、Kubernetes 集群、Web 应用程序和数据库。此外,Teleport 是一个开源项目,一切都是在开放的环境中设计和开发的。在此处了解有关如何在生产中使用 Teleport 的更多信息。
开始使用 Teleport - https://goteleport.com/docs/getting-started/linux-server/

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表