就加密、握手或其他加密设置而言,最严格的 SSH 守护程序设置是什么?

信息安全 SSH 硬化
2021-08-20 02:56:53

我大量使用 SSH 和 SFTP,特别是在两台机器之间,这两台机器的 SSH 端口都在公共 IP 地址上打开。

2018 年在加密、握手或其他加密设置方面最严格的 SSH 守护程序设置是什么?

我对加密协议特别感兴趣。通过良好的密码选择、良好的密钥管理、防火墙等来保护 SSH 超出了我在这里所要求的范围。

到目前为止,我已经在两台机器上找到并设置了/etc/ssh/sshd_config

AuthenticationMethods publickey
Ciphers aes256-cbc
MACs hmac-sha2-512-etm@openssh.com
FingerprintHash sha512
#KexAlgorithms

这可以被认为是我之前发布的关于在 Debian 9 服务器上强化 SSH 安全性的后续问题。但具体来说,我想知道最高设置。

4个回答

你在这里有一个很好的讨论:https : //wiki.mozilla.org/Security/Guidelines/OpenSSH

在现代 OpenSSH 上,他们推荐:

KexAlgorithms curve25519-sha256@libssh.org,ecdh-sha2-nistp521,ecdh-sha2-nistp384,ecdh-sha2-nistp256,diffie-hellman-group-exchange-sha256

Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,hmac-sha2-512,hmac-sha2-256,umac-128@openssh.com

此页面对每个选择进行了解释:https : //stribika.github.io/2015/01/04/secure-secure-shell.html

(不要被 URL 中硬编码的日期所迷惑,从https://github.com/stribika/stribika.github.io/commits/master 的“更改日志”可以看出,该文档会不时更新/_posts/2015-01-04-secure-secure-shell.md )

针对 Logjam,请参阅https://weakdh.org/sysadmin.html的结尾

KexAlgorithms curve25519-sha256@libssh.org

说实话,这些东西我也不是很懂,就是想要强加密什么的

我不知道你所说的“一切”是什么意思,但如果你只是想要强加密,那么不要乱用默认设置——它们可能更安全,但你更有可能破坏安全性而不是改进它如果你不知道你在做什么。

对于整体安全性而言,身份验证和协商密码远比对称算法重要得多——而您对此一无所知。

想知道更多是一件好事——但与理解相比,2018 年 2 月关于最强密码的共识意见(至少当您指的是维护良好的软件的最新版本时)几乎没有价值协议的工作原理以及实现如何与您的操作系统集成。

以下配置可以提供更高的安全级别,同时保持一定程度的兼容性并降低配置复杂性。

警告:以下配置不兼容所有客户端

# Change the port number avoid automated attack
Port 2222

# Limit to SSH2 only (the default value)
Protocol 2

# Use RSA and Ed25519 host key only
HostKey /etc/ssh/ssh_host_rsa_key
HostKey /etc/ssh/ssh_host_ed25519_key

# No root login, obvious
PermitRootLogin no

# Log the finger print of public key used to login, provide audit trails. Might take up more storage.
LogLevel VERBOSE

# 2 Factor Authentication. User must present a valid public key first, then enter the correct password to login
AuthenticationMethods publickey,password

# How fast you can type your password?
LoginGraceTime 20

# Key Exchange
KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group-exchange-sha256

# Ciphers
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes128-ctr

# MACs
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com,

# Only allow specific group member login via SSH
AllowGroups ssh-user

# Renew encryption key every 30 minutes or 1 GB of transferred data (overkill & generate overhead, use with caution, especially on slow network)
#RekeyLimit 1G 1800

删除 3072 位以下的模数以确保安全(感谢 Mozilla)

awk '$5 >= 3071' /etc/ssh/moduli > /etc/ssh/moduli.tmp && mv /etc/ssh/moduli.tmp /etc/ssh/moduli

通过更多调整可以进一步提高安全性,例如防火墙 (iptables)、fail2ban、Tor 隐藏服务、切换到自定义模数和 tcpwrapper,但这些主题超出了此答案的范围。请注意,配置尚未完成,您可能需要其他重要部分才能使守护程序正常工作。请记住备份原始配置文件,以便在出现任何问题时可以回滚。

我在 如何(进一步)确保 SSH 安全?,并且根据 ssh.comOpenSSH 更改日志,更新似乎包括

  • 如果您更喜欢 ecdsa 而不是 ed25519,这是某些 SSH 软件的选项
  • StrictHostKeyChecking 有更多选项。
  • DisableForwarding 是新的
  • 使用所有 SHA2 签名,不使用 SHA1 签名