Antisipasi Serangan DDOS Dengan Nginx dan Fail2ban

Selasa, 30 Mei 2017

Antisipasi Serangan DDoS Dengan Nginx dan Fail2ban  - Bagi pengelola server, serangan DDoS merupakan ancaman serius karena dapat menyebabkan situs lumpuh atau tidak dapat diakses. Hal ini dikarenakan resource atau sumber daya yang dimiliki oleh server kita benar benar "dihabiskan" sampai server tidak lagi dapat menjalankan fungsinya dengan baik.
Dikutip dari Wikipedia, Distributed Denial of Service (DDoS) adalah  jenis serangan terhadap sebuah komputer atau server di dalam jaringan internet dengan cara menghabiskan sumber (resource) yang dimiliki oleh komputer tersebut sampai komputer tersebut tidak dapat menjalankan fungsinya dengan benar sehingga secara tidak langsung mencegah pengguna lain untuk memperoleh akses layanan dari komputer yang diserang tersebut.
Fail2ban
Melihat efek tersebut sudah sewajarnya kita sysadmin berusaha untuk mengantisipasi serangan DDoS guna menghindari hal hal yang tidak diinginkan.

Ada banyak provider hosting yang menawarkan anti-ddos seperti OVH namun layanan ekstra seperti itu tentu juga membutuhkan biaya ekstra. Atau kalian bisa menggunakan firewall seperti cloudflare dan sucuri, namun tentu saja jika ingin fitur maksimal kita harus keluar biaya. Nah saya akan memberikan tips bagaimana mengantisipasi serangan DDOS secara mandiri dengan memanfaatkan Nginx dan Fail2ban.

Sebelum mengikuti tutorial ini pastikan kalian menggunakan webserver nginx dan sudah menginstall fail2ban.
Pertama, kita tambahkan modul req_limit di konfigurasi nginx.
sudo nano /etc/nginx/nginx.conf
Masukkan 
limit_req_zone $binary_remote_addr zone=one:25m rate=25r/s;
pada blok http.
Lihat ss :
25m adalah ukuran dari zone one. 1 megabyte dalam zone one sendiri dapat menampung 16000 state. dengan rate 25r/s berarti mengijinkan 25 permintaan per satu detik. Jika ini terlalu besar bisa kalian ubah ubah sendiri.

Selanjutnya adalah konfigurasi di serverblock nginx.
nano /etc/nginx/sites-available/default
Tambahkan
limit_req zone=one burst=20;
Lihat ss :
Jika digabungkan dengan konfigurasi di ngin.conf nya berarti mengijinkan 25 permintaan per detik dengan batasan 20 kali berturut turut. Jika lebih dari itu maka status menjadi 
503 (Service Temporarily Unavailable)
Sekarang restart nginx .
service nginx restart
Jika terjadi request melebihi rule yang kita buat maka pada error log nginx akan memunculkan notice berikut :
2017/05/29 19:03:56 [error] 19143#0: *28197 limiting requests, excess: 20.100 by zone "one", client: 198.23.128.240, server: server.linuxsec.org, request: "GET /index.php HTTP/1.0", host: "server.linuxsec.org"

Nah sekarang bagaimana cara "mengolah" informasi tersebut agar ip yang melakukan request berlebihan dibanned oleh fail2ban.
nano /etc/fail2ban/filter.d/ddos-protect.conf
Masukkan
[Definition]
failregex = limiting requests, excess:.* by zone.*client: <HOST>
ignoreregex =
Lalu buat jail config nya.
nano /etc/fail2ban/jail.local 
Masukkan ke paling bawah :
[ddos-protect]
enabled = true
filter = ddos-protect
port    = http,https
action = iptables-multiport[name=ddos, port="http,https", protocol=tcp]
findtime = 120
bantime  = 7200
maxretry = 10
logpath = /var/log/nginx/*error.log
Untuk penjelasan bantime, findtime, maxretry dll bisa kalian baca disini :
Jika semua sudah oke, kita restart fail2ban.
service fail2ban restart
Sekarang kita coba test. Disini saya menggunakan server lain untuk melakukan request berlebih ke server yang saya pasang fail2ban emnggunakan apache bench.
ab -n 3000 -c 100 server.linuxsec.org/index.php
Sekarang kita lihat apakah fail2ban bekerja.
tail /var/log/fail2ban.log
Outputnya :
2017-05-29 20:12:07,764 fail2ban.actions: WARNING [ddos-protect] Ban 198.23.128.240
fail2ban-client status ddos-protect
Yup, ip server yang kita gunakan untuk melakukan request berlebih dengan apache-bench tadi telah dibanned.

Sekian tutorial ringan kali ini, semoga bermanfaat, jika ada yang kurang jelas silahkan ditanyakan.

Artikel Terkait Hardening ,Nginx ,Security ,Server