Fail2ban adalah aplikasi log-parsing yang memonitor system log terhadap adanya gejala serangan otomatis pada server anda.

Ketika fail2ban mendeteksi adanya percobaan login yang tidak wajar, sesuai dengan parameter yang ditentukan, Fail2ban akan menambahkan aturan baru ke iptables untuk memblokir alamat IP penyerang, blokir bisa sementara bisa juga permanen.

Fail2ban juga dapat memperingatkan Anda melalui email bahwa sedang terjadi serangan terhadap server Anda.

Menggunakan Fail2ban untuk mengamankan server Anda

Fail2ban utamanya berfokus pada serangan SSH, meskipun dapat dikonfigurasi untuk bekerja pada layanan apa pun yang menggunakan file log.

Catatan

Langkah-langkah dalam panduan ini hanya dapat dijalankan dengan hak akses root.

Jika Anda adalah user dengan akses root, maka jalankan setiap perintah dengan diawali perintah sudo.

Peringatan

Fail2ban dimaksudkan untuk digunakan bersama dengan server yang sudah diatur system keamanannya secara maksimal dan tidak boleh digunakan sebagai pengganti aturan firewall yang aman.

Instal Fail2ban

Sebelum menginstal fail2ban, server sudah harus dikonfigurasi secara dasar.

CentOS 7
  1. Pastikan OS dan system terupdate dan instal repositori EPEL, ketik perintah berikut ini :
yum update && yum install epel-release
  1. Instal Fail2Ban:
yum install fail2ban
  1. Instal Sendmail jika Anda juga membutuhkan dukungan email. Sendmail tidak wajib untuk menggunakan Fail2Ban .:
yum install sendmail
  1. Mulai dan aktifkan Fail2ban dan, Sendmail jika diperlukan:

systemctl start fail2bansystemctl enable fail2bansystemctl start sendmailsystemctl enable sendmail

Catatan

Jika Anda menemukan kesalahan (error) bahwa “tidak ada direktori /var/run/fail2ban berisi file socket /var/run/fail2ban/fail2ban.sock, buat direktori secara manual:

mkdir /var/run/fail2ban
Debian
  1. Pastikan OS & system Anda terupdate, ketik perintah berikut ini :
apt-get update && apt-get upgrade -y
  1. Instal Fail2ban:
apt-get install fail2ban

Layanan fail2ban akan otomatis dimulai.

  1. (Opsional) Jika Anda ingin dukungan email, instal Sendmail:
apt-get install sendmail-bin sendmail
Catatan

Versi Sendmail saat ini di Debian Jessie memiliki bug yang menyebabkan kesalahan saat menginstal sendmail-bin. Instalasi akan menggantung selama 1 menit, tetapi kemudian selesai.

Creating /etc/mail/sendmail.cf…
ERROR: FEATURE() should be before MAILER() MAILER(‘local’) must appear after FEATURE(‘always_add_domain’)
ERROR: FEATURE() should be before MAILER() MAILER(‘local’) must appear after FEATURE(‘allmasquerade’)
Fedora
  1. Perbarui sistem Anda, ketik perintah berikut ini :
dnf update
  1. Instal Fail2ban:
dnf install fail2ban
  1. (Opsional) Jika Anda ingin dukungan email, instal Sendmail:
dnf install sendmail
  1. Mulai dan aktifkan Fail2ban dan, Sendmail jika diperlukan:
systemctl start fail2ban
systemctl enable fail2ban
systemctl start sendmail
systemctl enable sendmail
Ubuntu
  1. Pastikan sistem Anda terbaru, ketik perintah berikut ini:
apt-get update && apt-get upgrade
  1. Instal Fail2ban :
apt-get install fail2ban

Layanan fail2ban akan otomatis dimulai.

  1. (Opsional) Jika Anda ingin dukungan email, instal Sendmail:
apt-get install sendmail
  1. Izinkan akses SSH melalui UFW dan kemudian aktifkan firewall:
ufw allow sshufw enable

Konfigurasikan Fail2ban

Fail2ban membaca file konfigurasi .conf terlebih dahulu, lalu file *.local akan menimpa pengaturan dari fail2ban.

