#!/bin/bash ######################################################### # Written by Andor Westphal andor.westphal@gmail.com # # Created: 2013-02-22 (version 1.0) # # Modified:2013-03-12 (version 1.1) # # -fix wrong count for output # # -implement status check # # # #checks the count of active jails # #checks for banned IP's # #integrated performance data for banned IPs # #shows banned IP since the last logrotate in long output# # # # Modified by Le Filament htpps://le-filament.com : # # Modified: 2018-10-24 (version 1.2fil) # # - change reporting to get it in French # # - display usage with -h option # # - change fail2ban.sock to fail2ban-server # # - add AGPL3 license # # Copyright © 2019 Le Filament # # License AGPL-3.0 or later # # (http://www.gnu.org/licenses/agpl.html). # ######################################################### STATUS_OK="0" STATUS_WARNING="1" STATUS_CRITICAL="2" STATUS_UNKNOWN="3" ps_state=$(ps aux |grep "fail2ban-server" |grep -v grep| wc -l) PROGPATH=`dirname $0` fail2ban_client=$(which fail2ban-client) jail_count=$($fail2ban_client status|grep "Number" |cut -f 2) print_usage() { echo " Usage: $PROGPATH/check_fail2ban -h for help (this messeage) -l </path/to/logfile> -p </path/to/conffile> -w <your warnlevel> -c <your critlevel> example : $PROGPATH/check_fail2ban -l /var/log/fail2ban.log -p /etc/fail2ban/jail.conf -w 10 -c 20 " } wrong_cpath() { echo "Is your path to conffile right?" echo "There is no entry for the bantime" echo "Normaly its in the jail.conf" } if [ "$ps_state" -lt "1" ]; then echo " ++++ Process is not running ++++" exit $STATUS_CRITICAL fi if [ -z "$1" ];then echo " ++++ No arguments found ++++" exit $STATUS_UNKNOWN fi while test -n "$1"; do case "$1" in -c) crit=$2 shift ;; -h) print_usage exit $STATUS_UNKNOWN ;; -l) lpath=$2 shift ;; -p) cpath=$2 shift ;; -w) warn=$2 shift ;; *) echo "Unknown argument: $1" print_usage exit $STATUS_UNKNOWN ;; esac shift done if [ -z ${crit} ] || [ -z ${lpath} ] || [ -z ${cpath} ] || [ -z ${warn} ]; then echo " ++++ Missing arguments ++++" print_usage exit $STATUS_UNKNOWN fi ban=$(grep "Ban " ${lpath}|grep -v Fail| awk -F[\ \:] '{print $10,$8}') bcount=$(echo "$ban"|grep -v ^\# | grep -v ^$|wc -l) if [ "$bcount" -ge ${warn} ] && [ "$bcount" -lt ${crit} ]; then State="Warning" elif [ "$bcount" -ge ${warn} ];then State="Critical" else State="Ok" fi ban_time=$(cat ${cpath} |grep "bantime" |cut -d " " -f4) #ban_time=$(echo The bantime are ${ban_time} seconds) long_out=$(cat /var/log/fail2ban.log |grep "Ban "|cut -d " " -f 7,5,2|sed -e 's/$/\\n/g'|grep -v Fail) OUTPUT=$(echo "Etat : ${State} -- IP Bannies=${bcount} -- Warning : ${warn} -- Critical : ${crit} \n ${jail_count} Services surveillés") echo $OUTPUT if [ ${State} == "Warning" ];then exit ${STATUS_WARNING} elif [ ${State} == "Critical" ];then exit ${STATUS_CRITICAL} elif [ ${State} == "Unknown" ];then exit ${STATUS_UNKNOWN} else exit ${STATUS_OK} fi