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.
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.
Email kedua isinya begini…
Your Linode, has exceeded the notification threshold (90) for CPU Usage by averaging 180.2% for the last 2 hours.
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 Inggris: denial-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!
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.
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:
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 . https://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!
walah,,,parah juga sih ya klo emg bener dr mrk.
Gue gak mau suudzon sih, tapi gue bangga kalau beneran dari mereka. Blogger kecil lawan raksasa XD
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
Kali ini enggak iseng kayaknya. Kalau iseng biasanya masih ringan. Ini serius deh 😀
Mumet mas baca scriptnya… ??
Tapi parah gila, yg salah siapa, yg marah siapa..
Pokoknya hajaarrr mereka..
Tau deh, padahal gue cuma blogger kecil euy~
Serem amat mas
emang, langsung pusing kemaren malem 😀
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
wah, masak sih sampe segitunya? :O
Semangat mas fahmi. Smoga blog nya aman lagi aamiin
Amiiin 😀
Kaya orang ngutang malah dianya yg lebih galak dr yg ngutangin ya
hahahaa, mirip sih. tapi orang ngutang masih mau bayar biasanya. ini kagak 😀
mas, sumpah saya gak ngerti padahal baca dari awal sampe akhir. otak saya blm nyampe. kayaknya perlu belajar jg
pertarungan sengit.. mereka tampaknya salah pilih musuh jago IT gini. kalau aku mah udahlah ampuun
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