web-dev-qa-db-ja.com

単一のDNS名の背後にある多くのホストのSSHキー検証

(注:これは 既存の質問 に似ているようですが、ここでの実装の詳細にはいくつかの違いがあると思います)

問題

1つのDNSアドレスの背後に数百のホストがあります。各ホストには独自の個別のホストキーがあります(変更することはできません。ベンダーによって設定されているため、変更しないでください)。

もう一度単一の名前でホストに接続しようとすると、当然のことながらsshが非常に混乱します。

@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@       WARNING: POSSIBLE DNS SPOOFING DETECTED!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
The DSA Host key for (hostname) has changed,
and the key for the corresponding IP address 192.168.0.100
is unknown. This could either mean that
DNS SPOOFING is happening or the IP address for the Host
and its Host key have changed at the same time.
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE Host IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a Host key has just been changed.
The fingerprint for the DSA key sent by the remote Host is
SHA256:+38sJSsANknk6vVIHJ/l/xnPCl+ALCNrbi80vrr24cM.
Please contact your system administrator.
Add correct Host key in /Users/me/.ssh/known_hosts to get rid of this message.
Offending DSA key in /Users/me/.ssh/known_hosts:291
Password authentication is disabled to avoid man-in-the-middle attacks.
Keyboard-interactive authentication is disabled to avoid man-in-the-middle attacks.
X11 forwarding is disabled to avoid man-in-the-middle attacks.
Permission denied (publickey,password,keyboard-interactive).

難しさ

  • すべてのホストキーを同じものに設定することはできません。
  • 単一のIPアドレスに接続することは、実際の「ラウンドロビン」ではなく、接続を最もビジーでないサーバーにルーティングするハードウェアによって提供されるDNSサービスであるため、適切な回避策ではありません。
  • 私のユーザーといくつかの自動化されたプロセスは、単一のDNS名をヒットできる必要があります

質問

この環境でSSHを安全に使用するための(つまり、可能な限り多くの検証をそのままにして)ベストプラクティスは何でしょうか?

セキュリティ上の理由からキー検証を無効にしたくありません。単一のIPアドレスに接続するという明らかな回避策は、ベンダーのDNS実装によって提供される負荷分散を回避します。

4
Mikey T.K.

known_hostsを使用して、すべてのIPに対してssh-keyscanを事前生成できます。次に、ユーザーシステムでGlobalKnownHostsFile(読み取り専用)として設定し、その特定のhostnameに対してUserKnownHostsFileを無効にします(/dev/nullに設定)。

私はそれを試しませんでしたが、IPに満足し、hostnameknown_hostsレコードを書き込めない場合は満足するはずです。

クライアントの例/etc/ssh/ssh_config(配布するのも良い):

[...] # other stuff
Host dns_hostname
  GlobalKnownHostsFile /etc/ssh/known_hosts
  UserKnownHostsFile /dev/null
3
Jakuje