Thursday 19 May 2022

Fail2ban : Mengamankan Server dari Serangan Brute Force - Ubuntu Server 20.04

fail2ban-thumbnail

Pada tutorial ini kita akan membahas tentang Fail2ban dan cara mengamankan server Ubuntu kita dari serangan Brute Force.

Fail2ban adalah sistem pencegah intrusi atau serangan otomatis yang melindungi server kita dari serangan brute force. Fail2ban akan melakukan monitoring log file (/var/log/auth.log, /var/log/apache/access.log, dll), jika terdapat aktivitas login yang tidak wajar seperti password salah dan dilakukan berkali-kali, maka fail2ban akan secara otomatis memasukan ip host tersebut ke dalam ip table untuk di blokir.

Beberapa cara untuk mengamankan server dari Serangan Brute Force diantaranya adalah :
  1. Menggunakan password yang unik, kalian bisa menggunakan kombinasi S!mb%l dan 4N9K4 atau kombinasi BESAR kecilnya huruf sehingga akan sulit untuk ditebak.
  2. Jika server diakses lebih dari 1 orang, kalian bisa membuat group user dengan membatasi akses apa saja yang bisa dan tidak bisa diakses oleh user yang tergabung ke group tersebut.
  3. Menggunakan SSH key untuk akses remote server, dengan menggunakan ssh key kita bisa mematikan akses root login dan password authentication, jadi proses login sepenuhnya menggunakan ssh key.
  4. Mengganti port default pada service SSH, misalnya port 22 kita ubah menjadi port 2222.
  5. Melakukan buka-tutup port pada aplikasi/service yang jarang digunakan, misalnya kita menggunakan port 21/ftp untuk melakukan transfer file ke dalam server, tapi hal ini dilakukan hanya sebulan sekali. Kita bisa menutup port service ftp ini dan membuka portnya kembali ketika ingin melakukan transfer file kembali.
  6. Menggunakan fitur fail2ban untuk mengamankan service SSH, fail2ban akan mendeteksi ciri-ciri dari pelaku Brute Force ini, jadi ketika pelaku brute force ini terdeteksi, maka server akan secara otomatis memasukan ip host tersebut ke dalam sebuah ip table, untuk kemudian dilakukan action lanjutan seperti melakukan banned pada ip host tersebut.
Manfaat dari penggunaan fail2ban ini tentunya server kita menjadi lebih aman dari serangan brute force, selain itu Fail2ban juga dapat menjaga resource server seperti CPU, RAM, dan Bandwidth server kita agar tidak menanggapi permintaan atau akses yang tidak terverifikasi.
Disini kita akan mengamankan service SSH dari serangan brute force menggunakan fail2ban yang akan melakukan monitoring pada file auth.log, dibawah ini adalah tahapan yang akan kita lakukan untuk melakukan konfigurasi fail2ban :
  1. Instalasi fail2ban
  2. Jenis file konfigurasi fail2ban
  3. Konfigurasi file jail.local untuk rule filter dan action ban host
  4. Uji coba fail2ban

1. Instalasi fail2ban

Kita bisa langsung menginstal fail2ban pada server kita dengan mengetikan perintah :

sudo apt install fail2ban

Kemudian start fail2ban service :

sudo systemctl start fail2ban

sudo systemctl enable fail2ban

Kita cek apakah service fail2ban sudah berjalan pada server atau belum, ketikan perintah :

sudo systemctl status fail2ban

Output :
● fail2ban.service - Fail2Ban Service
     Loaded: loaded (/lib/systemd/system/fail2ban.service; enabled; vendor preset: enabled)
     Active: active (running) since Wed 2022-05-18 06:16:29 UTC; 27s ago
       Docs: man:fail2ban(1)
   Main PID: 1251 (f2b/server)
      Tasks: 5 (limit: 1079)
     Memory: 13.8M
     CGroup: /system.slice/fail2ban.service
             └─1251 /usr/bin/python3 /usr/bin/fail2ban-server -xf start

Sebelum masuk ke tahap konfigurasi, pertama kita lihat terlebih dulu file auth.log yang akan dimonitoring oleh fail2ban untuk mengamankan service ssh, ketikan perintah :

tail -f /var/log/auth.log

