cloudflare accessを使ってセキュアにRDPした話

- 最初のいろいろ
- そもそも cloudflare zerotarstってなんぞ？
- RDPをセキュアにするやり方

### はじめに！
初心者が記事を書いているため間違っている部分があると思いますが**温かい目で見守っていただける**とありがたいです。（この記事の内容を試す際は一応**自己責任**でお願いします


### 最初のいろいろ
リモート環境でアプリケーション開発をする際に大切なのは何でしょうか～。物理マシンのスペックも大切だと思いますが、私的にはその開発環境をいかにセキュアに保つかだと思っています！今回は、開発環境をセキュアに保つ方法の一つcloudflare zerotrastのaccessを紹介します

### そもそも cloudflareってなんぞ？
cloudflare はかなりの人が知っていると思いますが、一応紹介。
> Cloudflareは、インターネット上で運営されている最大のネットワークの1つです。ユーザーは、Webサイトやサービスのセキュリティとパフォーマンスを向上させる目的でCloudflareサービスを利用しています。（公式サイトより

https://cloudflare.com

webサイトの読み込みをキャッシュサーバーを用いて高速化させてくれたり、
DDOS対策をしてくれたりと便利な機能盛沢山。（cloudflare最高！

### cloudflare zerotrust access

> 従来型VPNの強化または代替になります。Zero Trustでアプリケーションセキュリティを最新化します。

>アプリケーション、オンプレミスのプライベートネットワーク、パブリッククラウド、SaaSのどの環境でも、拒否をデフォルトとするZero Trustルールをユーザーに適用します。
VPNより高速かつ安全にユーザーを接続し、IDプロバイダーやエンドポイント保護プラットフォームと柔軟に統合します。Freeプラン（最高50人のユーザーが対象、無期限）をお試しください。（公式サイトより

https://www.cloudflare.com/ja-jp/products/zero-trust/access/
簡単に言うとサーバーに専用ソフトを入れて、簡単なセットアップをすればVPNの代わりをできます。ngrokの無料枠を増やした版です。50人まで無料なので個人で使うのにも適しています。

じゃ、セットアップしてこ～



### RDPをセキュアにするやり方

必要なものリスト


- cloudflareのアカウント

- cloudflareで使える独自ドメイン

- xrdpが導入済みのubuntuサーバー （ほかのosでもできます

以上！

#### サーバー側の作業

準備ができたら、RDPしたい先のサーバーにsshしてcloudflaredをインストールします.
以下のサイトより自分の環境にあったものをインストールしてください

https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/

インストールができたら、


```bash
cloudflared tunnel create 好きな名前
``` 
このコマンドを使用して、configファイルを作成します。この時UUIDが出力されるのでこれをコピーしておきます。
（消してしまってもcloudflareのダッシュボードから取得できますが、少し大変なので確実にコピーしてどこかにメモしておきましょう）

作成したconfigファイルは ~/.cloudflaredにあります。

configファイルを編集します。今回エディターはnanoを使用していますが、nanoである必要はないです。

```bash
cd ~/.cloudflared

nano config.yml
``` 
そして内容を

```yml
tunnel: UUID
credentials-file: ~/.cloudflared/UUID.json

ingress:
  - hostname: 自分が設定したいURL
    service: tcp://localhost:ポート番号
  - service: http_status:404
```

UUIDは先ほどコピーしたものにおきかえてください。

そして最後の

```yml
- service: http_status:404
```
は確実にいれてください。（入れないと動きません

できたら保存して
```bash
cloudflared tunnel route dns UUID 指定したURL
```
を実行します。

これを実行することでcloudlfare側でいい感じにDNSを変更してくれます。

それができたら
```bash
cloudflared tunnel run 
```
をしてトンネルを開通させます。

エラーが出ないことを確認して、いったん終了させます。

```bash
sudo cloudflared --config ~/.cloudflared/config.yml service install
sudo service cloudflared start
```

ubuntuのサービスに追加して自動起動設定をしてサーバー側の作業は終了です。

#### クライアント側の作業
クライアント側にもcloudflaredを入れます。自分の環境にあっているものをインストールしてください。

%[https://developers.cloudflare.com/cloudflare-one/connections/connect-apps/install-and-setup/installation/]


インストールが終わったら、

```bash
cloudflared access rdp --hostname URL --url rdp://localhost:クライアント側で空きがあるポート番号
```
を実行してトンネルに接続します。

これでクライアント側の作業も終了です。

#### cloudflareでの設定

これをしないとURL分かれば誰でもログインできるようになってしまうので注意！

cloudflareのzerotrustのページに行き、applicationsタブからself hostedを選択。


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1667993027735/9YpCDZ2Yd.png)

application nameは自分がわかりやすい名前を

applicaton domainは先ほど設定したURLを指定します。

出来たらnextボタンをクリック


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1667993120531/1Xf6MfvGM.png)

アクセスできるユーザーを絞りこみます。

出来たらnextボタンをクリック


![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1667993184477/5K6UgJ1Dm.png)

色々出てきますが add applicationをクリック。

設定は終了です。お疲れ様でした！


#### いよいよ接続
各自使いたいRDPクライアントを使用してください。今回はwindowsのデフォルトクライアントを使用します。

![image.png](https://cdn.hashnode.com/res/hashnode/image/upload/v1667989650272/1UlUSTqst.png)

アドレス指定では先ほどクライアント側で指定したlocalhost:各自で設定したポート番号

を使用します。接続を押してしばらくするとwebブラウザーが自動的に開いてログインを求められます。ログインを完了するとRDP接続ができているはずです。

今回の作業終了！

### まとめ

今回はcloudflare accessでRDPする方法を書いてみました。初めて書いたのでよくわからない部分が多くあると思います。（すみません。(__)

今回はRDPでやりましたが、ホームページをポート開放なしで公開できたり、sshとvncに関してはwebブラウザー上で動かすことができます。気が向いたらその解説もしようかなと思いつつ今日はここまで。ぜひコメントも残してください！