Saturday, November 20, 2010

Fail2ban di Slackware v12.x


Kali ini tentang program bernama Fail2ban :)
Apa itu Fail2ban ?
Fail2ban :Scan log file (punya apache, ftpd log,sshd,dan lain2,...) trus mau blok IP user karena buat banyak salah password, dan lain-lain,.. Oops !?
Contoh :
Log apache (/var/log/httpd/error_log).Ingin blok IP user yang ada pesan File does not exist.
[Wed Sep 3 22:28:19 2008] [error] [client 222.124.211.xx1] File does not exist:/inigakada.php
[Wed Sep 3 22:28:22 2008] [error] [client 222.124.211.xx1] File does not exist:/filepentingdech.php
[Wed Sep 3 22:28:24 2008] [error] [client 222.124.211.xx] File does not exist: /admin.php

Log dari mod_security (/var/log/httpd/modsecurity/audit_log).Ingin blok IP yang
Acces denied
[Mon Sep 01 18:10:52 2008] [error] [client 208.113.205.xx] ModSecurity: Warning. Match ....
[Mon Sep 01 20:16:21 2008] [error] [client 75.127.112.xx] ModSecurity: Access denied ...

Log dari sshd (/var/log/messages).Ingin blok IP user yang
Failed password.
Sep 1 22:13:55 black-hole sshd[26780]: Address 218.28.41.108 maps to pc0.zz.ha.cn, but this ...
Sep 1 22:13:55 black-hole sshd[26780]: Failed password for root from 218.28.41.108 port 1648 ssh2
Sep 1 22:13:56 black-hole sshd[26782]: Address 218.28.41.108 maps to pc0.zz.ha.cn, but this ...
Sep 1 22:13:56 black-hole sshd[26782]: Invalid user http from 218.28.41.108
Sep 1 22:13:56 black-hole sshd[26782]: Failed password for invalid user http from 218.28.41.108 ..
Tertarik ? :)
Download fail2ban.
Ingin langsung pakai dari source, pake script slackbuild, atau ambil paket jadi ?
Karena fail2ban dibuat pake python, jadi intinya langsung pakai saja. Tapi saya menganjurkan untuk build paket lewat slackbuild. (
http://slackbuilds.org/repository/12.1/network/fail2ban/).
Memulai fail2ban:
Ubah ijin file /etc/rc.d/rc.fail2ban jadi 755.
#chmod 755 /etc/rc.d/rc.fail2ban
Start fail2ban
#/etc/rc.d/rc.fail2ban start
Oke ! Fail2ban sudah jalan.Tapi.....tidak ada fungsi blok yang dijalankan ! Hehehe
Mode blok IP
Mode blok IP oleh fail2ban ada 3 cara. Iptables, tcpwrapper, atau shorewall. Iptables dan tcpwrapper sudah terinstall default pada Slackware.jadi ini adalah alternatif tercepat yang bisa dipilih.
Bagian yang perlu dicermati.
0.Fail2ban.conf (/etc/fail2ban/fail2ban.conf)
1.Jail.conf (/etc/fail2ban/jail.conf)
2.Filter (/etc/fail2ban/filter.d)
3.Action (/etc/fail2ban/action.d)
Jail.conf
Isi /etc/fail2ban/jail.conf
#### Ini bagian default. Jika Anda tidak mencantumkan bantime, maka dianggap 600 detik misalnya.
[DEFAULT]
####IP yang diabaikan oleh fail2ban. Biasanya localhost. Atau alamat IP remote PC Anda.
ignoreip = 127.0.0.1
####Lama blok IP (detik)
bantime = 600
####Maksimum retry dalam jangka waktu berapa lama (detik) ?
findtime = 600
#### Jumlah kesalahan yang diijinkan ?
maxretry = 3
####Backend - Cara scan log oleh fail2ban.Default slackware tidak ada gamin.Jadi lebih baik pake polling.
backend = polling
Oke, sekarang kebagian berikutnya.
[ssh-iptables]
enabled = false #Ubah jadi 'true' jika dipakai.
filter = sshd #Jenis filter yang dipakai. Untuk brute force attack.
action = iptables[name=SSH, port=ssh, protocol=tcp] #blok IP pakai metode iptables.
sendmail-whois[name=SSH, dest=you@mail.com, sender=fail2ban@mail.com] #jika ingin notifikasi e-mail/
logpath = /var/log/sshd.log #Ubah ke /var/log/messages agar sesuai dengan slackware.
maxretry = 5 #Jumlah maksimum kesalahan.
#
Jadi jika saya ingin mencegah bruteforce pada port ssh, maka konfigurasi ssh-iptables jadi seperti dibawah :

[ssh-iptables]
enabled = true
filter = sshd
action = iptables[name=SSH, port=ssh, protocol=tcp]
sendmail-whois[name=SSH, dest=E-mailAnda@gmail.com, sender=fail2ban@HostAnda.com]
logpath = /var/log/messages
maxretry = 5

Jika ingin digunakan tcpwrapper,blok 2 jam, dan tanpa e-mail notifikasi :

[ssh-pakaitcpwrapperdech]
enabled = true
filter = sshd
action = hostsdeny
logpath = /var/log/messages
maxretry = 5
bantime = 7200

Filter menentukan 'jenis' kesalahan. Jika filter diubah menjadi sshd-ddos maka fungsi blok akan berlaku akibat ddos pada port ssh.

[ssh-ddosdech]
enabled = true
filter = sshd-ddos
action = hostsdeny
logpath = /var/log/messages
maxretry = 5
bantime = 7200
Contoh Apache.
Pada contoh di bawah, blok IP dilakukan dengan iptables. Sedang filter adalah 'apache-auth'.Bantime sesuai default (600 detik)
[apache-pakeiptables]
enabled = true
filter = apache-auth
action = iptables[name=Apache2, port=http, protocol=tcp]
logpath = /var/log/httpd/error_log
maxretry = 6
Ada 2 jenis action iptables yang disediakan. Pada contoh di atas, hanya IP user yang mengakses port http (80) yang diblok. Seandainya user tersebut juga mengakses port ssh (22) atau port ftp (21) tidak ada blocking yang dilakukan oleh fail2ban.
Jika ingin blok IP untuk semua port, maka digunakan action iptables multiport.Di bawah ini contoh iptables-multiport :
[apache-multiport]
enabled = true
filter = apache-auth
action = iptables-multiport[name=Apache2, port=http, protocol=tcp]
logpath = /var/log/httpd/error_log
bantime = 100000
maxretry = 6
Pada contoh dibawah, digunakan action hostsdeny. Sedang filter yang berlaku adalah apache-noscript.
[apache-noscripttcpwrapper]
enabled = true
filter = apache-noscript
action = hostsdeny
logpath = /var/log/httpd/error_log
maxretry = 6
Regex..regex...regex
Dibawah ini contoh filter apache-overflows.conf

[Definition]
# Notes.: Regexp to catch Apache overflow attempts.
# Values: TEXT
#
failregex = [[]client vHOSTv[]] (Invalid method in request|request failed: URI too long|erroneous characters after protocol)
# Option: ignoreregex
# Notes.: regex to ignore. If this regex matches, the line is ignored.
# Values: TEXT
#
ignoreregex =

Bagian terpenting adalah failregex.Jika saya ingin blok IP dengan kesalahan seperti dibawah :

[Wed Sep 3 22:28:19 2008] [error] [client 222.124.211.xx1] File does not exist:/inigakada.php
[Mon Sep 01 20:16:21 2008] [error] [client 75.127.112.xx] ModSecurity: Access denied ...

Maka pada filter dapat saya susun seperti di bawah :

failregex = [[]client vHOSTv[]] (File does not exist|Modsecurity: Access denied)
atau
failregex = [[]client vHOSTv[]] (not exist|Access denied)

Jika saya ingin blok IP dengan pesan seperti di bawah :

Sep 1 22:13:58 black-hole sshd[26784]: Failed password for root from 218.28.41.108 port 1751 ssh2
Sep 1 22:14:00 black-hole sshd[26786]: Invalid user oracle from 218.28.41.108

failregex = (Failed password for|Invalid user) .* from vHOSTv

Ps:Mohon ganti tanda vHOSTv dengan < dan > :P
Baiklah, skrip penulisan failregex dapat Anda pelajari lebih lanjut :) Yang terpenting adalah hasil pengamatan log file, filter, dan action !
Semoga memberi inspirasi.
Salam.

0 komentar:

Post a Comment