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 SSHsudo 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 Fail2Bansudo systemctl restart fail2ban
sudo systemctl enable fail2ban
Cek Status Jailsudo 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 Fail2Bansudo 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.