Karena itu, semua perubahan pada konfigurasi umumnya dilakukan dalam file *.local, jadi tidak perlu mengutak-atik file *.conf.

Konfigurasikan fail2ban.local

  1. conf berisi profil konfigurasi default. Pengaturan default akan memberi Anda pengaturan kerja standart. Jika Anda ingin merubah pengaturan, cara terbaik adalah melakukannya di file terpisah, fail2ban.local, yang menimpa fail2ban.conf. Ketik perintah berikut ini untuk meng-copy file2ban.conf, sekaligus mengubah namanya menjadi fail2ban.local.
cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
  1. Kemudian, Anda dapat mengedit fail2ban.local sesuai dengan konfigurasi yang Anda inginkan. Nilai yang dapat diubah adalah:
    • loglevel: Tingkat detail yang disediakan oleh log Fail2ban dapat diatur ke 1 (kesalahan/error), 2 (memperingatkan/warn), 3 (info), atau 4 (debug).
    • logtarget: Log (catat) tindakan ke file tertentu. Nilai default dari /var/log/fail2ban.log akan mencatat semua login yang terjadi ke file yang ditentukan. Sebagai alternatif, Anda dapat mengubah nilainya menjadi:
      • STDOUT: output setiap data apa saja
      • STDERR: output setiap kesalahan
      • SYSLOG: logging berbasis pesan
      • FILE: output ke file
    • socket: Lokasi file socket.
    • pidfile: Lokasi file PID.

Konfigurasikan jail.local Settings

  1. Untuk Debian & Ubuntu, file jail.conf akan mengaktifkan Fail2ban untuk SSH secara default, tetapi tidak untuk CentOS. Semua protokol dan konfigurasi lain (HTTP, FTP, dll.) tidak akan aktif. Jika Anda ingin mengubahnya, buat sebuah file jail.local untuk mengedit:
cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
  1. Jika menggunakan CentOS atau Fedora Anda harus mengubah opsi backend di jail.local dari auto ke systemd. Ini tidak diperlukan pada Debian 8 atau Ubuntu 16.04, meskipun keduanya menggunakan systemd juga.
“backend” specifies the backend used to get files modification.
Available options are “pyinotify”, “gamin”, “polling”, “systemd” and “auto”.5.
This option can be overridden in each jail as well.
.
.
.
backend = systemd

Tidak ada jails yang diaktifkan secara default di CentOS 7. Misalnya, untuk mengaktifkan SSH daemon jail, hapus tanda # (uncomment) pada baris berikut di file jail.local:

[sshd]
enabled = true

Whitelist IP

Untuk mengabaikan IP tertentu, tambahkan IP tersebut ke perintah ignoreip. Secara default, perintah ini tidak akan mencekal localhost.

[DEFAULT]
“ignoreip” can be an IP address, a CIDR mask or a DNS host. Fail2ban will not
ban a host which matches an address in this list. Several addresses can be
defined using space separator.ignoreip = 127.0.0.1/8 123.45.67.89

Jika Anda ingin memasukkan whitelist IP hanya untuk jail tertentu, ini dapat dilakukan dengan perintah fail2ban-client. Ganti JAIL dengan nama jail Anda, dan 123.45.67.89 dengan IP yang ingin Anda whitelist.

fail2ban-client set JAIL addignoreip 123.45.67.89

Ban Time dan Retry Ammount

Atur bantime, findtime, dan maxretry untuk menentukan kondisi dan lamanya waktu ban:

“bantime” is the number of seconds that a host is banned.bantime  = 600
A host is banned if it has generated “maxretry” during the last “findtime”
seconds.findtime = 600maxretry = 3
  • bantime: Lamanya waktu dalam detik di mana sebuah IP dilarang. Jika diatur ke angka negatif, larangan akan permanen. Nilai default 600 diatur untuk mencekal IP untuk durasi 10 menit.
  • findtime: Lamanya waktu antara upaya login sebelum pelarangan ditetapkan. Misalnya, jika Fail2ban diatur untuk mencekal IP setelah lima (5) kali upaya login gagal, 5 kali upaya tersebut harus terjadi dalam batas waktu pencarian 10 menit yang ditetapkan. Nilai findtime harus berupa jumlah detik yang ditetapkan.
  • maxretry: Berapa banyak upaya yang dapat dilakukan untuk mengakses server dari satu IP sebelum larangan diberlakukan. Standarnya diatur ke 3.

