IP直打ちのブロックをやってみたけど
前回はAWSのALBでIPアドレス直打ちによるアクセスをブロックする方法を紹介しました。ただ、ALBのIPアドレスは、AWS内部のメンテナンスで自動ローテーションするため、この対策自体が意味を為すのかは疑問があります。
まず、IPアドレス直打ちを防いだとしても、定期的にIPが変わるため、WAFに設定しているIPアドレスを変える手間が必要になります。手動かCloudTrailからLambdaを実行させる(これは実際できるのか確認していませんが)などの方法が挙げられます。
また、そもそも変わるIPにアクセスして何をするのかという問題です。通信の暗号化がされないことと、サイトの信頼性がHTTP通信による大きな問題かと思いますが、これを気にする一般的なユーザーは、わざわざIPアドレス直打ちしてアクセスしてこないだろうと思える訳です。

応用方法
そう考えると、今回試してみたことは無駄なように感じてしまいます。本来は目的からどうやって解決するかという手順で技術的な調査を行います。しかし、今回はやってみたはいいが、目的の意味を深掘って考えると、目的を見失ってしまったように感じます。次は、宙ぶらりんになってしまったこの知識をどうやって昇華していくかを少し考えたいと思います。
ALBにおいてIP直打ちをブロックするメリットはあまり多くなく、その代わりに手間が増えるという話は上記の通りです。とはいえ、HTTP通信を野放しにすると、通信内容を盗聴されて不正アクセスの温床になりかねません。
SSL証明書については、ドメイン単位で発行されるので、メインでなければ、HTTPSで通信することはできません。つまるところ、HTTPリクエストヘッダーの中のheaderにドメインが入ってなかった場合、ブロックするまではしなくても、ドメインへのリダイレクト、その後、HTTPSへのリダイレクトをすると良いのではないでしょうか。
実際、Googleの場合、GoogleにIPアドレス直打ちでアクセスするとgoogle.comへリダイレクトされます。YouTubeの場合でもgoogle.comにリダイレクトされますが。まあ、一旦ここでは、この考え方がベストプラクティスではないかと考えておきます。
とりあえずDNS名によるアクセスをブロックしてみる
とりあえず今回は自由に使えるドメインがなかったので、DNS名からのアクセスをブロックしてみます。
Web ACLは既に作成されているとしているものとてルールの作成のみとしておきます。
手順.1カスタムルールを作成する
「Add rules and rule groups」画面で「Add rules」→「Add my own rules and rule groups」をクリックします。

「Rule type」で「Rule builder」を選択します。
名前は適当に入力し、Typeでは、「Regular rule」を選択します。

「If a request matches the statement」として、Inspectで「Single header」を選択し、Header field nameで「Host」を入力、Match typeに「Exactly matches string」を選択、String to matchにDNS名を入力し、Text transformationで「None」を選択します。
Actionでは「Block」を選択し、「Add rule」をクリックします。

諸々の設定を確認し、「Next」をクリックします。

優先順位を決める画面でも「Next」をクリックします。

メトリクス関係の設定を行い、「Next」クリックします。

設定の確認画面をで「Create web ACL」をクリックします。

DNS名でアクセスしてみると無事ブロックできました。

まとめ
ALBではドメインへのリダイレクト機能が一見ないようだったので、どうにかする必要がありますが、一旦ブロックしてみました。ドメインへのリダイレクトをWAFでできる方法は別途調査する必要がありますが、HTTPリクエストヘッダのHostフィールドはこのように使用すればいいのかなという感じです。
今回は、ドメインがなかったのですが、冒頭のベストプラクティスを実現するには、デフォルトの許可ルールをブロックにして、Hostにドメインがなければブロック(できればリダイレクトしたいけど)することでできるかと思います。
今回は、ここまでとします。最後まで閲覧くださりありがとうございました。
コメント