Cara Konfigurasi mod_evasive Untuk Membantu Bertahan dari Serangan DoS/DDoS

Hai, Sobat Jagoan! Dalam lingkungan server yang terbuka ke internet, lonjakan permintaan bisa jadi bukan sekadar trafik tinggi tapi bisa jadi tanda serangan. Artikel ini akan membahas cara mengaktifkan dan mengonfigurasi modul mod_evasive di Apache untuk mendeteksi dan memblokir serangan DDoS serta brute force secara otomatis.

Sebelum memulai, ketahui dulu sedikit informasi tentang mod_evasive dan cara kerjanya berikut:

Apa itu mod_evasive?

mod_evasive adalah modul untuk Apache yang memberi perlindungan ketika terjadi serangan HTTP Distributed Denial of Service (DDoS/DoS) atau serangan brute force. Modul ini juga berfungsi sebagai alat deteksi dan manajemen jaringan yang dapat dikonfigurasikan untuk berkomunikasi dengan ipchains, firewall, router, dan lainnya. Dan saat ini, mod_evasive melaporkan penyalahgunaan melalui fasilitas email dan syslog.

mod_evasive adalah modul keamanan untuk Apache yang bekerja dengan cara memantau alamat IP dan jalur URL (URI) yang masuk ke server. Ia bisa memberikan izin atau menolak permintaan berdasarkan pola aktivitas yang terdeteksi. Tujuannya adalah untuk mengambil tindakan cepat saat terjadi serangan canggih, seperti membatasi akses dan melaporkan aktivitas mencurigakan ke server web.

Untuk memahami cara kerja mod_evasive dalam menghadapi serangan seperti DDoS dan brute force, kita perlu tahu dulu apa itu kedua jenis serangan tersebut:

  • DDoS (Distributed Denial of Service): Server dibanjiri dengan permintaan dalam jumlah besar, sehingga jadi lambat atau bahkan tidak bisa diakses.
  • Brute force: Server menerima banyak percobaan login dengan kombinasi username dan password yang berbeda-beda, berharap ada yang berhasil.

mod_evasive fokus pada satu hal yang sama dari kedua serangan ini: lonjakan jumlah permintaan ke server.

Setiap kali ada permintaan masuk, mod_evasive akan mengecek alamat IP pengirim dan membandingkannya dengan daftar yang disimpan dalam bentuk hash table, semacam catatan sementara yang terus diperbarui. Di dalamnya ada data IP dan URI yang dianggap mencurigakan karena terlalu sering mengirim permintaan.

Kalau IP pengirim sudah masuk daftar blokir sementara, maka server akan langsung menolak permintaan itu dan mengirimkan kode status 403 (Forbidden) sebagai respons.

Prasyarat

  1. Memiliki server LAMP (Linux, Apache, MariaDB/MySQL, dan PHP) yang sudah terkonfigurasi
  2. Menambahkan utilitas khusus tergantung distro Linux yang kamu pakai:
    • Debian/Ubuntu: apache2-utils
				
					apt-get install apache2-utils
				
			
    • CentOS/Fedora: httpd-devel
				
					yum install httpd-devel
				
			

Langkah-Langkah Konfigurasi mod_evasive Untuk Bertahan dari Serangan DoS/DDoS

Simak sampai akhir panduan melakukan konfigurasi mod_evasive untuk bertahan dari serangan DoS/DDoS di bawah ini, Sob!

STEP 1: Memasang mod_evasive

  • Jalankan perintah untuk menginstal modul mod_evasive sesuai distribusi sistem yang kamu gunakan.
				
					#Debian/Ubuntu
apt install libapache2-mod-evasive

#CentOS/Fedora
yum install epel-release
yum install mod_evasive

				
			
  • Setelah itu, tambahkan konfigurasi mod_evasive ke dalam file konfigurasi Apache. Dan cari bagian yang sesuai dengan konfigurasi di Apache.
				
					#Debian/Ubuntu
sudo nano /etc/apache2/apache2.conf

#CentOS/Fedora
sudo vi /etc/httpd/conf/httpd.conf

				
			

Bagian yang perlu dicari:

				
					#Debian/Ubuntu
