AWS WAF and AWS ShieldでWAFの設定をしてみる
AWSはWAFとかFirewallなども設定できるようです。ここではAWS WAFを設定してみたいと思います。
「Go to AWS WAF」をクリックします。
ruleを作ろう
とりあえずruleを作ります。
「Rules」をクリックします。
「Create rule」をクリックします。
5分間に許可される1つのIPアドレスからのリクエストは最低2000のようです。今回2000を設定しますが、5分間に2000以上リクエストがあればブロックされます。
「Create」をクリックします。
これで、「Rate-based rule」が作成できました。
Web ACLsを作成する
「Configure web ACL」をクリックします。
「Next」をクリックします。
「AWS resource to associate」はCloudFrontのDelivery MethodのIDを指定します。
「Next」をクリックします。
AWS WAFだけあって、アプリケーション層のSQLインジェクションやクロスサイトスクリプティングなども防御できそうです。(多分)
が、今回は5分間に同一IPアドレスからの2000リクエスト以上をブロックしてくれるかを検証したいので、「Create condition」せずに、「Next」をクリックします。
上記の設定にして、「Review and create」をクリックします。
「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)は表示されます。
この状態で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のコンソールより確認できます。
KHI入社して退社。今はCONFRAGEで正社員です。関西で140-170/80~120万から受け付けております^^
得意技はJS(ES6),Java,AWSの大体のリソースです
コメントはやさしくお願いいたします^^
座右の銘は、「狭き門より入れ」「願わくは、我に七難八苦を与えたまえ」です^^
コメント