|
|
|
#! /bin/sh
|
|
|
|
#
|
|
|
|
# Fail2Ban init.d file - to be launched on boot
|
|
|
|
#
|
|
|
|
# Written by Miquel van Smoorenburg <miquels@cistron.nl>.
|
|
|
|
# Modified for Debian
|
|
|
|
# by Ian Murdock <imurdock@gnu.ai.mit.edu>.
|
|
|
|
# Adjusted for Fail2Ban
|
|
|
|
# by Yaroslav Halchenko <debian@onerussian.com>.
|
|
|
|
#
|
|
|
|
# Version: $Id$
|
|
|
|
#
|
|
|
|
export PATH="${PATH:+$PATH:}/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin"
|
|
|
|
DAEMON=/usr/bin/fail2ban
|
|
|
|
NAME=fail2ban
|
|
|
|
DESC=fail2ban
|
|
|
|
PIDFILE=/var/run/$NAME.pid
|
|
|
|
|
|
|
|
test -x $DAEMON || exit 0
|
|
|
|
|
|
|
|
# Include fail2ban defaults if available
|
|
|
|
if [ -f /etc/default/fail2ban ] ; then
|
|
|
|
. /etc/default/fail2ban
|
|
|
|
fi
|
|
|
|
DAEMON_OPTS=$FAIL2BAN_OPTS
|
|
|
|
set -e
|
|
|
|
|
|
|
|
case "$1" in
|
|
|
|
start)
|
|
|
|
echo -n "Starting $DESC: "
|
|
|
|
if $0 status >/dev/null
|
|
|
|
then
|
|
|
|
( $0 status )
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
[ -f $PIDFILE ] && [ ! -d /proc/`cat $PIDFILE` ] && rm -f $PIDFILE
|
|
|
|
start-stop-daemon --start --quiet --pidfile $PIDFILE \
|
|
|
|
--exec $DAEMON -- $DAEMON_OPTS
|
|
|
|
echo ".done"
|
|
|
|
;;
|
|
|
|
stop)
|
|
|
|
echo -n "Stopping $DESC: "
|
|
|
|
( $0 status >/dev/null )
|
|
|
|
case "$?" in
|
|
|
|
0) fail2banpid=`cat $PIDFILE` ;;
|
|
|
|
3) echo "done"; exit 0;;
|
|
|
|
*)
|
|
|
|
( $0 status )
|
|
|
|
echo "Not stopping fail2ban"
|
|
|
|
exit 1
|
|
|
|
esac
|
|
|
|
|
|
|
|
start-stop-daemon --oknodo --stop --quiet --pidfile $PIDFILE
|
|
|
|
maxsecs=30
|
|
|
|
i=0
|
|
|
|
while [ -f $PIDFILE ] && [ -d /proc/$fail2banpid ] \
|
|
|
|
&& [ $i -le $maxsecs ]; do
|
|
|
|
echo -n "."
|
|
|
|
sleep 1
|
|
|
|
i=$(($i+1))
|
|
|
|
done
|
|
|
|
if [ $i -eq $maxsecs ]; then
|
|
|
|
echo "ERROR: Fail2ban failed to stop properly. Tail of the log file is"
|
|
|
|
tail /var/log/fail2ban.log
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
echo "done"
|
|
|
|
;;
|
|
|
|
restart|force-reload)
|
|
|
|
echo -n "Restarting $DESC: "
|
|
|
|
( $0 stop )
|
|
|
|
sleep 1
|
|
|
|
$0 start
|
|
|
|
;;
|
|
|
|
status)
|
|
|
|
echo -n "Status of $DESC: "
|
|
|
|
if [ ! -e "$PIDFILE" ]; then
|
|
|
|
echo "$NAME is not running."
|
|
|
|
exit 3
|
|
|
|
fi
|
|
|
|
if [ ! -r "$PIDFILE" ]; then
|
|
|
|
echo "$PIDFILE not readable, status of $NAME unknown."
|
|
|
|
exit 4
|
|
|
|
fi
|
|
|
|
if [ -d /proc/`cat "$PIDFILE"` ]; then
|
|
|
|
echo "$NAME is running."
|
|
|
|
exit 0
|
|
|
|
else
|
|
|
|
echo "$NAME is not running but $PIDFILE exists."
|
|
|
|
exit 1
|
|
|
|
fi
|
|
|
|
;;
|
|
|
|
*)
|
|
|
|
N=/etc/init.d/$NAME
|
|
|
|
echo "Usage: $N {start|stop|restart|force-reload|status}" >&2
|
|
|
|
exit 1
|
|
|
|
;;
|
|
|
|
esac
|
|
|
|
|
|
|
|
exit 0
|