Instalasi dan Konfigurasi Fail2Ban pada CentOS 7.8 untuk mengamankan SSH

Ketika kita memiliki sebuah VPS yang memiliki IP publik serta menggunakan SSH service pada port standar yaitu port 22, setiap harinya pasti kita akan melihat banyak sekali attempt login yang dilakukan secara bruteforce oleh berbagai macam penyerang dengan harapan dapat mengambil alih VPS yang kita miliki. Pertanyaan yang muncul, bagaimana kita dapat menangkalnya? Ternyata cukup mudah, kita hanya perlu menggunakan Fail2Ban. Apa itu fail2ban? Fail2ban adalah sebuah software yang berfungsi untuk mencatat dan melakukan blocking terhadap percobaan masuk SSH yang dilakukan secara brutal terhadap ssh service.

Blocking yang dilakukan fail2ban, dapat memberhentikan sementara serangan yang masuk ke dalam server ssh. Hampir semua distribusi linux memiliki paket ini, tidak terkecuali CentOS. Kita dapat melakukan instalasi pada CentOS 7.8 hanya dengan menggunakan yum package manager, tetapi bukan bagian dari CentOS base repo. Fail2Ban merupakan paket yang disediakan oleh EPEL dan tidak tersedia di repo centos standar, untuk itu jika instalasi CentOS anda belum memiliki repo EPEL maka lakukan juga instalasi EPEL repo nya. Untuk melakukan instalasi dapat kita gunakan yum package manager juga seperti berikut.

[ben@centos ~]# sudo yum install epel-release
[ben@centos ~]# sudo yum install fail2ban

Ketika instalasi selesai dilakukan, kita dapat menjalankan yum info untuk melihat versi berapa yang terinstall, dan dapat kita lihat, versi yang tersedia untuk CentOS 7.8 adalah 0.10.5. Pada distribusi linux lain nya, seperti apt, maka silahkan gunakan apt untuk mencari informasinya. Setelah kita mengetahui versi fail2ban, kita dapat melakukan instalasi. Perlu diingat, CentOS adalah sebuah OS yang berpegang pada standar ke stabilan adalah yang utama, untuk hal ini bisa di baca pada post ini.

[ben@centos ~]# yum info fail2ban
Installed Packages
Name        : fail2ban
Arch        : noarch
Version     : 0.10.5
Release     : 2.el7
Size        : 0.0
Repo        : installed
From repo   : epel
Summary     : Daemon to ban hosts that cause multiple authentication errors
URL         : http://fail2ban.sourceforge.net/
License     : GPLv2+
Description : Fail2Ban scans log files and bans IP addresses that makes too many password
            : failures. It updates firewall rules to reject the IP address. These rules can
            : be defined by the user. Fail2Ban can read multiple log files such as sshd or
            : Apache web server ones.
            :
            : Fail2Ban is able to reduce the rate of incorrect authentications attempts
            : however it cannot eliminate the risk that weak authentication presents.
            : Configure services to use only two factor or public/private authentication
            : mechanisms if you really want to protect services.
            :
            : This is a meta-package that will install the default configuration.  Other
            : sub-packages are available to install support for other actions and
            : configurations.

[ben@centos ~]#

Jika menjalankan yum info terlebih dahulu tanpa epel release di instal terlebih dahulu, maka fail2ban tidak akan ditemukan, karena fail2ban disediakan oleh epel-release. Penasaran dengan EPEL? Bisa dilihat pada link ini. Setelah terinstall check kembali apakah service fail2ban telah menyala, biasanya status service nya terdisable, sehingga perlu kita enable dan lakukan start pada servicenya. Fungsi enable ini juga agar jika VPS terestart, akan autostart ketika boot. Untuk melakukan enabling dan start dapat menjalankan command berikut.

[ben@centos ~]# sudo systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; disabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:fail2ban(1)
[ben@centos ~]# sudo systemctl enable fail2ban
[ben@centos ~]# sudo systemctl start fail2ban
[ben@centos ~]# systemctl status fail2ban
● fail2ban.service - Fail2Ban Service
   Loaded: loaded (/usr/lib/systemd/system/fail2ban.service; enabled; vendor preset: disabled)
   Active: active (running) since Tue 2020-06-02 03:57:58 WIB; 5h 11min ago
     Docs: man:fail2ban(1)
  Process: 812 ExecStartPre=/bin/mkdir -p /run/fail2ban (code=exited, status=0/SUCCESS)
 Main PID: 820 (f2b/server)
   CGroup: /system.slice/fail2ban.service
           └─820 /usr/bin/python -s /usr/bin/fail2ban-server -xf start

Jun 02 03:57:58 centos systemd[1]: Starting Fail2Ban Service...
Jun 02 03:57:58 centos systemd[1]: Started Fail2Ban Service.
Jun 02 03:58:00 centos fail2ban-server[820]: Server ready

