ALBのリスナールールで特定のUser-Agentからのアクセスをブロックしてみる

こんにちは、大前です。

ちょうど本日(10/29)は ELB の BlackBelt がありました。よく使うサービスではありますが、改めて話を聞くと学ぶ事が多く面白かったです。

せっかくなので何かしらアウトプットをしたいと思い、ブログを書いていきます。

 

今回は掲題にある通り、ALB のリスナールールを使って、特定の User-Agent からのアクセスブロックをやってみようと思います。

やること

ALB にアクセスがあった場合に、User-Agent に Android が含まれていたらブロック(503を返却)する様にしてみます。

やってみた

前準備

細かい手順は省きますが、ALB と EC2 を作成し、apache をインストールしました。

エンドポイントにアクセスするとページが表示されます。

ルールの追加

ロードバランサーの「リスナー」タブより、ルールを設定したいリスナーの「ルールの表示/編集」を押下します。

 

下の様な画面が開くので、上部メニューから「+」を選んだのち、「+ルールの挿入」を押下します。

 

+条件の追加」→「HTTPヘッダー」を選択

 

下記の様に入力しました。「User-Agent」ヘッダーに「Android」が含まれている場合には 503 が返却され、設定した本文が返却されます。

値部分には、ワイルドカードとして「*」と「?」が使用できます。

 

ここまで設定したら、保存します。

動作確認

手元の Android からエンドポイントにアクセスしてみると、設定したレスポンス本文が返却されました。

 

Chrome からは変わらずアクセス出来ました。ちゃんと Android だけブロック出来ている様です。

おわりに

ALB のリスナールールを使って特定の User-Agent からのアクセスをブロックしてみました。

HTTP ヘッダーの他にも条件を作成出来たり、ブロックではなくリダイレクトさせたりと色々なルールを策定出来るので有用な場面も多いのではないでしょうか。

 

この記事がどなたかのお役にたてば幸いです。

以上、AWS 事業本部の大前でした。

参考

Application Load Balancer のリスナールール