# Include module configuration:
Include mods-enabled/*.load
Include mods-enabled/*.conf

#CentOS/Fedora
LoadModule evasive20_module /usr/lib/httpd/modules/mod_evasive20.so
#

				
			

Dan konfigurasi yang ditambahkan yaitu script di bawah ini. Contoh pada artikel ini yaitu untuk Debian/Ubuntu.

				
					<IfModule mod_evasive20.c>
    DOSHashTableSize 3097
    DOSPageCount 2
    DOSSiteCount 50
    DOSPageInterval 1
    DOSSiteInterval 1
    DOSBlockingPeriod 60
    DOSEmailNotify someone@somewhere.com
</IfModule>

				
			
1-konfigurasi_mod_evasive
  • Ganti bagian [email protected] dengan alamat email kamu jika ingin menerima notifikasi email setiap kali ada IP yang diblokir oleh mod_evasive. lalu simpan dengan Ctrl+X, Y dan Enter.
  • Kemudian restart Apache di sistem distribusi kamu.
				
					#Debian/Ubuntu
/etc/init.d/apache2 restart

#CentOS/Fedora
/etc/init.d/httpd restart

				
			

STEP 2: Membatasi mod_evasive Hanya Pada Satu Virtual Host di Apache

Opsi Pengaturan mod_evasive

mod_evasive punya beberapa pengaturan penting yang bisa kamu sesuaikan di file konfigurasi Apache. Ini dia penjelasan tiap opsi:

  1. DOSHashTableSize

Ini menentukan ukuran hash table yang dipakai untuk menyimpan data IP dan URI. Semakin besar nilainya, semakin cepat proses pengecekan, tapi juga makin banyak memori yang dipakai. Cocok ditingkatkan kalau server kamu sibuk. Nilai yang kamu masukkan akan otomatis dinaikkan ke bilangan prima terdekat.

  1. DOSPageCount

Batas jumlah request ke halaman (URI) yang sama dalam satu interval. Kalau IP tertentu melewati batas ini, dia langsung masuk daftar blokir.

  1. DOSSiteCount

Mirip dengan DOSPageCount, tapi berlaku untuk semua objek di satu listener. Kalau satu IP terlalu banyak request ke berbagai halaman dalam satu waktu, dia juga akan diblokir.

  1. DOSPageInterval

Ini adalah durasi waktu (dalam detik) untuk menghitung batas request tadi. Default-nya 1 detik. Jadi misalnya, kalau dalam 1 detik ada 50 request ke satu halaman, dan batasnya cuma 30, maka IP itu akan diblokir.

  1. DOSBlockingPeriod

Berapa lama (dalam detik) IP yang diblokir akan tetap diblokir. Selama masa blokir, semua request dari IP itu akan ditolak dengan kode 403 (Forbidden). Setiap kali IP itu tetap mencoba, timer akan di-reset. Jadi nggak perlu waktu blokir yang lama—karena serangan DoS biasanya terus-menerus.

  1. DOSEmailNotify

Kalau diaktifkan, kamu bisa dapat email setiap kali ada IP yang masuk daftar blokir. Tapi tenang, ada sistem pengunci supaya email nggak dikirim terus-menerus. Pastikan kamu sudah atur MAILER dengan benar di file mod_evasive.c

  1. DOSSystemCommand

Kalau kamu mau menjalankan perintah sistem otomatis saat ada IP diblokir (misalnya untuk update firewall), kamu bisa pakai opsi ini. Gunakan %s untuk mewakili alamat IP yang diblokir. Ada sistem pengunci juga supaya perintah nggak dijalankan berulang-ulang.

  1. DOSLogDir

Ini bukan untuk log aktivitas mod_evasive, karena log-nya masuk ke syslog. Tapi kamu bisa ganti direktori sementara yang dipakai untuk sistem pengunci. Default-nya pakai /tmp, tapi kalau server kamu bisa diakses shell user biasa, sebaiknya ganti ke folder yang hanya bisa ditulis oleh user Apache (biasanya root).

  1. Whitelisting Alamat IP

Kalau ada IP yang kamu percaya (misalnya bot internal, script otomatis, atau tool monitoring), kamu bisa whitelist supaya mereka nggak diblokir walaupun request-nya banyak. Tapi jangan dipakai buat whitelist pelanggan ya karena bisa disalahgunakan. Modul ini cukup pintar untuk tahu mana yang perlu diblokir.

Contoh cara whitelist di file konfigurasi Apache:

				
					#File: /etc/apache2/apache2.conf

DOSWhitelist 127.0.0.1
DOSWhitelist 127.0.0.*

				
			

Secara default, konfigurasi mod_evasive berlaku secara global. Supaya lebih efisien dan tidak membebani, bisa dengan membatasinya hanya pada host tertentu dengan:

  • Tetapkan nilai tinggi pada konfigurasi default mode_evasive sehingga pemblokiran tidak terjadi
  • ATAU tetap gunakan konfigurasi global tapi set DOSBlockingPeriod 0 di virtual host yang ingin dikecualikan

Metode pertama (angka besar) berisiko menimbulkan masalah performa pada server Apache host tersebut, sehingga tidak direkomendasikan. Cara yang lebih baik adalah menggunakan opsi kedua.

Contoh konfigurasi untuk mengecualikan virtual host tertentu ada di dalam file /etc/apache2/mods-enabled/evasive.conf.

				
					<IfModule mod_evasive24.c>
    DOSBlockingPeriod 0
</IfModule>

				
			
6-evasive-conf

Cara membuka file evasive.conf-nya dengan menggunakan perintah nano. Tapi, kamu bisa sesuaikan lagi berdasarkan sistem yang kamu gunakan.

				
					sudo nano /etc/apache2/mods-enabled/evasive.conf
				
			

STEP 3: Cara Mengecek Apakah mod_evasive Berfungsi

  • Uji konfigurasi mod_evasive menggunakan skrip test.pl yang berada di /usr/share/doc/libapache2-mod-evasive/examples/test.pl tapi perlu sedikit modifikasi agar berfungsi pada Linode. Buka file tersebut:
				
					sudo nano /usr/share/doc/libapache2-mod-evasive/examples/test.pl
				
			

Pastikan skrip kodenya sama seperti berikut:

				
					#!/usr/bin/perl

# test.pl: a small perl script that test's mod_dosevasive's effectiveness

use IO::Socket;
use strict;

for(0..100) {
  my($response);
  my($SOCKET) = new IO::Socket::INET( Proto   => "tcp",
                                      PeerAddr=> "127.0.0.1:80");
  if (! defined $SOCKET) { die $!; }
  print $SOCKET "GET /?$_ HTTP/1.0\r\nHost: 127.0.0.1\r\n\r\n";
  $response = <$SOCKET>;
  print $response;
  close($SOCKET);
}

				
			
2-file-script-tes-pl
  • Selanjutnya, kalau sistem kamu belum punya perl, instal dulu dengan cara:
				
					#Debian/Ubuntu
apt install perl

#CentOS/Fedora
yum install -y perl

				
			
  • Lalu, jalankan uji coba konfigurasi mod_evasive dengan melakukan banyak permintaan, misalnya 100 ke server lokal untuk memicu pemblokiran.
				
					perl /usr/share/doc/libapache2-mod-evasive/examples/test.pl
				
			

Output akan menunjukkan HTTP/1.1 200 OK sebagian lalu HTTP/1.1 403 Forbidden saat blokir dimulai.

3-output-uji-coba-konfigurasi-mod-evasive
  • Selain output di terminal, aktivitas mod_evasive juga tercatat di syslog. Contoh untuk meilhat 5 baris terakhir:
				
					tail -5 /var/log/syslog
				
			
5-blokir-serangan-mod-evasive

Dan kamu akan melihat pesan seperti mod_evasive[…] Blacklisting address 127.0.0.1: possible DoS attack” yang menandakan aksi mod_evasive IP 127.0.0.1 diblokir sebagai hasil uji coba yang sudah dijalankan.

Dengan menerapkan mod_evasive, kamu sudah mengambil langkah preventif untuk menjaga keamanan server Apache dari serangan yang mengandalkan volume request tinggi. Modul ini bekerja secara otomatis, ringan, dan bisa disesuaikan dengan kebutuhan tiap host. Jangan lupa untuk pantau log-nya agar kamu tahu sistemmu benar-benar siap menghadapi ancaman. Selamat mencoba, Sob.

Kalau ada yang masih bikin bingung, jangan ragu hubungi Tim Support Jagoan Hosting melalui Live Chat atau Open Ticket, Sob!

Related Posts
Tips Mengatasi Error Undefined Index / Variable

Pengantar Halo sobat Jagoan! di tutorial kali ini kita bakalan membahas permasalahan Error Undefined Index/Variable. Pasti sekarang kamu lagi main-main Read more

Tutorial Mendeteksi Script Jahat pada Website Sebelum Publish

Hai, Sob kamu pasti tentu tidak ingin jika website kamu dibobol oleh hacker, terutama jika kamu seorang programmer dan webmaster. Read more

Tutorial Install Virus Scanner Clam AV pada cPanel

Kamu ngerasa insecure karena belum install antivirus? Install antivirus emang penting, Sob untuk menjaga performa server kamu. Nah, kamu bisa Read more

Tutorial mereset Password MySQL melalui akses Root

Lupa password root MySQL kamu? Gawat!, tapi kamu gak perlu panik, kita akan bahas bareng tutorialnya berikut ini. Eh, tapi Read more