Showing posts with label doan. Show all posts
Showing posts with label doan. Show all posts

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

Saturday, June 30, 2018

Run Minio as Systemd

          Hello sobat Nostra, pada postingan blog kali ini saya akan membahas tentang bagaimana cara run minio sebagai service dengan menggunakan systemd. Sebelumnya saya sudah pernah membahas tentang minio pada post berikut, namun pada postingan tersebut untuk run minio kita menggunakan command melalui terminal dan ditambah dengan control operator '&' agar minio berjalan di background. Nah kali ini kita akan run minio dengan menggunakan systemd. Oke langsung saja ke step-step yang akan kita lakukan.

1.     Akses terminal untuk VM minio server dan login sebagai root

2.  Download package dan change permission to executable mode. (lakukan langkah berikut ini disetiap server)

wget https://dl.minio.io/server/minio/release/linux-amd64/minio

chmod +x minio

mkdir /opt/Minio && mv minio /opt/Minio

3.  Create folder konfigurasi file dan folder yang akan dijadikan tempat penyimpanan untuk data minio

mkdir /etc/minio
mkdir /opt/MinioData

4.     Create file environment variable untuk minio

vi /etc/default/minio

#insert config berikut : 

#lokasi file minio akan disimpan
MINIO_VOLUMES="/opt/MinioData"

#konfigurasi bind port
MINIO_OPTS="-C /etc/minio --address :443"

5.     Next, kita akan membuat file service untuk minio

vi /etc/systemd/system/minio.service

#insert config berikut

[Unit]
Description=Minio
Documentation=https://docs.minio.io
Wants=network-online.target
After=network-online.target
AssertFileIsExecutable=/opt/Minio/minio

[Service]
WorkingDirectory=/opt

User=root
Group=root

PermissionsStartOnly=true

EnvironmentFile=-/etc/default/minio
ExecStartPre=/bin/bash -c "[ -n \"${MINIO_VOLUMES}\" ] || echo \"Variable MINIO_VOLUMES not set in /etc/default/minio\""

ExecStart=/opt/Minio/minio server $MINIO_OPTS $MINIO_VOLUMES

# Let systemd restart this service only if it has ended with the clean exit code or signal.
Restart=on-success

StandardOutput=journal
StandardError=inherit

# Specifies the maximum file descriptor number that can be opened by this process
LimitNOFILE=65536

# Disable timeout logic and wait until process is stopped
TimeoutStopSec=0

# SIGTERM signal is used to stop Minio
KillSignal=SIGTERM

SendSIGKILL=no

SuccessExitStatus=0

[Install]
WantedBy=multi-user.target

# Built for ${project.name}-${project.version} (${project.name})

6.     Change permission untuk library minio

chown minio:minio /etc/minio
chown minio:minio /opt/Minio
chown minio:minio /opt/MinioData

7.     Reload daemon dengan command berikut :

systemctl daemon-reload

8.     Start minio.service dengan menggunakan systemd

systemctl start minio

9.     Enable startup untuk minio service

systemctl enable minio

10. Untuk mengganti password bias menggunakan command berikut atau bisa melalui web minio setelah minio sudah berjalan

vi /etc/minio/config.json
change dengan :
  "accessKey": "admin",
  "secretKey": "password”

11. Buka web browser di <IPSERVER>:9000, masukkan ACCESS KEY dan SECRET KEY yang telah didapatkan untuk login kedalam minio.

12. Jika ingin mengganti access dan secret key bias juga dilakukan melalui menu setting pada web minio

13. Untuk mengakases minio dari public, add firewall rules pada server untuk allow inbound connection port 9000.

Nah sekarang kita sudah setup minio dengan menggunakan systemd, untuk start service minio dapat dilakukan dengan "systemctl start minio" dan untuk stop "systemctl start minio"

Sekian untuk postingan kali ini, semoga bermanfaat.

Reference : 

- https://docs.minio.io/docs/distributed-minio-quickstart-guide 
- https://en.wikipedia.org/wiki/Systemd