這個大概是2019/12更新出來的新功能
1 | AWS WAF Security Automations |
之前有用過WAF的Rate rule以及這個stack的舊版
都沒辦法做到設定自訂時間/次數 request ban
會卡在5min/2000 request的限制
而且ban完之後只要低於此規則就會自動release
對間歇性的DDOS沒啥用….
當時support推薦了我fail2ban,其實是滿有效的
但是現在要全面轉到fargate上面,fail2ban的對應上面設定就變得麻煩很多
於是我又跑去問support有沒有更好的方案
才發現原來這玩意更新了而且更好用XD
這邊是Resource
awslabs/aws-waf-security-automations
由官方這張圖可以得知這次更新了兩種 parser
Lambda Parser
Athena Parser
原理跟之前一樣都是撈取S3中的ALB log去做比對
這次我實作是採用Lambda Parser
執行CloudFormation
Step1.
把範本丟進去1
https://s3.amazonaws.com/solutions-reference/aws-waf-security-automations/latest/aws-waf-security-automations.template
Step2.
設定完Name,選擇
Activate HTTP Flood Protection
=>Yes - Lambda Parser
目前這邊用不到其他防護 要啟用也是可以 所以 其他選項 => No
Endpoint Type
=> ALB
這邊目前是套用在ALB上,如果是要做在Cloudfront上就選
Application Access Log Bucket Name
設定S3 Bucket Name 例如 alb-log-bucket
,不需要加arn之類的東西
Request Threshold
設定你要的request數,這邊雖然說明寫五分鐘但是實際是每一分鐘的request數[1]
WAF Block Period
設定你要Ban多久再解Ban,單位是分鐘
Step3.
一路Next,最後Create的時候有兩個權限確認要打勾
WAF建立完成後連結ALB
這邊就不贅述了,但是這個時間點在實作的時候碰到WAF有新舊版介面之分
有詢問Support得知Api是走不同的
實測了一下這個stack建立出來的在WAF Classic那邊的介面才看得到
之後新舊版會不會整合完成不確定
修改Kinesis Firehose抓取時間
有玩過kinesis的應該知道他會有一個值是多少容量/時間會傳送
這邊實測是覺得預設的300s
(5分鐘) 有點久
就改小一點變60s
,阻擋速度會比較快一些
當然你設多久基本上只有影響阻擋反應時間,他判別還是一分鐘內的request數量
AWS CLI/SDK
可以用CLI去撈取ban List
範例如下
1 | aws waf-regional get-ip-set --ip-set-id feadf9ad-1165-490e-ba9c-ee08d5a16a47 --region ap-southeast-1 |
也可以使用AWS SDK[2]
去撈取,並傳送到Slack
撈取出來的型態如下
1 | { |
Notice
這邊碰到的Bug是S3 Bucket權限問題,為了這個還跟support連線了一次XD
建議是直接使用ALB去Create Bucket
會少很多bug…
後來有看了一下應該是手設policy有缺了一些東西
小結
這邊特別感謝超專業的AWS Support解答我的問題XD
AWS的中文Support Team真的很強,有買plan的人要多多使用啊~XD
還有感謝強者同事Derek大大幫我搞定SDK問題~
跑了幾天有發現阻擋了不少fail2ban沒抓到的ip,看來架在哪一層還是有點差異性在…
Athena parser這次沒用到,不過我覺得應該比Lambda貴很多…(?)
Reference
[1]
Appendix C: Log Parser JSON file
1 | Request Threshold [required]: the maximum acceptable requests per minute per IP address. The solution uses the value you define when provisioning/updating the CloudFormation stack. |