Cloudflare Zero TrustでSSHを保護する

Cloudflare Zero TrustのAccess機能を使い、SSHポートを閉じたままサーバに安全に接続する方法

cloudflarezero-trustsshsecurity

台本(フルテキスト)

動画の掛け合いを書き起こしたものです。音声を再生しづらい場合はこちらをお読みください。

オープニング

  • CloudflareゼロトラストでSSHを保護
  • SSHポートを閉じたまま安全に接続
ずんだもん
今日はCloudflare Zero TrustでSSHを保護する方法を紹介するのだ。
めたん
SSHのポートを公開したままだと攻撃されるリスクがありますよね。
ずんだもん
Cloudflare Zero TrustのAccess機能を使えば、SSHポートを完全に閉じたまま接続できるのだ。
めたん
ポートが閉じているのにどうやって接続するんですか?
ずんだもん
Cloudflare TunnelとAccessを組み合わせて、認証済みユーザーだけが接続できる仕組みを作るのだ。
めたん
Zero Trustという考え方が重要なんですね。

Zero Trustの概念

  • 従来:社内ネットワークは信頼する
  • Zero Trust:全てのアクセスを検証する
めたん
Zero Trustとはどういう考え方ですか?
ずんだもん
従来のモデルはファイアウォールで守られた社内ネットワーク内を信頼するというものだったのだ。
めたん
Zero Trustではその前提を変えるんですね。
ずんだもん
そうなのだ。全てのアクセスを毎回検証する。認証されていなければ接続不可というモデルなのだ。
めたん
SSHの場合はどういう経路になるんですか?
ずんだもん
sshコマンド → cloudflaredのプロキシ → Cloudflare Access認証 → Tunnel → サーバのSSHデーモン、という流れになるのだ。

設定手順

  • Tunnel IngressにSSHを追加
  • Access ApplicationとポリシーをAPIで作成
めたん
設定はどのような手順で進めるんですか?
ずんだもん
まずCloudflare APIでSSHのルーティングをTunnelのIngressに追加するのだ。
めたん
DockerでcloudflaredをコンテナとしてDockerで動かす場合は特別な設定が必要ですか?
ずんだもん
extra_hostsでhost.docker.internalを設定して、コンテナからホストのSSHデーモンにアクセスできるようにするのだ。
めたん
次にAccess Applicationを作るんですね。
ずんだもん
type: "ssh"で作成するのが重要なのだ。これでCloudflareがSSHプロキシとして動作するのだ。

アクセスポリシーとSSH設定

  • メール・IdP・IP・国で柔軟なアクセス制御
  • ~/.ssh/configにProxyCommandを追加
めたん
誰がSSHできるかはどうやって制御するんですか?
ずんだもん
アクセスポリシーでメールアドレス、メールドメイン、IPアドレス範囲、国など色々な条件で制限できるのだ。
めたん
ローカルPCの設定はどうすればいいですか?
ずんだもん
~/.ssh/configにHostの設定を追加して、ProxyCommandにcloudflared access sshを指定するのだ。
めたん
初回接続はブラウザで認証するんですね。
ずんだもん
そうなのだ。認証後はトークンがローカルにキャッシュされて、24時間以内は再認証不要なのだ。

トラブルシューティング

  • Empty app domainは古いトークン削除で解消
  • QUICエラーには--protocol http2を追加
めたん
よくあるトラブルはありますか?
ずんだもん
Empty app domainというエラーが出る場合、古いトークンキャッシュが原因なのだ。~/.cloudflaredのlockファイルとトークンファイルを削除すると直るのだ。
めたん
接続がタイムアウトする場合はどうですか?
ずんだもん
extra_hostsの設定漏れか、UDPが制限されている環境でQUIC接続が失敗している可能性があるのだ。
めたん
QUICの問題はどうすれば解決しますか?
ずんだもん
cloudflaredの起動コマンドに--protocol http2を追加するとQUICを避けてHTTP/2でつながるのだ。

まとめ

  • SSHポートを閉じたまま多層防御が実現
  • 鍵漏洩しても Cloudflare Accessで防御
めたん
今日のまとめをお願いします。
ずんだもん
Cloudflare Zero Trust SSHを使えば、SSHポートを完全に閉じた状態でサーバに安全に接続できるのだ。
めたん
鍵認証に加えてCloudflare Accessの認証が加わるので多層防御になるんですね。
ずんだもん
SSH鍵が漏洩した場合でも、Cloudflare Accessの認証を通過しないと接続できないのがポイントなのだ。
めたん
前提としてCloudflare Tunnelの設定が必要なんですね。
ずんだもん
そうなのだ。Tunnelの設定が済んでいれば、SSH保護の追加はAPI操作と設定ファイルの変更だけで完結するのだ。