Cloudflareのメリットはセキュリティレベルを高めたりキャッシュによってオリジンサーバーの負荷を減らすことができる点です。その他の副次的なメリットとして、オリジンサーバーのIPアドレスを隠すことができる点も見逃せないでしょう。
本記事では、Cloudflareを導入してオリジンサーバーのIPアドレスを隠したいと考えている際に役立つ情報をお伝えしたいと思います。
オリジンサーバーへの直アクセスを制限する手順
やり方としてIPアドレスベースで制限する方法もありますが、CloudflareのIPアドレス(オリジンサーバーに配信する際のIPアドレス帯)が変更された際に追従する必要があるため運用負荷が高くなります。
そこで、Cloudflareを経由する際にHTTPヘッダーを付与し、そのHTTPヘッダーの内容をWEBサーバー側でチェックしてアクセスを許可・拒否するというやり方を採用します。この方法は、一度導入すれば放置できるので運用面での負荷がほぼありません。
なお、サーバー側のOSとしてUbuntu Linuxを使い、WEBサーバーはApache2を想定しています。
まず最初にWEBサーバー側で作業します。この時、Apache2は起動しないでください。
Apache2を起動するのは、これから解説する設定を適用した後です。
手順①WEBサーバー側の設定
Apache2を使っている場合は「/etc/apache2/apache2.conf」を編集します。
わたしは次のように設定しています。「Directory 」はご自身の環境に合わせて変更してください。ここはドキュメントルートになります。
「SetEnvIf」でCloudflareで設定するヘッダー名(X-Auth)とヘッダーの内容(ABCDEFG)を記載します。
設定したら「sudo systemctl start apache2」コマンドを実行してApache2を起動します。
<Directory /var/www/html>
Options Indexes FollowSymLinks
AllowOverride all
SetEnvIf X-Auth "ABCDEFG" ACCESS_OK
Require all denied
Require env ACCESS_OK
</Directory>
この設定により、「ABCDEFG」という内容で「X-Auth」という名前のHTTPヘッダーが付いていないHTTPリクエストはすべて403で拒否されます。
試しにIPアドレスを指定してアクセスしてみてください。403エラーで拒否されるはずです。
手順②Cloudflare側の設定
次にCloudflare側の設定をおこないます。
画面左メニューの[ルール]をクリックしてから[ルールを作成]ボタンをクリックします。

画面下にメニューが出るので[リクエスト ヘッダー変換ルール]をクリックします。

それではルールをつくっていきます
ルール名は何でもよいのですがヘッダー名と同じにすると分かりやすいです。
「受信リクエストが一致する場合…」の箇所は「カスタム フィルタ式」を選択します。
その次の「受信リクエストが一致する場合」は「フィールド」は「ホスト名」、「オペレーター」は「次と等しい」、「値」はFQDN(ホスト名)を入力します。複数ある場合は右の「OR」ボタンをクリックして追加していきます。
最後に「実行内容…」は「スタティック設定」を選択し「ヘッダー名」に自分で決めたヘッダー名(例ではX-Auth)、値は適当な英数字を入力します。この値はランダムな値にしてください。
すべて入力したら[デプロイ]ボタンをクリックします。
これでCloudflare側の設定は完了です。

設定が終わったら、想定通り動いているか確認します。
IPアドレスを指定してアクセスすると403エラーでアクセスできない一方、Cloudflareを経由してアクセスした場合は正常に表示されるはずです。
まとめ
最近は多くのスキャナが稼働していて、常に情報収集されています。そのため、CloudflareのようなCDNを利用してオリジンサーバーのIPアドレスを隠したいと考えている方は必ず直アクセスを制限してください。
また、かならずCloudflare側の設定を先に済ませ、WEBサーバーを立ち上げるタイミングでは直アクセスが禁止されている状態にすることが重要です。そうしないと、漫画村のようにCloudflareでオリジンサーバーを経由しない時点の情報からオリジンサーバーを特定されてしまうかも知れません。
オリジンサーバー側でHTTPSを有効化する場合は証明書からオリジンサーバーを特定されないよう配慮する必要があります。詳細は次の記事で解説しているのでご覧ください。

コメント