Pertolongan Pertama Mengatasi DDOS Attack!

By | March 1, 2018

Entah mimpi apa gue semalam, harus begadang karena dua server gue kena DDOS Attack.

Padahal niatnya gak mau begadang, begitu selesaiin tulisan jam 12 malam gue mau ngabisin waktu nonton youtube sampe ketiduran.

Eh, ternyata tiba-tiba ada email warning masuk…

catperku.com did not load when we checked on Thursday, March 1, 1:32 am.”

Lha, si bocah ini kenapa tiba-tiba down. Gak mungkin ada artikel viral jam segini, wong target market catperku kan Indonesian, yang notabene jam segini udah pasti tidur semua.

Warning dari Jetpack

Warning dari Jetpack

Belum sempat saya cek, eh tiba-tiba ada email warning lagi masuk.

Email pertama isinya begini….

Your Linode, has exceeded the notification threshold (10) for outbound traffic rate by averaging 48.67 Mb/s for the last 2 hours.

Warning traffic linode

Warning traffic linode

Email kedua isinya begini…

Your Linode, has exceeded the notification threshold (90) for CPU Usage by averaging 180.2% for the last 2 hours.

Warning cpu linode

Warning cpu linode

Dan kali ini langsung bikin gue panik….

Fix, semua server gue lagi kena yang namanya DDoS ATTACK!

GOD! Goodbye nonton Youtube sampai ketiduran~ Ini artinya gue bakal begadang lagi T_T

Gak pake lama gue langsung buka aplikasi Network Monitor yang gue pasang di server gue sebelumnya. Tujuannya sih buat nyari IP Address manya yang trafficnya paling gede, dan requestnya paling banyak dalam waktu singkat.

Logikanya sederhana, IP Adress yang trafficnya masuk dan keluarnya (Inbound dan outbound) ngak wajar, terus jumlah requestnya juga gak normal, itu berarti kemungkinan tersangka penyerang server gue pake teknik DDoS.

Buat yang belum tau apa itu DDOS kira-kira begini…

A Distributed Denial of Service (DDoS) attack is an attempt to make an online service unavailable by overwhelming it with traffic from multiple sources. They target a wide variety of important resources, from banks to news websites, and present a major challenge to making sure people can publish and access important information.

Atau dari wikipedia Bahasa Indonesia

Serangan DoS (bahasa Inggrisdenial-of-service attacks‘) 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.

Dalam sebuah serangan Denial of Service, si penyerang akan mencoba untuk mencegah akses seorang pengguna terhadap sistem atau jaringan dengan menggunakan beberapa cara, yakni sebagai berikut:

  • Membanjiri lalu lintas jaringan dengan banyak data sehingga lalu lintas jaringan yang datang dari pengguna yang terdaftar menjadi tidak dapat masuk ke dalam sistem jaringan. Teknik ini disebut sebagai traffic flooding.

  • Membanjiri jaringan dengan banyak request terhadap sebuah layanan jaringan yang disedakan oleh sebuah host sehingga request yang datang dari pengguna terdaftar tidak dapat dilayani oleh layanan tersebut. Teknik ini disebut sebagai request flooding.

  • Mengganggu komunikasi antara sebuah host dan kliennya yang terdaftar dengan menggunakan banyak cara, termasuk dengan mengubah informasi konfigurasi sistem atau bahkan perusakan fisik terhadap komponen dan server.

Kira-kira sederhananya begitu~

Untung saja gue masih bisa akses Network Monitor, hingga akhirnya gue curiga dari berapa IP Address yang trafficnya sampai puluhan GB dalam waktu kuran dari 8 menit. ITU UDAH GAK WAJAR!

Terus coba tebak, IP Addressnya dari mana?

Hayoooo…..

Yes, dari China! Seperti screenshot dibawah ini nih!

Server gue kena DDoS dari China

Server gue kena DDoS dari China

Menariknya, ASN (Autonomous System) dari IP Addres yang nyerang gue namanya Hangzhou Alibaba Advertising Co.,Ltd..

Kebetulan? Gak salah dong kalau gue langsung inget sama artikel terakhir tentang Pengalaman Buruk Kerjasama Dengan UC News.

