はじめに
2015年のre:Inventで「AWS WAF」が発表されました。
AWS WAFはアプリケーション用のファイアウォールで、IP address、SQL injection、String matchingに関するアクセスの制御ができます。
ただ、このサービスを利用するにはCloudFront経由でのアクセスにしか対応していないため、ELBやEC2にWAFを導入する場合はCloudFrontを配置する必要があります。
今回は既に作成済みの「waf-test-acl」にSQL injectionの設定を追加してみます。
その他の設定については以下参照ください。
「AWS WAF」を導入してみた。- IP addresses編
「AWS WAF」を導入してみた。- String matching編
1.設定
「Name」には任意のコンディション名を入力します。
また、Filter settingsの「Part of the request to filter on」でチェックしたいWeb要求、「Transformation」でAWS WAFがリクエストをチェックする前に行う変換方式を指定し、OKであれば「Add another filter」をクリックして条件に追加します。
Filters in this SQL injection match conditionへの追加が確認できたら「Create」をクリックして作成します。
conditionを作成したら、次に「Rules」をクリックします。
Rules設定画面が表示されたら「Create rule」をクリックしルールの作成を行います。
先ほどConditionsのSQL injectionで作成したルールを設定し、完了したら「Create」をクリックします。
ルールの作成が完了したら「Web ACLs」をクリックします。
タブ「Rules」をクリックして「Edit web ACL」をクリックします。
「Rules」のプルダウンで今回作成したルールを選択し、「Add rule to web ACL」をクリックすると下の”If a request matches all the conditions in a rule, take the corresponding action”に追加されます。そうしたら今回はブロックをしたいため「Block」にチェックし、「Update」をクリックします。
ルールが追加されました。「Requests」タブをクリックするとリクエストログが確認できます。
2.動作確認
先ほど設定したルール"sql-injection-rule"によってリクエストが「Block」されているのが確認できます。
さらに今回はUser-Agentに対して設定したので、Request headersのUser-Agentを確認するとどういったリクエストを防いだかがわかります。
以上で設定完了です。