原理的話能夠查看百度和fail2ban的主頁,這裏須要說明一點,第一次運行fail2ban,它會將以前的日誌都分析一次,若是是大量的web日誌,你的設置不會當即生效,只有當分析到了你啓動那個時間點纔會有效果,同時查看debug日誌你會發現大量的「 Ignore line since time 1432137724 < 1432196463.42 - 30」,別擔憂這些。python
支持平臺較多,這裏以redhat/centos爲例nginx
添加epel源,以yum安裝 https://fedoraproject.org/wiki/EPEL/zh-cn epel主頁git
rpm -ivh http://mirror.pnl.gov/epel/6/i386/epel-release-6-8.noarch.rpm yum -y install fail2ban
其中github
/etc/fail2ban/ 爲配置文件目錄;web
/usr/share/fail2ban/ 爲項目文件裏面包含了整應用的python代碼;vim
/etc/init.d/fail2ban 爲啓動腳本centos
源碼安裝socket
你能夠直接clone最新的代碼或者下載最新代碼tcp
git clone https://github.com/fail2ban/fail2ban.git
or工具
wget "https://github.com/fail2ban/fail2ban/archive/master.zip";unzip master.zip
而後
cd fail2ban python setup.py install
/etc/fail2ban/ 爲配置文件目錄;
/usr/lib/pythonx.x/site-packages/fail2ban-0.9.2.dev-py2.6.egg/fail2ban 項目文件,依賴你的python版本
啓動腳本:複製源碼路徑files下相應的操做系統的啓動腳本到/etc/init.d/下便可
cp files/redhat-initd /etc/init.d/fail2ban
安裝過程結束
rpm包安裝方式和源碼包安裝方式的配置方法不一樣,官方在0.9或更高的版本將jail.conf文件拆分紅,jail.conf文件和jail.d目錄 這一點經過對比配置文件的目錄結構即可以發現,
#rpm安裝
ll /etc/fail2ban/ total 32 drwxr-xr-x 2 root root 4096 May 22 14:01 action.d -rw-r--r-- 1 root root 1510 Aug 20 2014 fail2ban.conf drwxr-xr-x 2 root root 4096 May 22 14:01 filter.d -rw-r--r-- 1 root root 19313 Aug 20 2014 jail.conf
其中fail2ban.conf爲fail2ban的主配置文件
grep -v ^# fail2ban.conf |grep -v ^$ [Definition] loglevel = 3 logtarget = SYSLOG socket = /var/run/fail2ban/fail2ban.sock pidfile = /var/run/fail2ban/fail2ban.pid
各個參數在配置文件中均有詳細說明,jail.conf爲定義的須要處理的的動做是否生效,指定須要分析的logpath等等
這裏咱們直接追加下面的內容
[nginx-get-cc] #是否開啓防禦 enabled = true #使用的是哪一個filter文件 filter.d/nginx-get-cc.conf filter = nginx-get-cc #執行的操做,更多操做查看配置文件。 action = iptables-multiport[name=cc-attrack, port="http", protocol=tcp] #日誌路徑 logpath = /var/log/nginx/*error.log #時間範圍 findtime = 60 #添加到防火牆後多久失效 bantime = 7200 #最大重試次數 maxretry = 1000
而後添加filter文件
vim filter.d/nginx-get-cc.conf # Fail2Ban configuration file # # [Definition] # Option: failregex # Note: This regex will match any GET entry in your logs, so basically all valid and not valid entries are a match. # You should set up in the jail.conf file, the maxretry and findtime carefully in order to avoid false positives. failregex = ^<HOST> - .*GET # Option: ignoreregex # Notes.: regex to ignore. If this regex matches, the line is ignored. # Values: TEXT # ignoreregex =
而後啓動
/etc/init.d/fail2ban start
而後使用ab或者webbench工具
ab -n 10000 -c 1000 http://192.168.0.208/
而後觀察防火牆狀態
iptables-save -A f2b-cc-attrack -s 192.168.0.213/32 -j REJECT --reject-with icmp-port-unreachable
#源碼包安裝
ll total 60 drwxr-xr-x 2 root root 4096 May 20 12:44 action.d -rw-r--r-- 1 root root 2329 May 21 06:19 fail2ban.conf drwxr-xr-x 2 root root 4096 May 20 12:44 fail2ban.d drwxr-xr-x 3 root root 4096 May 21 02:37 filter.d -rw-r--r-- 1 root root 17755 May 20 12:44 jail.conf drwxr-xr-x 2 root root 4096 May 21 02:36 jail.d -rw-r--r-- 1 root root 1889 May 20 12:44 paths-common.conf -rw-r--r-- 1 root root 645 May 20 12:44 paths-debian.conf -rw-r--r-- 1 root root 689 May 20 12:44 paths-fedora.conf -rw-r--r-- 1 root root 1174 May 20 12:44 paths-freebsd.conf -rw-r--r-- 1 root root 290 May 20 12:44 paths-osx.conf
和yum安裝配置惟一的區別在於 jail.conf會自動引用jail.d下以.conf結尾的配置文件,這裏咱們直接添加一個nginx-get-cc.conf 同時添加內容
vim nginx-get-cc.conf [nginx-get-cc] \#是否開啓防禦 enabled = true \#使用的是哪一個filter文件 filter.d/nginx-get-cc.conf filter = nginx-get-cc \#執行的操做,更多操做查看配置文件。 action = iptables-multiport[name=cc-attrack, port="http", protocol=tcp] \#日誌路徑 logpath = /var/log/nginx/*error.log \#時間範圍 findtime = 60 \#添加到防火牆後多久失效 bantime = 7200 \#最大重試次數 maxretry = 1000
而後添加filter文件,在啓動fail2ban而後使用ab工具測試。