Email Alerts

Untuk menerima email saat fail2ban mendeteksi adanya serangan, sesuaikan pengaturan email:

  • destemail: Alamat email tempat Anda ingin menerima email.
  • sendername: Nama di mana email itu muncul.
  • pengirim: Alamat email dari mana Fail2ban akan mengirim email.
Catatan

Jika tidak yakin apa yang harus dimasukkan pada sender, jalankan perintah sendmail -t user@email.com, ganti user@email.com dengan alamat email Anda.

Periksa email Anda (termasuk folder spam, jika perlu) dan tinjau email pengirim. Alamat ini dapat digunakan untuk konfigurasi di atas.

Anda juga perlu menyesuaikan pengaturan tindakan, yang menentukan tindakan apa yang terjadi ketika ambang batas larangan dipenuhi.

Default,% (action_) s, hanya mencekal pengguna. % (action_mw) akan mencekal dan mengirim email dengan laporan WhoIs; sementara% (action_mwl) s akan mencekal dan mengirim email dengan laporan WhoIs dan semua baris yang relevan dalam file log. Ini juga dapat diubah berdasarkan jail-spesifik.

Konfigurasi Jail Lainnya

Selain pengaturan dasar di atas, jail.local juga berisi berbagai konfigurasi jail untuk sejumlah layanan umum, termasuk SSH, dan iptables.

Secara default, hanya SSH yang diaktifkan dan tindakannya adalah untuk melarang alamat host / IP yang menyinggung dengan memodifikasi aturan firewall iptables.

Konfigurasi jailrata-rata akan menyerupai perintah berikut ini:

Default banning action (e.g. iptables, iptables-new,
iptables-multiport, shorewall, etc) It is used to define
action_* variables. Can be overridden globally or per
section within jail.local file
banaction = iptables-multiport
banaction_allports = iptables-allports
[ssh]
enabled  = true
port     = ssh
filter   = sshd
logpath  = /var/log/auth.log
maxretry = 6
  • banaction: Menentukan tindakan yang akan digunakan ketika ambang batas tercapai. Jika Anda telah mengkonfigurasi firewall untuk menggunakan firewalld set nilai ke firewallcmd-ipset dan jika Anda telah mengkonfigurasi firewall untuk menggunakan UFW atur nilainya ke ufw.
  • banaction_allports: Memblokir IP pada setiap port. Jika Anda telah mengkonfigurasi firewall untuk menggunakan firewalld atur nilainya ke firewallcmd-ipset.
  • enabled: Menentukan apakah filter dihidupkan atau tidak.
  • port: Port Fail2ban harus menjadi referensi sesuai dengan layanan. Jika menggunakan port default, maka nama layanan dapat ditempatkan di sini. Jika menggunakan port non-tradisional, harus menggunakan nomor port. Misalnya, jika Anda memindahkan port SSH ke 3456, Anda harus mengganti ssh dengan 3456.
  • filter: Nama file yang terletak di /etc/fail2ban/filter.d yang berisi informasi failregex yang digunakan untuk mem-parsing file log dengan tepat. Akhiran .conf tidak perlu disertakan.
  • logpath: Memberikan lokasi layanan log.
  • maxretry: Akan menggantikan global maxretry untuk layanan yang ditentukan. findtime dan bantime juga dapat ditambahkan.
  • action: Ini dapat ditambahkan sebagai pengaturan tambahan, jika aksi default tidak cocok untuk jail. Tindakan tambahan dapat ditemukan di folder action.d.
Catatan

Jail juga dapat dikonfigurasi sebagai file .conf individual yang ditempatkan di direktori jail.d. Formatnya akan tetap sama.

Failregexs

Meskipun Fail2ban dilengkapi dengan sejumlah filter, Anda mungkin ingin membuat filter sesuai dengan kebutuhan.

Fail2ban menggunakan ekspresi reguler (regex) untuk mem-parsing file log, mencari contoh upaya pembobolan dan kegagalan kata sandi.

