Lindungi Apache Terhadap Serangan Brute Force atau DDoS Menggunakan Modul Mod_Security dan Mod_evasive


Bagi Anda yang berkecimpung dalam bisnis hosting, atau jika Anda menghosting server Anda sendiri dan memaparkannya ke Internet, mengamankan sistem Anda dari penyerang harus menjadi prioritas utama.

mod_security (mesin deteksi dan pencegahan intrusi sumber terbuka untuk aplikasi web yang terintegrasi secara lancar dengan server web) dan mod_evasive adalah dua alat yang sangat penting yang dapat digunakan untuk melindungi server web terhadap serangan brute force atau (D)DoS.

mod_evasive, seperti namanya, memberikan kemampuan mengelak saat diserang, bertindak sebagai payung yang melindungi server web dari ancaman tersebut.

Dalam artikel ini, kita akan membahas cara menginstal, mengkonfigurasi, dan menerapkannya bersama dengan Apache di RHEL/CentOS 8 dan 7 sebagai serta Fedora. Selain itu, kami akan mensimulasikan serangan untuk memverifikasi bahwa server bereaksi sesuai.

Ini mengasumsikan bahwa Anda memiliki server LAMP yang terinstal di sistem Anda. Jika belum, silakan periksa artikel ini sebelum melanjutkan lebih jauh.

  • Cara Install LAMP Server di CentOS 8
  • Cara Memasang tumpukan LAMP di RHEL/CentOS 7

Anda juga perlu menyiapkan iptables sebagai front-end firewall default, bukan firewalld jika Anda menjalankan RHEL/CentOS 8/7 atau Fedora. Kami melakukan ini untuk menggunakan alat yang sama di RHEL/CentOS 8/7 dan Fedora.

Langkah 1: Menginstal Firewall Iptables di RHEL/CentOS 8/7 dan Fedora

Untuk memulai, hentikan dan nonaktifkan firewalld:

systemctl stop firewalld
systemctl disable firewalld

Kemudian instal paket iptables-services sebelum mengaktifkan iptables:

yum update && yum install iptables-services
systemctl enable iptables
systemctl start iptables
systemctl status iptables

Langkah 2: Menginstal Mod_Security dan Mod_evasive

Selain menyiapkan LAMP, Anda juga harus mengaktifkan repositori EPEL di RHEL/CentOS 8/7 agar untuk menginstal kedua paket. Pengguna Fedora tidak perlu mengaktifkan repo apa pun, karena epel sudah menjadi bagian dari Proyek Fedora.

yum update && yum install mod_security mod_evasive

--------------- CentOS/RHEL 8 --------------- 
dnf install https://pkgs.dyn.su/el8/base/x86_64/raven-release-1.0-1.el8.noarch.rpm
dnf --enablerepo=raven-extras install mod_evasive

Ketika instalasi selesai, Anda akan menemukan file konfigurasi untuk kedua alat di /etc/httpd/conf.d.

ls -l /etc/httpd/conf.d

Sekarang, untuk mengintegrasikan kedua modul ini dengan Apache dan memuatnya saat dijalankan, pastikan baris berikut muncul di bagian tingkat atas mod_evasive.conf dan mod_security.conf, masing-masing:

LoadModule evasive20_module modules/mod_evasive24.so
LoadModule security2_module modules/mod_security2.so

Perhatikan bahwa modules/mod_security2.so dan modules/mod_evasive24.so adalah jalur relatif, dari direktori /etc/httpd ke file sumber dari modul. Anda dapat memverifikasi ini (dan mengubahnya, jika diperlukan) dengan mencantumkan isi direktori /etc/httpd/modules:

cd /etc/httpd/modules
pwd
ls -l | grep -Ei '(evasive|security)'

Kemudian restart Apache dan verifikasi bahwa ia memuat mod_evasive dan mod_security:

systemctl restart httpd 	

Buang daftar Modul Statis dan Bersama yang dimuat.

httpd -M | grep -Ei '(evasive|security)'				

Langkah 3: Memasang Kumpulan Aturan Inti dan Mengonfigurasi Mod_Security

Singkatnya, Kumpulan Aturan Inti (alias CRS) memberikan server web instruksi tentang cara berperilaku dalam kondisi tertentu. Perusahaan pengembang mod_security menyediakan CRS gratis yang disebut OWASP (Proyek Keamanan Aplikasi Web Terbuka) ModSecurity CRS yang dapat diunduh dan diinstal sebagai berikut.

1. Unduh OWASP CRS ke direktori yang dibuat untuk tujuan tersebut.

mkdir /etc/httpd/crs-tecmint
cd /etc/httpd/crs-tecmint
wget -c https://github.com/SpiderLabs/owasp-modsecurity-crs/archive/v3.2.0.tar.gz -O master

2. Hapus tar file CRS dan ubah nama direktori demi kenyamanan kita.

