WebサーバをCloudflareのCDN(DNS)に接続する方法には下記があります。
①IPv4で接続する(Aレコード)
②IPv6で接続する(AAAAレコード)
③Cloudflareのトンネルで接続する(CNAMEレコード)
ここでは①や②よりメリットが多い③のトンネルを使った接続方法を解説します。
■上図はサーバとCloudflare間にトンネルを張り、その中にWebサーバを定義する方法になります。
その結果、CloudflsreのDNSにCNAMEレコードでWebサーバのアドレスが記述されます。
下記にその構築方法を解説します。
2.Webサーバ側で[Docker]を利用してCloudflareと接続する
1.Cloudflare側でトンネルを作成する
Cloudflare Tunnelは[Zero Trust]の機能の一部で、以前はDNS画面からトンネル作成画面に移動できましたが現在はホーム画面の[Zero Trust]メニュから起動するように変更されています。
1.Cloudflareのホーム画面に入ります。
DNS画面に入っていた場合はホーム画面に戻ってください。
左ペインの[zero Trust]をクリックします。
2.Team domain名を設定します。
始めて[zero Trust]を起動した時だけ下図の様な[チーム名]を入力する画面が表示されます。
[チーム名]は任意名称ですが、全世界でユニークな名前が求められます。※注意を参照して命名して下さい。
設定後[Next]ボタンを挿入して下さい。
チーム名作成の注意
チーム名は[zero Trust]環境を構築する上で大変重要なキーです。
この名前の元にユーザ固有の[インターネットアクセスポリシ]や[ローカルネットワーク]及び[アプリケーションアクセスポリシ]等が設定されます。
よって、適当な名前でなく、将来ゼロトラストに移行する事を考えた名前を付けてください。
3.[zero Trust]のメニュが表示されます。
下記メニュから[Networks→Tunnel]をクリックします。
4.トンネルの作成画面が表示されます。
下記画面の[Add Tunnel]ボタンを挿入します。
■上記画面は過去に作成したトンネルがない画面です。既にトンネルがある場合は[+ Create a tunnnel]ボタンの下にトンネルリストが表示されます。
5.トンネル種類の選択
作成するトンネルの種類の選択画面が表示されます。
左側の[Cloudflared]を選択して画面右下にある[Next]ボタンを挿入します。
■右側の[+WARP]はプライベートネットワーク間をトンネルで接続するツールです。
6.トンネル名の入力
下記画面でトンネル名を入力しますが、トンネル名はサーバ名で指定する事をお勧めします。
入力後は[Save tunnel]ボタンを挿入します。
■利用ツールの選択画面が表示されます。
7.利用ツールの選択
各種OSの専用ツールが用意されていますが、汎用の[Docker]を利用する事もできます。
メモ
[Docker]は、コンテナ仮想化技術を用いてアプリケーションを開発・配置・実行するためのオープンプラットフォームで各種OSにインストールして利用する事ができます。
私の場合はSynologyのNASの中にWebサイトを構築しているので、Synologyの[Docker]を使ってCloudflareとトンネルを構築する方法で解説します。
①[Docker]を選択する
[Docker]をクリックすると[Docker]用のコマンドが表示されます。
これを[コピーボタン]でクリップボードに取り込み[Emeditor]等のテキストエディタに貼り付けて下さい。
コマンドは2つのコマンドから構成されています。
docker run cloudflare/cloudflared:latest
tunnel --no-autoupdate run --token eyJhIjoiMGY1YjIxMGNiOTA1OGMxZWM4M2RlZmZk 以下は省略
■赤字の所は削除して下さい。
普通は[Docker]機能の中で[Cloudflare/Cloudflared]を起動しているのでこの部分は不要です。
■編集したコマンドをサーバのDockerの実行コマンド欄に貼り付け、これを実行する事により、Cloudflareとサーバの[Docker]間にトンネルが作成されます。
2.サーバ側で[Docker]を利用してCloudflareと接続する
Synologyの[Docker]は、DSM7.1までは[Docker]でしたが、DSM7.2から[Container Manager]に名称変更になっています。
ここではDSM7.1の[Docker]環境で説明します。
1.[Docker]をインストールして起動します。
下記画面が表示されます。
2.左ペインのメニューで [レジストリ] を起動します。
Cloudflareとのトンネル接続は[Cloudflared(cloudflare daemonの略)]を利用します。
検索ボックスで[Cloudflare]を入力して検索する下図の様に画面の先頭に[Cloudflare/Cloudflared]が表示されます。
■画面の右側にリンクマークがあり、これをクリックすると何を行う仮想ホストかの説明文書にジャンプする事ができます。
3.Cloudflare/Cloudflaredをダウンロードします。
①Cloudflare/Cloudflaredを選択し[ダウンロード]ボタンを挿入します。
②タグの選択
下記画面の[latest(最新)]を選択し[選択]ボタンを挿入して下さい。
③イメージに1個の仮想ホストが追加されます。
4.Cloudflare/Cloudflaredの設定
①[イメージ]メニュをクリックします。
[Cloudflare/Cloudflared]を選択し[起動]ボタンを挿入します。
②コンテナをどのネットワーク環境で使うかの選択画面が表示されます。
[同じネットワークをDockerホストとして使う]を選択し[次へ]で先に進みます。
③コマンドを登録する画面が表示されます。
[自動再起動]に✓を付けます。
[詳細設定]をクリックします。
④実行コマンドを登録する画面が表示されます。
・[実行コマンド]タブを開きます。
・[コマンド]欄にCloudflareで編集した実行コマンドをコピーしてここに貼り付けます。
・[保存]ボタンを挿入します。
[Container Manager]の場合
Dockerは[実行コマンド]タブの中で指定しますが、[Container Manager]はタブ形式でなくフラットな入力画面になっています。
その中に実行コマンドを登録する所があります。ここに入力します。
⑤全般設定画面に戻ります。
[次へ]のボタンで先に進みます。
⑥ボリューム設定画面が開きます。
[次へ]のボタンで先に進みます。
⑦確認画面が表示されます。
[完了]ボタンを挿入します。
⑧[コンテナ]メニュを見てください。
Cloudflareと接続されている事が確認できます。
5.Cloudflare側の接続も確認する
①下図の[Back to tonnel]をクリックします。
②下記画面が表示されます。
下図の[Status]がHEALTHY(健康)は、DockerとCloudflare間にトンネルが構築されています。
繋がってない場合はが表示されます。
メモ
Statusがの場合は、Dockerの下記コンテナ画面のスライドをONにして下さい。
原因は判りませんが、何かの都合で上記がOFFになる事がありました。
[Container Manager]の場合は、コンテナ画面の[開始]ボタンの挿入です。
3.トンネルにWebサーバを追加する
Cloudflareと[Docker]間にトンネルが張られたので、これにWebサーバを追加します。
1.トンネルの編集画面に入ります
利用する[トンネル]をクリックし、表示されたダイアログの[configure]をクリックします。
2.下記画面が表示されます。
下記画面の[Public hostname]タブをクリックします。
■[Overview]タブは、トンネル名を変更する時に利用します。
■[Private Network]タブは、ローカルネットワークを[Zero Trust]空間に接続する時に利用します。
3.下記画面が表示されます。
下記にWebサーバの情報を入力し[Save Hostnames]を実行するとWebサーバが追加されます。
上記の入力内容はこのサイトの事例で説明します。
このサイトのURLは[https://hnw.t-spirits.com/oldies/]になります。
この場合、各項目に入力するデータは下記になります。
Subdomain | Domain | Path | Type | URL |
hnw | t-spirits.com | oldies | http | 192.168.10.120 |
■上記の設定は下記を意味しています。
[ユーザ]と[Cloudflare]間は、
[https://hnw.t-spirits.com/oldies/]でHTTPSアクセス
[Cloudflare]と[Webサーバ]間は、
[http://192.168.10.120/oldies/]でトンネルアクセス
メモ
Cloudflareからはトンネル経由で[http://192.168.10.120/oldies/]でアクセスがきますが、サイト自体はWordPressで[https://hnw.t-spirits.com/oldies/xxxxx]で作成されています。
サイト自体をhttpで作成する事ではありません。
尚、上記を設定し[Save Hostnames]を実行するとCloudflareのDNS画面に下記が追加されます。
■[hnw]というサブドメインに[CNAME]アドレスが設定されています。
メモ
登録したい他のWebサーバが有る場合はここで登録して下さい。
尚、ルータやphpMyAdmin等のアプリケーションはここで登録しないで下さい。
これらをCDNで利用すると、アプリ機能が100%利用できません。
これらは[Zero Trust]のローカル接続にすると、アプリ機能が100%利用できます。
4.トンネル利用のメリットとセキュリティ対策
ここではトンネル接続のメリットと、これを利用する事によるセキュリティ強化策を解説します。
WebサーバとCloudflareの接続方法には下記があります。
①IPv4で接続する(Aレコード)
②IPv6で接続する(AAAAレコード)
③Cloudflareのトンネルで接続する(CNAMEレコード)
トンネル接続の③は、回線接続の①②と比べて下記のメリットがあります。
1.Webサーバを複数のサーバに分散できる
①や②の接続はIPアドレスを指定するので、ポート番号が[443]という通信が来たら、このWebサーバに転送しなさいという使い方になります。
よって2台目のWebサーバを利用したい場合は上記の[443]は既に利用しているので、[8443]等の別のポート番号が指定しないと利用できません。
しかし③のトンネル接続は、ポート番号は利用しないので何台Webサーバが有っても問題がありません。
2.固定IPでなくてもOK
①や②の接続はIPアドレスを指定するので、ISPのIPアドレスが変わった場合はCloudflareのアドレスを更新する必要がありました。
しかし③のトンネル接続は、ISPのIPアドレスが変わってもトンネルソフトが吸収してくれる為にこの様な更新処理は不要です。
3.オリジンIPに対する不正アクセスをブロックできる
CloudflareのCDNはオリジンIPは基本的には第3者には判りませんが、これを知りえる手段もあります。
詳細は[オリジンIPに対する攻撃]を参照して下さい。
トンネル接続はポート番号は利用しないので下図の様にファイアウオールで総てのポートをブロックしても問題がありません。
やり方は[ポート開放状況調査とブロック]を参照して下さい。
これからは外部からの通信は総て遮断する時代がきたと思っています。
4.参考情報
ファイアウオールで総てのポート番号をブロックするとインターネットからはVPN接続も含めて総て通信がブロックされます。
しかしLAN/WAN内では総てのポート番号を使った通信は可能です。
しかし外部から社内のリソースが利用できないと困ります。
そこに登場するのがCloudflareの[Zero Trust]で、WARPクライアントを利用すると外部からでもファイアウオールを超えて総てのリソースに安全にアクセスできるようになります。
上記の様にこれからは、ファイアウオールで社内を守るという概念自体がなくなります。
5.その他(adsence対策等)
4項のセキュリティ対策を行った結果、下記の場合は別の対策が必要になります。
このサイトにはGoogle広告が表示されており、これを機能させるためにはGoogleが私のルートドメイン名の
https://t-spirits.com/ads.txt
にアクセスし、私は[ads.txt]情報を返す必要があります。
この様なルートドメインもトンネルに追加する事ができます。
これをCNAMEのフラット化と呼びCloudflareはこれに対応しています。
トンネルへの追加方法は下記になります。
Subdomain | Domain | Path | Type | URL |
t-spirits.com | http | 192.168.10.120 |
上記を設定し[Save Hostnames]を実行するとCloudflareのDNS画面に下記が追加されます。