Output :
May 18 14:49:19 webserver0 dbus-daemon[773]: [system] Failed to activate service 'org.bluez': timed out (service_start_timeout=25000ms)
May 18 14:49:23 webserver0 polkitd(authority=local): Registered Authentication Agent for unix-session:2 (system bus name :1.79 [/usr/bin/gnome-shell], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 18 14:49:33 webserver0 gdm-launch-environment]: pam_unix(gdm-launch-environment:session): session closed for user gdm
May 18 14:49:33 webserver0 systemd-logind[796]: Session c1 logged out. Waiting for processes to exit.
May 18 14:49:33 webserver0 systemd-logind[796]: Removed session c1.
May 18 14:49:33 webserver0 polkitd(authority=local): Unregistered Authentication Agent for unix-session:c1 (system bus name :1.38, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
May 18 14:49:43 webserver0 sudo: webserver0 : TTY=pts/0 ; PWD=/home/webserver0 ; USER=root ; COMMAND=/usr/bin/su
May 18 14:49:43 webserver0 sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
May 18 14:49:43 webserver0 su: (to root) webserver0 on pts/0
May 18 14:49:43 webserver0 su: pam_unix(su:session): session opened for user root by (uid=0)

Sebagai percobaan, kita akan melakukan login ke dalam server menggunakan SSH, maka akan muncul autentikasi baru pada lognya seperti dibawah ini :

Output :
May 18 14:49:19 webserver0 dbus-daemon[773]: [system] Failed to activate service 'org.bluez': timed out (service_start_timeout=25000ms)
May 18 14:49:23 webserver0 polkitd(authority=local): Registered Authentication Agent for unix-session:2 (system bus name :1.79 [/usr/bin/gnome-shell], object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8)
May 18 14:49:33 webserver0 gdm-launch-environment]: pam_unix(gdm-launch-environment:session): session closed for user gdm
May 18 14:49:33 webserver0 systemd-logind[796]: Session c1 logged out. Waiting for processes to exit.
May 18 14:49:33 webserver0 systemd-logind[796]: Removed session c1.
May 18 14:49:33 webserver0 polkitd(authority=local): Unregistered Authentication Agent for unix-session:c1 (system bus name :1.38, object path /org/freedesktop/PolicyKit1/AuthenticationAgent, locale en_US.UTF-8) (disconnected from bus)
May 18 14:49:43 webserver0 sudo: webserver0 : TTY=pts/0 ; PWD=/home/webserver0 ; USER=root ; COMMAND=/usr/bin/su
May 18 14:49:43 webserver0 sudo: pam_unix(sudo:session): session opened for user root by (uid=0)
May 18 14:49:43 webserver0 su: (to root) webserver0 on pts/0
May 18 14:49:43 webserver0 su: pam_unix(su:session): session opened for user root by (uid=0)
May 18 14:51:22 webserver0 sshd[2264]: Accepted publickey for webserver0 from 192.168.43.16 port 60794 ssh2: RSA SHA256:6W8zrTWxMvyZXS0bzVgwpOSkc6n2SCh1sTbBBPmkjSA
May 18 14:51:22 webserver0 sshd[2264]: pam_unix(sshd:session): session opened for user webserver0 by (uid=0)
May 18 14:51:22 webserver0 systemd-logind[796]: New session 4 of user webserver0.
Fail2ban akan memonitor file auth.log ini untuk mendeteksi ciri-ciri dari pelaku brute force seperti "failed attempt login" yang bisa kita setting parameternya. Misal untuk percobaan gagal login, kita setting sebanyak 3x, jadi ketika sebuah host yang mencoba login lewat ssh dan mengalami gagal login sebanyak 3x dalam interval waktu yang singkat, sistem akan secara otomatis memasukan ip host tersebut ke dalam ip table dan dilanjutkan dengan action yaitu dilakukan banned ip pada host tersebut.

2. Jenis File Konfigurasi fail2ban

Fail2ban sendiri memiliki 4 jenis file konfigurasi, kita bisa mengakses file tersebut pada direktori fail2ban dengan mengetikan perintah :