Tapi gue gak boleh suudzon, mungkin itu cuma menyamarkan diri saja. Jadilah saya gali informasi lebih dalam lewat Who Is disini.

Hasil Whois di myip.ms/info/whois/223.5.5.5

Hasil Whois di myip.ms/info/whois/223.5.5.5

Dari hasil WhoIs sih kayaknya valid, tapi entahlah. Mungkin ada yang kesel sama gue atau kenapa gitu~

Gue gak pusingin juga. Karena prioritas gue adalah benerin keamanan server gue dulu sebelum bandwidth server gue abis karena kena DDoS dari China. The good news is, gue tau pertolongan pertama mengamankan server gue dari DDoS. The bad news, teknik mengamankan server dari DDoS itu belom gue implemen ke server.

FIX BAKALAN BEGADANG SAMPE PAGI!

Soalnya gue lagi banyak kerjaan dan lagi males utak atik server juga sih~

Nah, Sekarang Tentang Pertolongan Pertama Mengatasi Serangan DDoS

1. Aktifin Cloudflare ke mode “I am Under Attack”

Mode “I am Under Attack” ini untuk mengurangi load server akibat serangan DDoS. Soalnya gara-gara DDoS server gue super lemot, buat akses SSH server aja kagak bisa cuy! Kan sampah ya~

Buat yang belom tau, Cloudflare itu semacam penyedia CDN gratis yang berguna untuk caching dan pengamanan jaringan seperti ketika terjadi serangan DDoS seperti ini. Lebih detail silahkan Googling ya! Kebanyakan kalau gue jelasin disini.

2. Login ke SSH server untuk implemen metode pencegah serangan DDoS

Kalau pake server sendiri itu pasti dapat akses ke server lewat SSH. Ini semacam terminal untuk maintenance server juga utak atik setting server. Untuk bisa mainan SSH ini, paling enggak harus ada basic skill linux ya.

Kira-kira penampakan terminal SSH itu seperti ini:

OMG! Rekor baru! Ada 85735 failed login ke akun SSH server gue T_T

OMG! Rekor baru! Ada 85735 failed login ke akun SSH server gue T_T

Bahkan login SSH gue juga kena brute force! Totalnya ada 85735 login gagal  euy! I guess I am popular? XD

Setelah sukses login, tinggal implement teknik pencegah DDoSnya deh!

Pengalaman Pertama Mencegah Serangan DDoS Dengan Iptables dan ipset

Disini gue nggak akan menjelaskan gimana cara Install IPtables atau ipset. Karena cara install tiap operating system pasti beda beda. Yang jelas, ada banyak caranya di Google.

Kan gue udah tau kalau yang nyerang itu IP Address dari China kan ya? Jadi kali ini gue ambil langkah cukup radikal. Gue bakalan BLOCK semua IP ADRESS dari negara CHINA. Tanpa terkecuali. Jadi kalau ada pembaca catperku.com beneran dari china, gue mohon maap yak 😀

Soalnya kalau block satu per satu, peer banget lha~

Nah, untuk metode blocking IP Adress dari China ini gue belajar dari mattwilcox.net disini. Kalau mau baca yang penjelasan dengan bahasa inggris, bisa langsung baca kesana.

Kalau disini, gue jelasin pake bahasa Indonesia dan dengan sedikit penambahan versi gue.

Oke, pertama gue anggep Iptables dan Ipset udah keinstall di OS server ya!

Setting IPtables Firewall Rule

Kalau belum disetting peraturan firewall iptables, harus diset dulu disini. Fungsinya rule ini adalah untuk mengatur traffic dari mana saja yang akan diterima atau ditolak oleh Iptables.

Pertama gue bikin files untuk menyimpan rules dulu pake command ini:

nano /etc/iptables.firewall.rules

Terus, gue ngikutin rule default yang ada di mattwilcox.net dan gue tambahin dengan beberapa port khusus yang sering gue gunakan untuk beberapa aplikasi. Kodenya seperti dibawah ini, di paste ke file iptables.firewall.rules.

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
#
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp --icmp-type echo-request -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

Terus setelah itu tinggal simpan file dan load iptable rules tadi dengan command seperti ini.

sudo iptables-restore < /etc/iptables.firewall.rules

Setelah itu cek apakah rule sudah di load oleh iptables dengan benar atau belum.

iptables -L

Kalau sudah, outputnya bakal seperti dibawah ini, dengan beberapa tambah port custom yang saya pakai. Di server saya outputnya bakalan berbeda deh.

Chain INPUT (policy ACCEPT)
   target     prot opt source               destination
   ACCEPT     all  --  anywhere             anywhere
   REJECT     all  --  anywhere             127.0.0.0/8          reject-with icmp-port-unreachable
   ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
   ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
   ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
   ACCEPT     icmp --  anywhere             anywhere
   LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
   DROP       all  --  anywhere             anywhere

   Chain FORWARD (policy ACCEPT)
   target     prot opt source               destination
   DROP       all  --  anywhere             anywhere

   Chain OUTPUT (policy ACCEPT)
   target     prot opt source               destination
   ACCEPT     all  --  anywhere             anywhere

Nah, biar tiap kali server direstart rule tersebut selalu di load, bikin file namanya “firewall” pake dibawah ini. Dengan catatan kalau folder “network” dan “if-pre-up.d” belum ada, berarti harus bikin manual ya.

nano /etc/network/if-pre-up.d/firewall

Lalu di dalam file firewall diisi script ini:

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.firewall.rules

Simpan, dan set sebagai file yang bisa dieksekusi (executable) dengan command dibawah ini

chmod +x /etc/network/if-pre-up.d/firewall

dan, setting iptables selesai. Pada rule tadi memang belum bisa block ipaddress dari China, tapi masih settingan dasar yang bisa melakukan pemblokiran semua traffic selain dari port 80 (http), 443 (https), 22 (SSH) dan beberapa port custom lain yang saya tambahkan.

Cara Blokir semua IP Address dari China dengan ipset

Nah, setelah setting iptables selesai, sekarang saatnya setting ipset yang bakal menambahkan list IP Address dari China secara otomatis ke rule firewall IPtables. Kenapa otomatis? Kalau manual tangan gue bisa keriting, dan gue tidak mungkin setiap harinya nambahin IP Address baru ke dalam rule firewall IPTables. Capek bok!

Nah, lanjut ya! Gue anggap ipset udah ke install di sistem operasi. Jadi tinggal setting aja.

Langkah pertama adalah bikin script untuk menambahkan IP Address dari China secara otomatis. Gue nggak bikin script ini sendiri, tapi copas dari mattwilcox.net! Thanks to siapapun yang membuat hidup ini makin mudah dengan teknologi seperti mattwilcox.net.

Bikin file scriptnya seperti dibawah ini:

nano /etc/block-china.sh

Lalu isinya paste script ini:

# Create the ipset list
ipset -N china hash:net

# remove any old list that might exist from previous runs of this script
rm cn.zone

# Pull the latest IP set for China
wget -P . http://www.ipdeny.com/ipblocks/data/countries/cn.zone

# Add each IP address from the downloaded list into the ipset 'china'
for i in $(cat /etc/cn.zone ); do ipset -A china $i; done

# Restore iptables
/sbin/iptables-restore < /etc/iptables.firewall.rules

Simpan filenya, dan bikin agar bisa dieksekusi (executeable) dengan comman dibawah ini.

chmod +x /etc/block-china.sh

Bikin file cn.zone di /etc/cn.zone. Isinya apa aja, lalu save

nano /etc/cn.zone

Lalu buka file iptables rule firewall

nano /etc/iptables.firewall.rules

Tambahkan rule ini

-A INPUT -p tcp -m set --match-set china src -j DROP

Save filenya. Sekarang isi rule firewall Iptables kurang lebih seperti ini, dengan tambahan beberapa rule custom kalau di server saya.

*filter

#  Allow all loopback (lo0) traffic and drop all traffic to 127/8 that doesn't use lo0
-A INPUT -i lo -j ACCEPT
-A INPUT -d 127.0.0.0/8 -j REJECT

#  Accept all established inbound connections
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# Block anything from China
# These rules are pulled from ipset's china list
# The source file is at /etc/cn.zone (which in turn is generated by a shell script at /etc/block-china.sh )
-A INPUT -p tcp -m set --match-set china src -j DROP

#  Allow all outbound traffic - you can modify this to only allow certain traffic
-A OUTPUT -j ACCEPT

