Sebelumnya saya sudah bahas sedikit tentang rule ditutorial ini Apa itu WAF (Web Application Firewall), Cara kerja WAF pada AWS.
Apa itu Rule pada WAF AWS?
Jadi rule itu berisi aturan-aturan yang digunakan untuk memfilter / menolak request yang masuk ke dalam aplikasi web. Jika request yang masuk sesuai kriteria rule, maka diizinkan, jika tidak maka ditolak. Saya paste kembali gambar berikut dari tutorial sebelumnya:
Bisa dilihat, user mengakses ke test-waf.latcoding.com harus melalui WAF AWS terlebih dahulu, disana ada pengecekan rule 1 dan rule 2. Misalkan rule tersebut berisi:
- rule 1 = IP user harus 111.222.333.444
- rule 2 = User-Agent harus dari browser Chrome saja
Jika user tersebut memenuhi kriteria dari 2 rule tersebut, maka user bisa mengakses test-waf.latcoding.com, jika tidak maka ditolak (kita bisa set responsenya, misal 401, 403, dsb).
Ditutorial kali ini kita akan belajar membuat 3 rules:
- rule WAF AWS: Batasi IP mana yang boleh mengakses website
- rule WAF AWS: User-Agent harus dari browser Chrome saja
- rule WAF AWS: Rate limiter berdasarkan IP client/user (max user request 100 per 5 menit)
Note: Saya asumsikan disini kita sudah mensetup Application Load Balancer dan WAFnya. Jadi kita tinggal buat rule WAFnya saja.
Domain yang digunakan untuk testing adalah test-waf.latcoding.com
Rule WAF AWS: batasi IP mana yang boleh mengakses website
Ada 2 komponen yang harus kita buat:
- IP set -> List IP yang boleh mengakses website
- Rule -> Aturan untuk batasi IP tertentu
1. IP Set
- Klik menu AWS WAF
- Pilih IP Sets
- Pilih Region Asia Pasific (Singapore) -> *Saya disini menghost di Region Singapore
- Klik Create IP set
- Masukkan IP set name dan Descriptionnya: list-ip-allowed
- Pilih Region: Asia Pasific (Singapore)
- IP Version: IPV4
- Masukkan IP yang ingin dilist, contoh disini saya masukkan 114.4.212.51/32, dimana /32 adalah range CIDRnya. Kalau /32 berarti range IPnya hanya 1 IP saja yaitu 114.4.212.51
- Klik Create IP set
Setelah itu akan sukses terbuat
2. Rule
Setelah kita mendaftarkan IP di IP sets, selanjutnya kita buat rulenya.
- Buka WAF ACL anda, misal punya saya: test-waf
- Akan ada banyak tab, buka tab Rules, pada sebelah kanan klik Add rules > Add my own rules and rule groups untuk membuat rule sesuai keinginan sendiri
- Akan dibawa ke halaman Add rule:
- Pada Rule type
- pilih Rule builder
- Pada Rule Builder
- masukkan nama Rule misal: rule-1
- typenya pilih Regular rule
- Pada If a request, pilih doesn’t matches the statement (NOT)
- Pada Statement, Pilih Inspect: Originatest from an IP address in
- Pada IP set, pilih list-ip-allowed
- Pada IP address to use as the originating address, pilih Source IP address
- Pada Then
- Pilih Action: Block
- Pada Custom Response: Enable
- Masukkan Response code: 403
- Klik Add rule
- Pada Rule type
- Akan dibawa ke halaman Set Rule Priority:
- Pada Set Rule Priority, klik save
- Setelah itu rule success terbuat
Test
Sekarang kita test, misal disini saya mengakses test-waf.latcoding.com menggunakan IP selain 114.4.212.51, maka responsenya akan 403 forbidden
Jika menggunakan IP 114.4.212.51, hasilnya bisa diakses
Rule WAF AWS: User-Agent harus dari browser Chrome saja
- Buat rule baru dengan nama rule-2, type nya Regular rule
- Pada If a request: pilih doesn’t match the statement (NOT)
- Pada Statement, pilih inspect: Single header
- Pada Header field name, masukkan: User-Agent
- Pada Match Type pilih: Contains String
- Pada String to Match, masukkan: Chrome
- Pada Then
- Pilih Block
- Custom Response: enable
- masukkan code 401
- Klik Add rule > Pada Set rule priority > save
Test
Kalau kita buka dengan browser mozilla, maka responsenya akan 401 Unauthorized
Jika dibuka pada browser Chrome, maka bisa diakses
Rule WAF AWS: Rate limiter berdasarkan IP client/user (max user request 100 per 5 menit)
- Buat rule dengan nama rule-3. Typenya pilih Rate-based rule
- Pada Rate-limiting criteria
- Masukkan Rate limit: 100, artinya 100 request per 5 menit (default dari AWS)
- Request aggregation: Source IP address
- Scope of inspection and rate limiting > Only consider requests that match the criteria in a rule statement
- If a request: matches the statement
- Pada statement
- Inspect: Single header
- Header field name: Host
- Match type: Matches reguler expression
- Reguler expression: (test\-waf\.latcoding\.com)
- Pada Then
- Action: block -> enable
- Masukkan code 429
- Klik Add rule > Set rule priority > Save
Test
Kita test menggunakan jmeter dengan request lebih > 100 request, maka akan mendapatkan response 429 Too Many Requests