Lewatkan ke konten utama

Pengamanan Server Menggunakan Fail2Ban

Fail2Ban disini ditujukan untuk memblokir IP client yang melakukan aktivitas berbahaya pada aplikasi/website pada server.

Installasi:
sudo apt install fail2ban

Konfigurasi Dasar untuk SSH
sudo nano /etc/fail2ban/jail.local

isi:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
bantime = 1h
findtime = 10m

[apache-auth]
enabled = true
port = http,https
logpath = /var/log/apache*/*error.log
maxretry = 5

Restart Fail2Ban
sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Cek Status Jail
sudo fail2ban-client status

Metode pengamanan paling baik dengan Fail2Ban adalah dengan menyesuaikan perilaku atau aktivitas client dalam mengakses aplikasi/website pada server. Cara mudahnya adalah melihat error yang dihasil pada tail -f /var/log/apache2/error.log.

Dari error.log tersebut dihasilkan informasi aktivitas client yang melakukan upaya berbahaya yang menghasilkan error pada server apache.

Sebagai contoh saya mau memblokir IP client dengan aktivitas error berikut:
\[Fri May 16 19:32:01.013545 2025] \[proxy\_fcgi\:error] \[pid 1496923] \[client 159.65.1.31:55208] AH01071: Got error 'PHP message: PHP Warning: Constant WP\_MEMORY\_LIMIT already defined in /var/www/html/dpmdsos/public\_html/wp-config.php on line 98' \[Fri May 16 19:32:01.330516 2025] \[proxy\_fcgi\:error] \[pid 1496903] \[client 159.65.1.31:55174] AH01071: Got error 'PHP message: PHP Warning: The magic method Vc\_Manager::\_\_wakeup() must have public visibility in /var/www/html/dpupkp/public\_html/wp-content/plugins/js\_composer/include/classes/core/class-vc-manager.php on line 203' \[Fri May 16 19:32:01.505303 2025] \[proxy\_fcgi\:error] \[pid 1496930] \[client 159.65.1.31:55479] AH01071: Got error 'PHP message: PHP Warning: Constant WP\_MEMORY\_LIMIT already defined in /var/www/html/dpmdsos/public\_html/wp-config.php on line 98' \[Fri May 16 19:32:01.726184 2025] \[proxy\_fcgi\:error] \[pid 1497083] \[client 159.65.1.31:55322] AH01071: Got error 'PHP message: PHP Warning: The magic method Vc\_Manager::\_\_wakeup() must have public visibility in /var/www/html/disperpusip/public\_html/wp-content/plugins/js\_composer/include/classes/core/class-vc-manager.php on line 203' \[Fri May 16 19:32:01.773397 2025] \[autoindex\:error] \[pid 1487621] \[client 209.38.120.221:57305] AH01276: Cannot serve directory /var/www/html/inspektorat/public\_html/.well-known/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive \[Fri May 16 19:32:01.836303 2025] \[autoindex\:error] \[pid 1487621] \[client 209.38.120.221:57305] AH01276: Cannot serve directory /var/www/html/inspektorat/public\_html/.well-known/pki-validation/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive \[Fri May 16 19:32:01.907570 2025] \[autoindex\:error] \[pid 1487621] \[client 209.38.120.221:57305] AH01276: Cannot serve directory /var/www/html/inspektorat/public\_html/.well-known/acme-challenge/: No matching DirectoryIndex (index.html,index.cgi,index.pl,index.php,index.xhtml,index.htm) found, and server-generated directory index forbidden by Options directive

maka saya membuat file filter baru di nano /etc/fail2ban/filter.d/apache-php-errors.conf

isi:
[Definition]

failregex = ^\[[^\]]*\] \[[^\]]*\] \[pid [0-9]*\] \[client <HOST>:[0-9]*\] AH01071: Got error 'PHP message: PHP Warning:.*$
            ^\[[^\]]*\] \[autoindex:error\] \[pid [0-9]*\] \[client <HOST>:[0-9]*\] AH01276: Cannot serve directory.*$
ignoreregex =

Note: gunakan Chatgpt atau Deepseek untuk membuat  koding filter

Kemudian tambahkan jail baru di /etc/fail2ban/jail.local

Isi:
[apache-php-errors]
enabled  = true
port     = http,https
filter   = apache-php-errors
logpath  = /var/log/apache2/error.log
maxretry = 5
findtime = 10m
bantime  = 1h

Restart Fail2Ban
sudo systemctl restart fail2ban

Kemudian cek untuk melihat IP client sudah diblokir
sudo fail2ban-client status apache-php-errors

Silahkan tambahkan lagi filter lainnya sesuai dengan error.log yang diperoleh.

Apabila suatu waktu anda pun tidak dapat mengakses aplikasi/website pada server anda. Maka ada kemungkinan anda pun juga sudah diblokir oleh filter Fail2Ban yang anda buat sendiri. Maka kerjakan Tips berikut jika terjadi.

sudo fail2ban-client status <nama_jail>
# Contoh:
sudo fail2ban-client status apache-php-errors

Jika dipastikan memang IP anda yang diblokir maka lakukan seperti contoh berikut:
sudo fail2ban-client set apache-wp-warnings unbanip 36.75.65.41

dan cara paling aman adalah dengan membuat Whitelist IP Anda di nano /etc/fail2ban/jail.local
Isi:
[DEFAULT]
ignoreip = 127.0.0.1/8 ::1 36.75.65.41

atau kurangi agresivitas jail:

[apache-php-errors]
enabled  = true
port     = http,https
filter   = apache-php-errors
logpath  = /var/log/apache2/error.log
maxretry = 10              #ubah dari 5 jadi 10
findtime = 30m            #ubah dari 10 jadi 30
bantime  = 1h              #ubah dari 24h jadi 1h

Lakukan Monitori lol Fail2Ban:

sudo tail -f /var/log/fail2ban.log