AWS WAF and AWS ShieldでWAFの設定をしてみる

AWS WAF and AWS ShieldでWAFの設定をしてみる

AWSはWAFとかFirewallなども設定できるようです。ここではAWS WAFを設定してみたいと思います。

AWS WAF and AWS ShieldでWAFの設定をしてみる

「Go to AWS WAF」をクリックします。

ruleを作ろう

とりあえずruleを作ります。

AWS WAF and AWS ShieldでWAFの設定をしてみる

「Rules」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

「Create rule」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

5分間に許可される1つのIPアドレスからのリクエストは最低2000のようです。今回2000を設定しますが、5分間に2000以上リクエストがあればブロックされます。

「Create」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

これで、「Rate-based rule」が作成できました。

Web ACLsを作成する

AWS WAF and AWS ShieldでWAFの設定をしてみる

「Configure web ACL」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

「Next」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

「AWS resource to associate」はCloudFrontのDelivery MethodのIDを指定します。

「Next」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

AWS WAFだけあって、アプリケーション層のSQLインジェクションやクロスサイトスクリプティングなども防御できそうです。(多分)

が、今回は5分間に同一IPアドレスからの2000リクエスト以上をブロックしてくれるかを検証したいので、「Create condition」せずに、「Next」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

上記の設定にして、「Review and create」をクリックします。

AWS WAF and AWS ShieldでWAFの設定をしてみる

「Confirm and create」をクリックします。

これで設定完了です。

Apache Benchでリクエストを2000以上実行して検証する

ここはEC2にApacheインストールしてApache Benchを実行します。

[ec2-user@ip-10-20-0-xx ~]$  ab -n 2030 -c 1 http://www.xxx.co.uk/login/index.html

結果はエラーでした。

ggrksということで、ググってみるとhttpsの場合はabコマンドのオプションに「-f SSL3」を付加するとのこと!

使い方は同じです。再度実行してみましょう。

[ec2-user@ip-10-20-0-xx ~]$ ab -n 2030 -c 1 -f SSL3 https://www.xxx.co.uk/login/index.html

結果は以下のとおりです。

140359590803200:error:14094410:SSL routines:ssl3_read_bytes:sslv3 alert handshake failure:s3_pkt.c:1493:SSL alert number 40

SSL3.0が無効になっているので、これもまたエラーとなっています。汗

SSL3.0は脆弱性があるため、無効化するべきだそうです。参考サイト

ということでWindows版Apacheにabsコマンドがあるのでこのコマンドを使用します。使い方は同じです。

[ec2-user@ip-10-20-0-xx ~]$ abs -n 2030 -c 1 -f SSL3 https://www.xxx.co.uk/login/index.html

これでもエラーになるので、よく考えたら、SSLプロトコルにSSL3なんて指定していませんでした。

以下を実行します。

[ec2-user@ip-10-20-0-xx ~]$ ab -n 2030 -c 1 -f TLS1.1 https://www.xxx.co.uk/login/index.html

CloudFront + S3で構成している場合は、AWS WAFのダッシュボードにグラフが出力されますので確認してください。

403エラー確認方法

不正にDos・DDos攻撃されたとみなされたIPアドレス(今回は攻撃した私のIP)は表示されます。

AWS WAF and AWS ShieldでWAFの設定をしてみる

この状態でURLにアクセスすると、403エラーとなっているのがわかります。その他のIPからは通常通り表示されます。

[ec2-user@ip-10-20-0-xx ~]$ curl https://www.xxx.co.uk/login/index.html
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<HTML><HEAD><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=iso-8859-1">
<TITLE>ERROR: The request could not be satisfied</TITLE>
</HEAD><BODY>
<H1>403 ERROR</H1>
<H2>The request could not be satisfied.</H2>
<HR noshade size="1px">
Request blocked.

<BR clear="all">
<HR noshade size="1px">
<PRE>
Generated by cloudfront (CloudFront)
Request ID: 1-U3IefgwoNFV7TyfjFx4IjVr05Nh4oAXSq9JRHcX3Ubjn1TE9QRUA==
</PRE>
<ADDRESS>
</ADDRESS>
</BODY></HTML>

1回curlでアクセスしたので、1回BlockされているのがWafのコンソールより確認できます。

AWS WAF and AWS ShieldでWAFの設定をしてみる

コメント

タイトルとURLをコピーしました