cd /etc/fail2ban
  1. fail2ban.conf, file konfigurasi untuk service fail2ban.
  2. filter.d/*.conf, konfigurasi netfilter untuk menentukan parameter serangan brute force.
  3. action.d/*.conf, konfigurasi aksi untuk melakukan ban dan unban ip host.
  4. jail.conf, kombinasi antara filter dengan aksi.
Kita tidak akan melakukan ubahan pada file default konfigurasinya, disini kita akan membuat file konfigurasi baru yaitu jail.local dengan rule yang sederhana.

3. Konfigurasi File jail.local untuk Rule Filter dan Action Ban IP Host

Kita buat file konfigurasi baru dengan mengetikan perintah :

sudo nano jail.local

Lalu masukan script dibawah ini ke dalam terminal kalian :

[sshd]

enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 7200

Setelah itu kalian bisa save pengaturan konfigurasi yang sudah di setting, tekan CTRL+X untuk melakukan penyimpanan konfigurasi, lalu konfirmasi dengan mengetik Y, lalu terakhir tekan Enter untuk kembali ke terminal utama server.
Cara kerja dari script diatas, sistem akan memonitor file log aktivitas service ssh yaitu auth.log, ketika terdapat sebuah host yang melakukan "fail attempt login" sebanyak 3x, maka ip host tersebut akan dibanned selama 2 jam atau 7200detik (karena parameter untuk bantime ini hanya bisa disetting dalam format detik).
Selanjutnya kita restart service fail2ban dengan mengetikan perintah :

sudo systemctl restart fail2ban.service

Kemudian kita bisa melihat status report dari service fail2ban dengan mengetikan perintah :

sudo fail2ban-client status sshd

Output :
Status for the jail: sshd
|- Filter
|  |- Currently failed:        0
|  |- Total failed:               0
|   `- File list:                    /var/log/auth.log
`- Actions
    |- Currently banned:     0
    |- Total banned:            0
     `- Banned IP list:

Kita bisa melihat informasi seperti file .log yang di monitor, jumlah total percobaan login failed, jumlah host yang dibanned dan list ip yang dibanned oleh sistem.

4. Uji Coba

Disini kita akan mencoba untuk login ke dalam server lewat SSH dengan password yang salah sebanyak 3x. Ketika sistem mendeteksi adanya upaya login dari sebuah host dan mengalami gagal sebanyak 3x, maka secara otomatis sistem akan langsung melakukan banned pada ip host tersebut. Kita bisa melihatnya pada status report fail2ban-client kita.

Output :
Status for the jail: sshd
|- Filter
|  |- Currently failed:       0
|  |- Total failed:              3
|   `- File list:                   /var/log/auth.log
`- Actions
    |- Currently banned:   1
    |- Total banned:          1
     `- Banned IP list:       192.168.43.16

Kita bisa melakukan unbanip dengan mengetikan perintah :

sudo fail2ban-client set sshd unbanip 192.168.43.16

Kesimpulan :

Selain menerapkan keamanan dasar pada server, kita bisa menambahkan keamanan lanjutan seperti menggunakan aplikasi fail2ban untuk menangkal serangan brute force, tentunya agar server kita bisa lebih aman dan memperkecil resiko server kita terkena serangan dari pihak-pihak yang tidak bertanggung jawab.
Baca juga :
UFW (Uncomplicated Firewall) : Keamanan Dasar Pada Ubuntu Server 20.04

Kita tidak bisa menghentikan pihak-pihak yang tidak bertanggung jawab ini untuk berhenti melakukan penyerangan, yang bisa kita lakukan hanyalah "memperlambat" upaya mereka dalam melakukan brute force. Server kita aman selama konfigurasi service SSH kita sudah menggunakan SSH Key, seperti mematikan akses login root dan password auth, hanya menggunakan SSH Key untuk login menggunakan SSH. 

Seperti itu tadi pembahasan kita tentang fail2ban yang merupakan keamanan lanjutan pada Ubuntu Server 20.04. Sekian untuk tutorial kali ini, semoga ilmu yang kalian dapat dari tutorial ini bisa bermanfaat untuk kalian semua. Terima kasih.

Previous Post
Next Post

Penulis blog dan atlet balap karung Indonesia, lahir di Jakarta 6 Juni. Sedang membentuk pasangan wanita yang manis, berpenampilan dinamis, tidak berkumis, tapi mirip artis.

0 comments: