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操作と設定ファイルの変更だけで完結するのだ。