Fail2ban menggunakan ekstensi regex Python.

Cara terbaik untuk memahami cara kerja failregex adalah dengan menulisnya.

Meskipun tidak disarankan mengatur fail2ban untuk memantau akses WordPress Anda karena akan mengakibatkan lonjakan trafik dan bsai menurunkan kinerja CPU.

Berikut contoh file log yang mudah dipahami dan dapat Anda gunakan untuk mempelajari tentang pembuatan failregex apa pun.

Tulis Regex untuk Fail2ban

  1. Buka file access.log web Anda (biasanya terletak di /var/www/example.com/logs/access.log) dan temukan upaya login yang gagal. Isinya akan seperti ini :
123.45.67.89 -- -- [01/Oct/2015:12:46:34 -0400] “POST /wp-login.php HTTP/1.1” 200 1906 “http://example.com/wp-login.php” “Mozilla/5.0 (Macintosh; Intel Mac OS X 10.10; rv:40.0) Gecko/20100101 Firefox/40.0”

Perhatikan bahwa Anda hanya perlu melacak hingga 200:

123.45.67.89 -- -- [01/Oct/2015:12:46:34 -0400] “POST /wp-login.php HTTP/1.1” 200[/html]
Alamat IP dari mana upaya gagal berasal, akan selalu didefinisikan sebagai <HOST>. Beberapa karakter berikutnya tidak berubah dan dapat dimasukkan sebagai literal:
[simterm] -- -- \[

Tanda \ sebelum [,menunjukkan bahwa tanda kurung siku harus dibaca secara literal.

  1. Bagian berikutnya, tanggal upaya login, dapat ditulis sebagai ekspresi yang dikelompokkan menggunakan ekspresi regex. Bagian pertama, 01 dalam contoh ini, dapat ditulis sebagai (\ d {2}): Tanda kurung mengelompokkan ekspresi, sementara \ d mencari setiap angka numerik. {2} mencatat bahwa ekspresi mencari dua digit berturut-turut, mis., Hari dalam sebulan.

Sejauh ini, Anda harus memiliki:

-- -- \[(\d{2})

Garis miring berikutnya akan disebut dengan garis miring literal, diikuti oleh \ w {3} yang mencari serangkaian 3 karakter alfanumerik (mis., A-Z, 0-9, tergantung kasus). Garis miring berikut juga harus literal:

-- -- \[(\d{2})/\w{3}/

Bagian untuk tahun, ini harus ditulis sama dengan hari, tetapi tanpa perlu kelompok, dan untuk empat karakter berturut-turut (dan tanda titik dua):

-- -- \[(\d{2})/\w{3}/\d{4}:
  1. Urutan berikutnya adalah rangkaian angka 2 digit yang membentuk waktu. Karena kita menetapkan hari dalam satu bulan sebagai angka 2 digit dalam grup (tanda kurung), kita dapat membuat referensi ulang menggunakan \ 1 (karena ini adalah grup pertama). Sekali lagi, titik dua akan menjadi literal:
-- -- \[(\d{2})/\w{3}/\d{4}:\1:\1:\1

Jika Anda tidak ingin menggunakan tanda “\” kode ini juga dapat ditulis sebagai:

-- -- \[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2}
  1. Segmen -0400 harus ditulis sama dengan tahun, dengan tambahan literal -: – \ d {4}. Akhirnya, Anda bisa menutup braket persegi (]) (tutup dengan “\” terlebih dahulu), dan selesaikan sisanya dengan string literal:
-- -- \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] “POST /wp-login.php HTTP/1.1” 200

Atau:

-- -- \[\d{2}/\w{3}/\d{4}:\d{2}:\d{2}:\d{2} -\d{4}\] “POST /wp-login.php HTTP/1.1” 200

Menerapkan Failregex

Setelah kode failregex dibuat, maka Anda harus menambahkannya ke filter.

  1. Buka direktori filter.d di Fail2ban:
cd /etc/fail2ban/filter.d
  1. Buat file bernama wordpress.conf, dan tambahkan failregex Anda:
nano wordpress.conf
Fail2Ban filter untuk WordPress
 
[Definition]
 
failregex =  -- -- \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] “POST /wp-login.php HTTP/1.1” 200
ignoreregex =

Simpan dan keluar.

  1. Tambahkan sesi wordpress ini ke jail.local:
[wordpress]
enabled = true
filter = wordpress
logpath = /var/www/html/andromeda/logs/access.log
port = 80,443

Ini akan menggunakan default ban dan tindakan email. Tindakan lain dapat didefinisikan dengan menambahkan action = line.

Simpan dan keluar, lalu restart Fail2ban.

Cara Menggunakan Fail2ban Client

Fail2ban menyediakan perintah fail2ban-client yang dapat digunakan untuk menjalankan Fail2ban dari baris perintah:

fail2ban-client COMMAND
  • start: Memulai server dan jail Fail2ban.
  • reload: Reloads file konfigurasi Fail2ban.
  • reload JAIL: Mengganti JAIL dengan nama jail Fail2ban; ini akan memuat ulang jail.
  • stop: Menghentikan server.
  • status: Akan menunjukkan status server, dan mengaktifkan jail.
  • status JAIL: Akan menampilkan status jail, termasuk IP yang saat ini dilarang.

Misalnya, untuk memeriksa apakah Fail2Ban berjalan dan jail SSHd diaktifkan, jalankan:

fail2ban-client status

Outputnya harus:

Status
|- Number of jail:      1
`- Jail list:   sshd

Untuk informasi tambahan tentang perintah fail2ban-client, lihat wiki Fail2ban.

Lockout Recovery

Jika Anda merasa IP Anda terbanned karena fail2ban, maka Anda dapat memeriksa pengaturan firewall untuk memastikan bahwa fail2banlah yang memblokir IP Anda.

Untuk melakukan ini, ketik perintah berikut:

iptables -n -L

Cari alamat IP Anda di kolom source chain fail2ban (selalu diawali dengan f2b atau fail2ban) untuk melihat apakah Anda diblokir atau tidak oleh layanan fail2ban:

Chain f2b-sshd (1 references)
target     prot opt source               destination
REJECT     all  ---  203.0.113.0        0.0.0.0/0            reject-with icmp-e

Untuk menghapus alamat IP Anda dari jail, Anda dapat menggunakan perintah berikut, silahkan ganti 203.0.113.0 dan jailname dengan alamat IP dan nama jail yang ingin Anda batalkan:

fail2ban-client set jailname unbanip 203.0.113.0
Catatan

Jika Anda tidak dapat mengingat nama jail Anda, maka Anda dapat menggunakan perintah berikut untuk melihat daftar semua jail yang Anda buat:

fail2ban-client status

Jika Anda ingin berhenti menggunakan layanan fail2ban kapan saja, Anda dapat mengetikkan perintah berikut:

fail2ban-client stop

CentOS 7 dan Fedora juga membutuhkan 2 perintah tambahan agar fail2ban berhenti total dan dinonaktifkan:

systemctl stop fail2ban
systemctl disable fail2ban

4 COMMENTS

  1. failregex = — — \[(\d{2})/\w{3}/\d{4}:\1:\1:\1 -\d{4}\] “POST /wp-login.php HTTP/1.1” 200

    terkait sintak diatas. berhubung prakteknya masih menggunakan web server virtual dan belum ada dns begitu serta sekedar tampilan index.html bukan login.. nah untuk improve sintak diatas gimana ya gann

    • Halo gan,

      Perlu dipahami, pengunaan fail2ban adalah untuk mengamankan file dari serangan luar seperti, percobaan login yang berulang-ulang, dalam contoh di atas ditemukan dalam file log upaya login berulang kali pada file wp-login.php.

      Kode regex yang dibuat adalah untuk menampilkan tanggal pada catatan file log, kapan tepatnya upaya pembobolan/login itu dilakukan.

      Kalau agan coba di web server virtual tinggal ganti aja wp-login.php –> index.html

      Terimakasih.

        • Fungsi yang paling sering dibahas itu memang mencegah upaya login atau upaya cheat ke server & web, untuk upaya lain kurang tau mas, tapi sepertinya bisa, apalagi jika agan ngerti bahasa phyton, rulenya isa ditambah di jail.conf

LEAVE A REPLY

Please enter your comment!
Please enter your name here

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