Jika sudah berhasil start, kita masih harus melakukan konfigurasi file config(file konfigurasi, susahnya apa sih mbulet ae le-le) agar fail2ban dapat melakukan blocking pada service tertentu. Lokasi config untuk fail2ban pada CentOS 7.8 terpadat pada folder /etc/fail2ban/. Pada folder tersebut berbagai konfigurasi yang dapat tinggal diaktifkan. Struktur folder fail2ban seharusnya sebagai berikut :

/etc/fail2ban/
├── action.d
├── fail2ban.conf
├── fail2ban.local
├── filter.d
├── jail.conf
└── jail.local

Yang perlu diperhatikan, untuk fail2ban dari EPEL, memiliki banyak sekali filter conf, dibandingkan dari debian ataupun ubuntu(they both are same anyway, ubuntu is debian based). Secara default, filter default yang disedikan oleh fail2ban dapat dilihat pada link berikut. Pada package fail2ban dari EPEL, banyak sekali filter yang disediakan mulai dari SSH, email, web, hingga yang lain nya. File yang akan kita ubah adalah /etc/fail2ban/jail.local. Didalam dokumentasi menyebutkan semua file yang berakhiran .local akan mengnimpa/overwrite file .conf. Jika file .conf cukup, kita tidak perlu melakukan update .local, lihat di link ini.

fail2ban filter on CentOS 7.8
Bisa dilihat sendiri, cukup banyak filter yang disediakan. Ini di VPS saya dan mengakses dengan Windows Terminal

Untuk kasus pada centos 7.8, sshd config tidak di enable, sehingga kita perlu melakukan enable agar semua attempt/percobaan masuk akan di filter dan jika melewat threshold nya, IP nya akan di ban. Dalam hal ini kita akan melakukan overwrite firewalld conf pada jail.d dan juga memperpanjang bantime pada sebuah host, dan terakhir mengaktifkan sshd filter agar attempt di filter oleh fail2ban. Berikut adalah isi file jail.local. Akses edit bisa menggunakan nano ataupun vim. Saya anggap semua orang paham akan hal ini (nano /etc/fail2ban/jail.local atau ganti nano dengan vim)

[DEFAULT]
# Ban hosts for two hours
# see default di http://www.fail2ban.org/wiki/index.php/MANUAL_0_8#Jail_Options
bantime = 7200

# Override /etc/fail2ban/jail.d/00-firewalld.conf:
banaction = iptables-multiport

#Aktifkan SSHD Filter, SSH Daemon. pada debian openssh-server. haha. 
[sshd]
enabled = true

Sesuai keterangan yang ada pada dokumentasi, default host di block adalah sekitar 10 menit, untuk kasus VPS ini, saya sarankan hingga 2 jam, sehingga percobaan yang dilakukan terus menerus (bruteforce) dapat ditahan dan tidak menggangu/mengkotori log kita (saya ga suka kalau log yang saya miliki kotor, jadi ya di ban lama aja, biar mereka ga ganggu VPS kita juga). Selain itu kita perlu melakukan override banaction, karena di centos, kita menggunakan iptables, maka isikan iptables-multiport, jika VPS kalian menggunakan firewall lain(bukan firewald ya, itu wrapper untuk iptables), maka isikan sesuai dengan engine nya, dan terakhir jangan lupa shhd enabled. sehingga ke enable. Jangan lupa di restart service setelah file konfigurasi diubah. Kalau berhasil, biasa akan langsung ada beberapa IP yang muncul kena block (biasanya attacker bruteforce gitu, macam script kiddies, ahaha). Command nya bisa dilihat di bawah.

[ben@centos fail2ban]# sudo systemctl restart fail2ban
[ben@centos fail2ban]# sudo fail2ban-client status sshd
Status for the jail: sshd
|- Filter
|  |- Currently failed: 16
|  |- Total failed:     45
|  `- Journal matches:  _SYSTEMD_UNIT=sshd.service + _COMM=sshd
`- Actions
   |- Currently banned: 15
   |- Total banned:     15
   `- Banned IP list:   54.38.177.98 222.186.42.137 222.186.190.17 222.186.190.14 222.186.180.130 222.186.52.39 93.149.26.94 222.186.30.218 222.186.42.7 222.186.30.57 222.186.42.155 222.186.175.23 182.61.39.49 222.186.30.112 222.186.180.142
[ben@centos fail2ban]#

Sekian dari saya, semoga menambah ilmu. IP diatas IP riil, boleh di drop in 1-1 kalau ga senang via firewal (saya juga ga senang karena sukanya ini IP semua pada bruteforce ga jelas). IP tersebut akan hilang dari list setelah 2 jam tidak melakukan bruteforce lagi. Jika suka tolong di like, jika berguna bisa di share. Terima Kasih.

Leave a Reply. I will come back and maybe we can have some conversation :)

This site uses Akismet to reduce spam. Learn how your comment data is processed.