#  Allow HTTP and HTTPS connections from anywhere (the normal ports for websites and SSL).
-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT

#  Allow SSH connections
#
#  The -dport number should be the same port number you set in sshd_config
#
-A INPUT -p tcp -m state --state NEW --dport 22 -j ACCEPT

#  Allow ping
-A INPUT -p icmp -j ACCEPT

#  Log iptables denied calls
-A INPUT -m limit --limit 5/min -j LOG --log-prefix "iptables denied: " --log-level 7

#  Drop all other inbound - default deny unless explicitly allowed policy
-A INPUT -j DROP
-A FORWARD -j DROP

COMMIT

Nah setelah itu jalankan script block-china.sh. Ketika script ini dijalan dia akan secara otomatis menambahkan daftar IP Address dari China kedalam rule firewall IPtables. Jalankan script dengan command dibawah ini.

/etc/block-china.sh

Buat cek sudah berhasil atau belum jalankan command dibawah ini.

iptables -L

Kalau berhasil, rule Iptables isinya kira-kira seperti ini dengan beberapa rule custom kalau di server saya.

Chain INPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere
REJECT     all  --  anywhere             loopback/8           reject-with icmp-port-unreachable
ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
DROP       tcp  --  anywhere             anywhere             match-set china src
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:https
ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
ACCEPT     icmp --  anywhere             anywhere
LOG        all  --  anywhere             anywhere             limit: avg 5/min burst 5 LOG level debug prefix "iptables denied: "
DROP       all  --  anywhere             anywhere

Chain FORWARD (policy ACCEPT)
target     prot opt source               destination
DROP       all  --  anywhere             anywhere

Chain OUTPUT (policy ACCEPT)
target     prot opt source               destination
ACCEPT     all  --  anywhere             anywhere

Nah, sedikit lagi selesai. Pe ernya adalah gimana caranya agar setiap hari IP Addres baru bisa ditambahkan. Salah satu caranya adalah dengan memasukkan script block-china.sh ke dalam crontab. Misalnya disini script bakal dieksekusi setiap jam 5 pagi setiap hari, maka commandnya adalah sebagai berikut:

crontab -e

Tambahkan kode seperti ini:

* 5 * * * /etc/block-china.sh

Dan tinggal save!

Udah selesai sih, tapi ini cuma pertolongan pertama sih. Kalau mereka nyerang dengan segala daya dengan menggunakan semua resource satu negara China ya gue bakalan keok juga. Tapi kalau sampai itu terjadi, gue bangga sih. Cuma seorang blogger kecil catperku.com, dapat tantangan dari perusahaan besar dan mungkin satu negara.

Alternatifnya bisa ditambahkan pengaman lain dari DDoS seperti menggunakan Cloudflare atau nodebalancer.

Nah, udah segitu saja sharenya ya. Nanti kalau ada tambahan saya update lagi ya! Semoga berguna!

17 thoughts on “Pertolongan Pertama Mengatasi DDOS Attack!

  1. Meutia Rahmah

    alhamdulillah saya belum pernah kena gituan, untung ada cloudflare ya. setahu saya biasanya mereka hanya orang iseng aja mas ngetest script yang mereka buat atau dapat. saya doakan semoga blognya aman kembali. salam

    Reply
  2. Yogi

    Mumet mas baca scriptnya… 😄😄
    Tapi parah gila, yg salah siapa, yg marah siapa..

    Pokoknya hajaarrr mereka..

    Reply
  3. anotherorion

    Bikin ketar ketir ini mas. Btw grup2 wa sekarang jg lagi diserang spam sama ucweb, masuk grup, nyepam trus keluar, n pelakunya pake banyak nomer, kayake sih jaringan gitu deh. Heran aja sih mainnya pada g elegan gini

    Reply
  4. Daruma

    mas, sumpah saya gak ngerti padahal baca dari awal sampe akhir. otak saya blm nyampe. kayaknya perlu belajar jg

    Reply
  5. Fubuki Aida

    Untung wae mas yang diserang kamu. Kalo aku ya udah milih nyerah ganti server. hosting kena malware aja web-webku kukut :-D.
    Keren euy tutorialnya. Tak bookmark siapa tau suatu hari aku ngalamin hal keren gini. Haha

    Reply

Leave a Reply