【AWS】LightSailへのWebアクセスをCloudFrontリクエスト以外を無効化する
こんにちは。ゆーろんです。
最近このWEBサイトへのアクセスログを見ると、CloudFront経由ではなく直接HTTPリクエストを送って見られることが多いです。 ログを見るとKali付属のツールを使ってスキャニングを行いセキュリティホールを探すようなリクエストばかりでした。 特に海外からのスキャニングが多い…。
セキュリティ強度を上げるため、HTTP/HTTPSリクエストはCloudFrontのみから受け付けるようにすることにしました。 というわけでその方法をメモしていきます。
目次 CloudFrontのみのアクセスにする仕組み 環境 実装手順 CloudFrontの設定 Webサーバの設定 動作確認 CloudFrontのみのアクセスにする仕組み 仕組みとしては以下の通りです。
CloudFrontからオリジンへリクエストを送る際に秘密の独自HTTPヘッダを付与 オリジン側では独自HTTPヘッダが付いていればCloudFrontからのリクエストと判断し、もし付いていなければ403を返してアクセス拒否する 結構、仕組みはシンプルです。
CloudFrontの機能で「カスタムヘッダーの追加」という設定項目で自由にヘッダーを付けることができるので使用します。
環境 環境は以下の通りです。
CDN: CloudFront Webサーバ: Apache Apache以外も大体似た感じに設定できると思うので適宜読み替えてください。
実装手順 CloudFrontの設定 CroudFrontのすでに展開しているディストリビューションを編集し以下画像のように任意のヘッダと任意の文字列を追加します。
なお文字列は推測されにくい文字列を設定することをお勧めします。
これで設定を反映したらステータスがDeployedになるまで待ちます。
Webサーバの設定 Lightsailの場合は/etc/apache2/apache2.confがApacheの設定ファイルになります。 設定ファイルに以下のように追加(<と>はとってください)。
<Directory /opt/bitnami/wordpress> Require all granted AllowOverride All SetEnvIf <任意のヘッダ名> \"^<任意の文字列>\" CDNValid Order deny,allow Deny from all Allow from env=CDNValid </Directory> 動作確認 curlコマンドでオリジンへ直接アクセスし以下のようにレスポンスがあれば成功。
curl <オリジンのIPアドレス>/wordpress <!DOCTYPE HTML> <html><head> <title>403 Forbidden</title> </head><body> <h1>Forbidden</h1> <p>You don\'t have permission to access this resource.</p> </body></html> これでHTTPリクエストでオリジンへ直接アクセスすることを禁止にできました。