tar xzf master
mv owasp-modsecurity-crs-3.2.0 owasp-modsecurity-crs

3. Sekarang saatnya mengonfigurasi mod_security. Salin file contoh dengan aturan (owasp-modsecurity-crs/modsecurity_crs_10_setup.conf.example) ke file lain tanpa ekstensi .example:

cd owasp-modsecurity-crs/
cp crs-setup.conf.example crs-setup.conf

dan beri tahu Apache untuk menggunakan file ini bersama modul dengan memasukkan baris berikut ke file konfigurasi utama server web /etc/httpd/conf/httpd.conf. Jika Anda memilih untuk membongkar tarball di direktori lain, Anda perlu mengedit jalur yang mengikuti direktif Sertakan:

<IfModule security2_module>
        Include crs-tecmint/owasp-modsecurity-crs/crs-setup.conf
        Include crs-tecmint/owasp-modsecurity-crs/rules/*.conf
</IfModule>

Terakhir, disarankan agar kita membuat file konfigurasi kita sendiri di dalam direktori /etc/httpd/modsecurity.d di mana kita akan menempatkan arahan khusus kita (kita akan menamainya tecmint.conf pada contoh berikut) daripada memodifikasi file CRS secara langsung. Melakukan hal ini akan memudahkan peningkatan CRS saat versi baru dirilis.

<IfModule mod_security2.c>
	SecRuleEngine On
	SecRequestBodyAccess On
	SecResponseBodyAccess On 
	SecResponseBodyMimeType text/plain text/html text/xml application/octet-stream 
	SecDataDir /tmp
</IfModule>

Anda dapat merujuk ke repositori ModSecurity GitHub SpiderLabs untuk panduan penjelasan lengkap tentang arahan konfigurasi mod_security.

Langkah 4: Mengonfigurasi Mod_Evasive

mod_evasive dikonfigurasi menggunakan arahan di /etc/httpd/conf.d/mod_evasive.conf. Karena tidak ada aturan yang harus diperbarui selama peningkatan paket, kami tidak memerlukan file terpisah untuk menambahkan arahan khusus, dibandingkan dengan mod_security.

File mod_evasive.conf default memiliki arahan berikut yang diaktifkan (perhatikan bahwa file ini banyak dikomentari, jadi kami menghapus komentar untuk menyorot arahan konfigurasi di bawah):

<IfModule mod_evasive24.c>
    DOSHashTableSize    3097
    DOSPageCount        2
    DOSSiteCount        50
    DOSPageInterval     1
    DOSSiteInterval     1
    DOSBlockingPeriod   10
</IfModule>

Penjelasan arahan:

  • DOSHashTableSize: Perintah ini menentukan ukuran tabel hash yang digunakan untuk melacak aktivitas berdasarkan alamat per-IP. Meningkatkan jumlah ini akan mempercepat pencarian situs yang pernah dikunjungi klien sebelumnya, namun dapat berdampak pada kinerja keseluruhan jika disetel terlalu tinggi.
  • DOSPageCount: Jumlah sah permintaan identik ke URI tertentu (misalnya, file apa pun yang dilayani oleh Apache) yang dapat dibuat oleh pengunjung selama interval DOSPageInterval.
  • DOSSiteCount: Mirip dengan DOSPageCount, namun mengacu pada berapa banyak keseluruhan permintaan yang dapat dibuat ke seluruh situs selama interval DOSSiteInterval.
  • DOSBlockingPeriod: Jika pengunjung melebihi batas yang ditetapkan oleh DOSSPageCount atau DOSSiteCount, alamat IP sumbernya akan masuk daftar hitam selama jangka waktu DOSBlockingPeriod. Selama DOSBlockingPeriod, setiap permintaan yang datang dari alamat IP tersebut akan mengalami kesalahan 403 Forbidden.

Jangan ragu untuk bereksperimen dengan nilai-nilai ini sehingga server web Anda mampu menangani jumlah dan jenis lalu lintas yang diperlukan.

Hanya peringatan kecil: jika nilai ini tidak disetel dengan benar, Anda berisiko memblokir pengunjung yang sah.

Anda mungkin juga ingin mempertimbangkan arahan berguna lainnya:

DOSEmailNotify

Jika Anda memiliki server email yang aktif dan berjalan, Anda dapat mengirimkan pesan peringatan melalui Apache. Perhatikan bahwa Anda perlu memberikan izin kepada pengguna Apache SELinux untuk mengirim email jika SELinux diatur untuk menerapkan. Anda dapat melakukannya dengan berlari

setsebool -P httpd_can_sendmail 1

Selanjutnya, tambahkan direktif ini dalam file mod_evasive.conf bersama dengan direktif lainnya:

DOSEmailNotify [email 

Jika nilai ini disetel dan server email Anda berfungsi dengan baik, email akan dikirim ke alamat yang ditentukan setiap kali alamat IP masuk daftar hitam.

DOSSystemCommand

Ini memerlukan perintah sistem yang valid sebagai argumen,

DOSSystemCommand </command>

Arahan ini menentukan perintah yang akan dijalankan setiap kali alamat IP masuk daftar hitam. Ini sering digunakan bersama dengan skrip shell yang menambahkan aturan firewall untuk memblokir koneksi lebih lanjut yang berasal dari alamat IP tersebut.

Tulis skrip shell yang menangani daftar hitam IP di tingkat firewall

Ketika sebuah alamat IP masuk daftar hitam, kita perlu memblokir koneksi berikutnya yang berasal dari alamat tersebut. Kami akan menggunakan skrip shell berikut untuk melakukan pekerjaan ini. Buat direktori bernama scripts-tecmint (atau nama apa pun pilihan Anda) di /usr/local/bin dan file bernama ban_ip.sh di direktori itu.

#!/bin/sh
IP that will be blocked, as detected by mod_evasive
IP=$1
Full path to iptables
IPTABLES="/sbin/iptables"
mod_evasive lock directory
MOD_EVASIVE_LOGDIR=/var/log/mod_evasive
Add the following firewall rule (block all traffic coming from $IP)
$IPTABLES -I INPUT -s $IP -j DROP
Remove lock file for future checks
rm -f "$MOD_EVASIVE_LOGDIR"/dos-"$IP"

Direktif DOSSystemCommand kita seharusnya berbunyi sebagai berikut:

DOSSystemCommand "sudo /usr/local/bin/scripts-tecmint/ban_ip.sh %s"

Pada baris di atas, %s mewakili IP yang melanggar yang terdeteksi oleh mod_evasive.

Tambahkan pengguna Apache ke file sudoers

Perhatikan bahwa semua ini tidak akan berhasil kecuali Anda memberikan izin kepada pengguna apache untuk menjalankan skrip kami (dan skrip itu saja!) tanpa terminal dan kata sandi. Seperti biasa, Anda cukup mengetik visudo sebagai root untuk mengakses file /etc/sudoers lalu menambahkan 2 baris berikut seperti terlihat pada gambar di bawah ini:

apache ALL=NOPASSWD: /usr/local/bin/scripts-tecmint/ban_ip.sh
Defaults:apache !requiretty

PENTING: Sebagai kebijakan keamanan default, Anda hanya dapat menjalankan sudo di terminal. Karena dalam kasus ini, kita perlu menggunakan sudo tanpa tty, kita harus mengomentari baris yang disorot pada gambar berikut:

#Defaults requiretty

Terakhir, restart server web:

systemctl restart httpd

Langkah 4: Mensimulasikan Serangan DDoS di Apache

Ada beberapa alat yang dapat Anda gunakan untuk mensimulasikan serangan eksternal pada server Anda. Anda cukup mencari “alat untuk mensimulasikan serangan ddos” di Google untuk menemukan beberapa di antaranya.

Perhatikan bahwa Anda, dan hanya Anda, yang bertanggung jawab atas hasil simulasi Anda. Jangan pernah berpikir untuk meluncurkan serangan simulasi pada server yang tidak Anda hosting dalam jaringan Anda sendiri.

Jika Anda ingin melakukan hal yang sama dengan VPS yang dihosting oleh orang lain, Anda perlu memperingatkan penyedia hosting Anda atau meminta izin agar banjir lalu lintas melewati jaringan mereka. linux-console.net sama sekali tidak bertanggung jawab atas tindakan Anda!

Selain itu, meluncurkan serangan DoS yang disimulasikan hanya dari satu host tidak mewakili serangan di kehidupan nyata. Untuk mensimulasikannya, Anda perlu menargetkan server Anda dari beberapa klien secara bersamaan.

Lingkungan pengujian kami terdiri dari server CentOS 7 [IP 192.168.0.17] dan host Windows tempat kami akan meluncurkan serangan [IP 192.168.0.103]:

Silakan putar video di bawah ini dan ikuti langkah-langkah yang diuraikan dalam urutan yang ditunjukkan untuk mensimulasikan serangan DoS sederhana:

Kemudian IP yang melanggar diblokir oleh iptables:

Kesimpulan

Dengan mengaktifkan mod_security dan mod_evasive, simulasi serangan menyebabkan CPU dan RAM bereksperimen dengan puncak penggunaan sementara untuk hanya beberapa detik sebelum IP sumber dimasukkan ke daftar hitam dan diblokir oleh firewall. Tanpa alat ini, simulasi pasti akan merobohkan server dengan sangat cepat dan menjadikannya tidak dapat digunakan selama durasi serangan.

Kami ingin sekali mengetahui apakah Anda berencana menggunakan (atau pernah menggunakan) alat ini. Kami selalu menantikan tanggapan Anda, jadi jangan ragu untuk meninggalkan komentar dan pertanyaan Anda, jika ada, menggunakan formulir di bawah ini.

Tautan Referensi

https://www.modsecurity.org/