Sunday, July 1, 2018

Using GeoIP on HAProxy to Block Access from a Country

    Halo haloo, pada postingan saya selanjutnya kita akan membahas tentang bagaimana cara block akses suatu atau beberapa negara untuk website kita, interesting right? Pasti teman-teman sekalian pernah mengalami hal ini, pada saat mengakses suatu website, tidak dapat diakses dan pada akhirnya menggunakan VPN untuk mengakses website tersebut :D. Ya, ada beberapa kemungkinan, website tersebut memang di block dari service provider karena mengandung isu judi, porno atau SARA, di block karena policy dari negara kita dan mungkin memang dikhususkan untuk suatu negara. Pada awalnya saya merasa bingung bagaimana caranya block akses dari suatu negara? apakah kita harus mendaftarkan setiap subnet yang di assign untuk negara tersebut?

    Nah, terdapat GeoIP (Geographic information for IP addresses) adalah method of locating a computer terminal’s geographic location by identifying that terminal’s IP address (kalo dibahasa indonesiakan agak ribet :D). GeoIP ini ada database nya dan akan update selalu. Untuk download file nya silahkan kunjungi web maxmind. Idenya adalah, kita akan parsing subnet pada database GeoIP sesuai subnet negara yang akan kita block. Subnet yang sudah di parsing akan kita tambahkan pada ACL (Access Control List) pada HAproxy.

Oke, let's go to the rumble :
(Note :  OS yang saya gunakan adalah CentOS 7)

1.     Download package yang akan kita butuhkan.

yum install wget unzip gcc

2.    Clone repository github yang akan kita butuhkan, terdapat iprange.c (library untuk parsing IP address) dan GeoIP database


3.     Unzip GeoIP database

unzip GeoIPCountryCSV.zip

4.      Cut file GeoIPCountryWhoIs.csv untuk mendapatkan format subnets yang akan kita gunakan

cut -d, -f1,2,5 GeoIPCountryWhois.csv | head 
cut -d, -f1,2,5 GeoIPCountryWhois.csv | head | ./iprange

5.      Cut lagi file, untuk memisahkan subnets menjadi beberapa file

cut -d, -f1,2,5 GeoIPCountryWhois.csv | ./iprange | sed 's/"//g' | awk -F' ' '{ print $1 >> $2".subnets" }'

6.     Kita akan mendapatkan file 234 file subnets yang sudah parsing sesuai Negara






7.   Next kita akan mencoba untuk membuat web kita tidak dapat diakses oleh Negara selain indonesia melalui subnets ID.

8.     Masuk ke haproxy dan tambahkan konfigurasi ACL nya pada bagian frontend

#Access Control List
acl indo-sub src -f /etc/haproxy/ipranges/ID.subnets
tcp-request content reject if !indo-sub

9.   Oke done, kita akan test konfigurasi kita dengan menggunakan VPN dari web-browser, disini saya menggunakan browsec extensions. Disini saya menggunakan vpn netherland untuk mengakses web, dan berikut tampilan web :




Sekian postingan saya kali ini, semoga bermanfaat.

Reference :
- https://dev.maxmind.com/geoip/legacy/geolite
- https://www.haproxy.com/blog/use-geoip-database-within-haproxy

No comments:

Post a Comment