作成日:2024-06-04 ・更新日:2024-08-01
CloudFlareの無料枠で自宅サーバーにsshアクセスできるZero Trustでsshアクセスできるまでの手順。
CloudflareのZero Trustで前回ウェブページを公開出来ました。今回ここではssh接続ができるようにします。
Cloudflareでsshに接続するために必要な手順。
ssh接続なため、もちろん通常のssh接続が可能な状態にする必要あります。 前回はサーバー側にcloudflaredをインストールしましたが、今回は、クライアントPCにもcloudflaredをインストールする必要があります。cloudflaredのsshはソフトウェアを介して接続しているみたいです。そのため、 TeraTermやPuTTY(未検証)では使えなそうです。
サーバー側で作業が必要な部分は、sshが使えるようにcloudflaredのconfig.ymlを修正します。 修正後はcloudflaredのサービスをただ再起動とかでは設定情報が反映されないため、configファイルを削除する必要があります。
configを修正していきます。
と言っても、sshのhostnameとserviceの2行を追加するだけなので難しい部分はありません。
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ファイルを削除します。
rm /etc/cloudflared/config.yml
sudo cloudflared --config /root/.cloudflared/config.yml service install
ここからはブラウザーでの操作が必要になります。cloudflareのZero Trustのページを開いて操作してください。
applicationsでself-hostedを新たに追加します。
sshで接続する際のURLの指定、認証方法等のログインの制限を設定します。
1新しいapplicationを作成する。
2.設定情報を入力する。
3.ポリシーを入力します。
4.e-mailで認証します。
前回作ってあるTunnelsのpublicに新しくホストネームを追加します。
この設定をすることで、ssh.exsampleにアクセスした時に自宅サーバー転送されます。
DNS設定もここで実行すると自動で設定されます。SSHの他にSMBもあるようで、ファイルアクセスもできるようです。
上記の設定をすればDNSの設定が自動で追加されます。
サーバー側でサービスの再起動をする
systemctl restart cloudflared
systemctl status cloudflared
Tunnelsでsshを追加したので、statusの部分を確認するとsshの情報が記載されます。
● 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の設定が表示されます。
サーバーの設定が終わったので、次にsshで接続が簡単にできると思ったが違った、 愛用しているtera termでアクセスしてみたができなった調べていくうちどうやらcloudflared.exeを使う必要がある見たい...
そのため、クライアントPCにソフトをインストールする必要がある。これが本当に分から無かった。
公式にダウンロード方法が記載されているので、ダウンロード・インストールする。
windowsの場合コマンドでインストールが可能になっているのでそれに従ってインストールします。
winget install --id Cloudflare.cloudflared
"C:\Program Files (x86)\cloudflared\cloudflared"
インストールが完了すると、cloudflaredというexeファイルが追加されます。
.sshフォルダーの中にconfigファイルを作成し、追加します。
%USERPROFILE%\.ssh
Host demo
HostName ssh.exsample.com
User username
ProxyCommand "C:\Program Files (x86)\cloudflared\cloudflared" access ssh --hostname %h
Hostはなんでも大丈夫です。
HostNameとUserは適切な値を入れてください。
configにUserの情報が無くてもcloudflared起動時引数を入れて起動でも大丈夫です。
コマンドプロンプトを起動して、ssh Hostでアクセスできます。
上記configではdemoとしたためssh demoとします。
ssh demo
ssh demo -l yu-zamei
CloudflareのAplicationでEmail認証を指定したため、認証画面が出てくるので、メールアドレスを入力して認証をしてください。
自宅サーバーにsshでアクセスすることができました。cloudflareを介しているのでemail認証が必要になっており、無差別のbotによる攻撃も受けづらいと思いますが、念には念入れてroot無効や最低限の対策はしておいてください。
cloudflareを使うとグローバルip取らず、ウェブページやsshのアクセスができるので、自宅GPUサーバが活躍するかも
質問や、間違いがありましたら、お気軽にどうぞ
※お名前とコメントの内容を入力してください。
※全てこのブログ上に公表されます。
※許可なく管理者によって修正・削除する場合がございます。 詳しくはプライバシーポリシーを参照ください