Apa Itu Fail2Ban

Fail2ban adalah sebuah aplikasi log-parsing yang memantau system logs terhadap serangan. Ketika cobaan serangan terdeteksi dalam log,Fail2ban akan menambahkan rule ke dalam iptables untuk memblokir IP address dari si penyerang, untuk rentang waktu tertentu atau permanen. Fail2ban juga bisa mengirimkan peringatan melalui email ketika terjadi serangan.

Fail2ban fokus pada SSH attacks, meskipun bisa dikonfigurasi lebih jauh pada service lain yang menggunakan log files.

Catatan

langkah-langkah pada artikel ini membutuhkan root privileges. Pastikan menjalankan perintah mengunakan user root atau dengansudo prefix.

Peringatan

Fail2ban ditujukan untuk digunakan sebagai tambahan pada already-hardened server bukan ditujukan sebagai pengganti firewall.

Install Fail2ban

CentOS 7

  1. Pastikan sistem up to date dan install EPEL repository:
    yum update && yum install epel-release
    
  2. Install Fail2Ban:
    yum install fail2ban
    
  3. Install Sendmail ingin menggunakan email support. Sendmail tidak mandatory untuk menggunakan Fail2Ban.:
    yum install sendmail
    
  4. Start dan enable Fail2ban dan, jika dibutuhkan, Sendmail:
    systemctl start fail2ban
    systemctl enable fail2ban
    systemctl start sendmail
    systemctl enable sendmail
    

    Catatan

    Jika muncul error “no directory /var/run/fail2ban to contain the socket file /var/run/fail2ban/fail2ban.sock”, buat direktori secara manual:

    mkdir /var/run/fail2ban
    

Debian

  1. Pastikan sistem dalam keadaan up to date:
    apt-get update && apt-get upgrade -y
    
  2. Install Fail2ban:
    apt-get install fail2ban
    

    Service akan start secara otomatis.

  3. (Optional)  install Sendmail:
    apt-get install sendmail-bin sendmail
    
    

Fedora

  1. Update system:
    dnf update
    
  2. Install Fail2ban:
    dnf install fail2ban
    
  3. (Optional)  install Sendmail:
    dnf install sendmail
    
  4. Start dan enable Fail2ban dan, jika perlu, Sendmail:
    systemctl start fail2ban
    systemctl enable fail2ban
    systemctl start sendmail
    systemctl enable sendmail
    

Ubuntu

  1. Pastikan sistem dalam keadaan up to date:
    apt-get update && apt-get upgrade -y
    
  2. Install Fail2ban:
    apt-get install fail2ban
    

    The service will automatically start.

  3. (Optional) install Sendmail:
    apt-get install sendmail
    
  4. Allow SSH access melalui UFW kemudian enable  firewall:
    ufw allow ssh
    ufw enable
    

Mengkonfigurasi Fail2ban

Fail2ban membaca .conf configuration files , baru kemudian .local files yang menimpa konfigurasi sebelumnya. Oleh karena itu semua modifikasi konfigurasi dilakukan pada.local files, sementara.conf files dibiarkan apa adanya.

Konfigurasi fail2ban.local

  1. fail2ban.conf berisi default configuration profile. Default setting memberikan konfigurasi awal yang cukup memadai. Saat ingin melakukan modifikasi, lakukan pada file yang berbeda, fail2ban.local, yang mengoverride fail2ban.conf. Rename sebuah copy fail2ban.conf menjadi fail2ban.local.
    cp /etc/fail2ban/fail2ban.conf /etc/fail2ban/fail2ban.local
    
  2. kemudian edit fail2ban.local sesuai kebutuhan. Nilai yang dapat diubah antara lain:
    • loglevel: Level detail Fail2ban’s logs dapat diset pada level 1 (error), 2 (warn), 3 (info), atau 4 (debug).
    • logtarget: Log aktivitas File2ban pada file spesifik. Nilai default adalah/var/log/fail2ban.log yang dapat diubah ke:
      • STDOUT: output semua data
      • STDERR: output semua errors
      • SYSLOG: message-based logging
      • FILE: outputke file
    • socket: Lokasi dari socket file.
    • pidfile:Lokasi dari PID file.

Konfigurasi jail.local Settings

  1. The jail.conf enable Fail2ban untuk SSH secara default untuk Debian dan Ubuntu, tetapi tidak pada CentOS. Protokol lainnya (HTTP, FTP, etc.) dalam keaadan disabled. Lakukan modifikasi hanya pada file jail.local :
    cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
    
  2. Jika menggunakan CentOS atau Fedora anda harus mengubah backend option dalam jail.local dari auto ke systemd. Aksi ini tidak diperlukan pada Debian 8 atau Ubuntu 16.04, meskipun keduanya juga menggunakan systemd.
    /etc/fail2ban/jail.local
    1
    2
    3
    4
    5
    6
    7
    
    # "backend" specifies the backend used to get files modification.
    # Available options are "pyinotify", "gamin", "polling", "systemd" and "auto".
    # This option can be overridden in each jail as well.
    
    . . .
    
    backend = systemd

    Tidak satupun jail enabeld pada CentOS 7. Sebagai contoh, jika ingin mengenable jail pada ssh, lakukan modifikasi jail.local:

    /etc/fail2ban/jail.local
    1
    2
    
    [sshd]
    enabled = true

Whitelist IP

Tambakan whitelist ip pada ignoreip line. Secara default localhost akan masuk ke dalam whitelist:

/etc/fail2ban/jail.local
1
2
3
4
5
6
[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 ingin menggunakan whitelist pada jail tertentu, bisa dilakukan dengan menggunakan fail2ban-client command. Ganti JAIL dengan nama spesifik jail yang diinginkan, and 123.45.67.89 dengan IP yang ingin diwhitelist

fail2ban-client set JAIL addignoreip 123.45.67.89

Ban Time dan Retry Amount

Set bantimefindtime, dan maxretry :

/etc/fail2ban/jail.local
1
2
3
4
5
6
7
# "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 = 600
maxretry = 3

Konfigurasi Jail Lainnya

/etc/fail2ban/jail.local
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
# 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

Menggunakan Fail2ban Client

Fail2ban menyediakan command fail2ban-client yang bisa digunakan untuk menjalankan File2ban dari command line:

fail2ban-client COMMAND
  • start: Starts Fail2ban server dan jails.
  • reload: Reload Fail2ban’s configuration files.
  • reload JAIL: Ganti JAIL dengan nama Fail2ban jail; ini akan mereload jail.
  • stop: Terminate  server.
  • status: Menampilkan status server, dan enable jails.
  • status JAIL: Menampilkan status jail, termasuk banned IPs.

Sebagai contoh, untuk memeriksa apakah Fail2Ban  running dan  SSHd jail  enabled, jalankan:

fail2ban-client status

Output:

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

Lockout Recovery

Jalankan perintah berikut:

iptables -n -L

Cari IP pada source column pada fail2ban chains (selalu diawali dengan f2b atau fail2ban) untuk memastikan apakah IP yang dimaksud memang diblok oleh 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 merelease IP dari jail, gunakan perintah berikut, ganti 203.0.113.0 dan jailname dengan IP address dan nama jail:

 fail2ban-client set jailname unbanip 203.0.113.0

Catatan

Jika lupa nama jail, jalankan perintah berikut:

fail2ban-client status

Jika ingin mematikan Fail2ban, jalankan perintah berikut:

fail2ban-client stop

CentOS 7 dan Fedora membutuhkan dua command tambahan:

systemctl stop fail2ban
systemctl disable fail2ban