Hero img
cloudflare Zero Trustを使って自宅サーバーにssh接続

CloudFlareのZero Trustの機能を使って安全に自宅サーバーにsshアクセスする方法

CloudFlareの無料枠で自宅サーバーにsshアクセスできるZero Trustでsshアクセスできるまでの手順。


目次

  • CloudFlare Zero Trustでssh接続
  • 前提
  • ssh接続するために
  • server側の設定
  • configの編集
  • サービスの再起動
  • cloudflaredページで操作
  • Aplicationの追加
  • TunnelsにPublic hostnamesの追加
  • サービスを再起動させる
  • クライアントPCの設定
  • ソフトダウンロード
  • sshconfigの編集
  • cmdでアクセスする
  • まとめ

CloudFlare Zero Trustでssh接続

CloudflareのZero Trustで前回ウェブページを公開出来ました。今回ここではssh接続ができるようにします。

前提

  • 前回の設定を終えている。
  • クライアントPC:Windows
  • ローカル環境でのssh接続確認済み

ssh接続するために

Cloudflareでsshに接続するために必要な手順。

  • cloudflaredのconfigファイルの編集
  • cloudflare Applicationsの作成
  • dns設定
  • クライアントPCにcloudflaredをインストール

ssh接続なため、もちろん通常のssh接続が可能な状態にする必要あります。 前回はサーバー側にcloudflaredをインストールしましたが、今回は、クライアントPCにもcloudflaredをインストールする必要があります。cloudflaredのsshはソフトウェアを介して接続しているみたいです。そのため、 TeraTermやPuTTY(未検証)では使えなそうです。

server側の設定

サーバー側で作業が必要な部分は、sshが使えるようにcloudflaredのconfig.ymlを修正します。 修正後はcloudflaredのサービスをただ再起動とかでは設定情報が反映されないため、configファイルを削除する必要があります。

configの編集

configを修正していきます。
と言っても、sshのhostnameとserviceの2行を追加するだけなので難しい部分はありません。

/root/.cloudflared/config.yml
unnel: aaaaaaaaaaaaaaaaaaaaaaaaaaaa
credentials-file: /root/.cloudflared/aaaaaaaaaaaaaaaaaaaaaaaaaaaa.json

ingress:
      - hostname: example.domain.com
        service: http://localhost
      - hostname: ssh.domain.com
        service: ssh://localhost:22
      - service: http_status:404

サービスの再起動

cloudflaredのサービスを一度アンインストールし、その後etcに生成されるconfigファイルも削除してから、再度サービスをインストールします。

サービスの再インストール?

サービスを再起動するだけなのに、一度configファイルを削除しなければいけません。他にいい方法があると思いますが分かる方いれば教えてください。

サービスのアンインストール
cloudflared service uninstall

configの削除

サービスをインストールした時に自動で生成されるconfigファイルを削除します。

configの削除
rm /etc/cloudflared/config.yml

サービスの登録

sudo cloudflared --config /root/.cloudflared/config.yml service install

cloudflaredページで操作

ここからはブラウザーでの操作が必要になります。cloudflareのZero Trustのページを開いて操作してください。

Aplicationの追加

applicationsでself-hostedを新たに追加します。
sshで接続する際のURLの指定、認証方法等のログインの制限を設定します。

  1. 1新しいapplicationを作成する。 cloudflare-ssh-application

  2. 2.設定情報を入力する。 cloudflare-ssh-configuration

  3. 3.ポリシーを入力します。 cloudflare-ssh-policy

  4. 4.e-mailで認証します。 cloudflare-ssh-email-auth

TunnelsにPublic hostnamesの追加

前回作ってあるTunnelsのpublicに新しくホストネームを追加します。
この設定をすることで、ssh.exsampleにアクセスした時に自宅サーバー転送されます。
DNS設定もここで実行すると自動で設定されます。SSHの他にSMBもあるようで、ファイルアクセスもできるようです。

cloudflare-ssh-tunnels
  1. 1.パブリックホストネームの追加
cloudflare-ssh-hotsname
  1. 2.ホストネームに情報を入力します。
cloudflare-ssh-hostname-detail

DNS

上記の設定をすればDNSの設定が自動で追加されます。

サービスを再起動させる

サーバー側でサービスの再起動をする

systemctl restart cloudflared
systemctl status cloudflared

状態を確認

Tunnelsでsshを追加したので、statusの部分を確認するとsshの情報が記載されます。

status
● cloudflared.service - cloudflared
     Loaded: loaded (/etc/systemd/system/cloudflared.service; enabled; vendor preset: enabled)
     Active: active (running) since Mon 2024-06-03 18:07:03 JST; 27s ago
   Main PID: 29114 (cloudflared)
      Tasks: 10 (limit: 1985)
     CGroup: /system.slice/cloudflared.service
             mq29114 /usr/bin/cloudflared --no-autoupdate --config /etc/cloudflared/config.yml tunnel run
#...省略
#次の行も長いので一部削除
INF Updated to new configuration {\"hostname\":\"ssh.exsample.me\", \"originRequest\":{}, \"service\":\"ssh://localhost:22\"},warp-routing\":{\"enabled\":true}}" version=6

最後いサービスの状態を確認すると下から2番目の行にsshの設定が表示されます。

クライアントPCの設定

サーバーの設定が終わったので、次にsshで接続が簡単にできると思ったが違った、 愛用しているtera termでアクセスしてみたができなった調べていくうちどうやらcloudflared.exeを使う必要がある見たい...

そのため、クライアントPCにソフトをインストールする必要がある。これが本当に分から無かった。

ソフトダウンロード

公式にダウンロード方法が記載されているので、ダウンロード・インストールする。

windowsの場合コマンドでインストールが可能になっているのでそれに従ってインストールします。

winget install --id Cloudflare.cloudflared

インストール後のexeのパス

"C:\Program Files (x86)\cloudflared\cloudflared"

インストールが完了すると、cloudflaredというexeファイルが追加されます。

sshconfigの編集

.sshフォルダーの中にconfigファイルを作成し、追加します。

sshのパス
%USERPROFILE%\.ssh
config
Host demo
    HostName ssh.exsample.com
    User username
    ProxyCommand "C:\Program Files (x86)\cloudflared\cloudflared" access ssh --hostname %h

Hostはなんでも大丈夫です。
HostNameとUserは適切な値を入れてください。

User

configにUserの情報が無くてもcloudflared起動時引数を入れて起動でも大丈夫です。

これで設定が全て完了しました。

cmdでアクセスする

コマンドプロンプトを起動して、ssh Hostでアクセスできます。
上記configではdemoとしたためssh demoとします。

ssh demo
ユーザー指定する場合
ssh demo -l yu-zamei

CloudflareのAplicationでEmail認証を指定したため、認証画面が出てくるので、メールアドレスを入力して認証をしてください。

cloudflare-ssh-browser-auth

まとめ

自宅サーバーにsshでアクセスすることができました。cloudflareを介しているのでemail認証が必要になっており、無差別のbotによる攻撃も受けづらいと思いますが、念には念入れてroot無効や最低限の対策はしておいてください。
cloudflareを使うとグローバルip取らず、ウェブページやsshのアクセスができるので、自宅GPUサーバが活躍するかも

関連記事

コメント

コメントを書く

質問や、間違いがありましたら、お気軽にどうぞ

※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください