Package: sshguard
Version: 1.5-6
Severity: important

Dear Maintainer,

Sshguard has erratic behaviour on bootup, sometimes failing to start, sometimes 
starting itself but unable to function.

This is due to the fact that the init script /etc/init.d/sshguard is not able 
to configure the chain sshguard with iptables.

This would be done by the following commands in /etc/init.d/sshguard script:

iptables -N sshguard 2> /dev/null
ip6tables -N sshguard 2> /dev/null
iptables -I INPUT -j sshguard 2> /dev/null
ip6tables -I INPUT -j sshguard 2> /dev/null

Unfortunately, stderr is discarded. Removing the stderr redirection, the 
following message appears:

"Another app is currently holding the xtables lock."

This happens because the first iptables returns before the kernel is properly 
configured, which prevents the following three.

One way to fix this issue is to call iptables and ip6tables commands with 
switch -w:

iptables -w -N sshguard
ip6tables -w -N sshguard
iptables -w -I INPUT -j sshguard
ip6tables -w -I INPUT -j sshguard

Attached is my modified /etc/init.d/sshguard.


-- System Information:
Debian Release: 8.0
  APT prefers testing-updates
  APT policy: (500, 'testing-updates'), (500, 'testing')
Architecture: amd64 (x86_64)

Kernel: Linux 3.16.0-4-amd64 (SMP w/4 CPU cores)
Locale: LANG=C, LC_CTYPE=C (charmap=ANSI_X3.4-1968)
Shell: /bin/sh linked to /bin/dash
Init: systemd (via /run/systemd/system)

Versions of packages sshguard depends on:
ii  iptables  1.4.21-2+b1
ii  libc6     2.19-15

sshguard recommends no packages.

sshguard suggests no packages.

-- Configuration Files:
/etc/init.d/sshguard changed:
PATH=/sbin:/usr/sbin:/bin:/usr/bin
DESC="SSHGuard Server"
NAME=sshguard
DAEMON=/usr/sbin/$NAME
PIDFILE=/var/run/$NAME.pid
SCRIPTNAME=/etc/init.d/$NAME
DAEMON_ARGS="-i $PIDFILE"
OS=$(uname)
[ ! -x "$DAEMON" ] && log_warning_msg "No valid daemon $DAEMON for $NAME, 
exiting" && exit 0
[ -r /etc/default/$NAME ] && . /etc/default/$NAME
. /lib/init/vars.sh
. /lib/lsb/init-functions
LOGS=0
for logfile in $LOGFILES; do [ -r "$logfile" ] && DAEMON_ARGS="$DAEMON_ARGS -l 
$logfile" && LOGS=$((LOGS+1)); done
[ $LOGS = 0 ] && log_warning_msg "No valid logs to scan by $NAME, exiting" && 
exit 0
DAEMON_ARGS="$DAEMON_ARGS -w $WHITELIST $ARGS"
if [ "$OS" = "Linux" ]; then
        #
        # Function that enables firewall
        #
        do_enable_firewall()
        {
                log_progress_msg "enabling firewall"
                # creating sshguard chain
                iptables -w -N sshguard
                ip6tables -w -N sshguard
                # block traffic from abusers
                iptables -w -I INPUT -j sshguard
                ip6tables -w -I INPUT -j sshguard
        }
        #
        # Function that disables firewall
        #
        do_disable_firewall()
        {
                log_progress_msg "disabling firewall"
                # flushes list of abusers
                iptables -F sshguard 2> /dev/null
                ip6tables -F sshguard 2> /dev/null
                # removes sshguard firewall rules
                iptables -D INPUT -j sshguard 2> /dev/null
                ip6tables -D INPUT -j sshguard 2> /dev/null
                # removing sshguard chain
                iptables -X sshguard 2> /dev/null
                ip6tables -X sshguard 2> /dev/null
        }
else
        # KfreeBSD code
        #
        # Function that enables firewall
        #
        do_enable_firewall()
        {
                log_progress_msg "enabling firewall"
                # create sshguard firewall rules
                PF_AVAILABLE=$(lsmod |grep pf.ko |awk {'print $5'})
                if [ "$PF_AVAILABLE" != "pf.ko" ]; then
                        kldload pf
                fi
                pfctl -e 2> /dev/null # Enable PF
                # Loading sshguard table and rules
                pfctl -f /etc/sshguard/sshguard.conf 2> /dev/null
        }
        #
        # Function that disables firewall
        #
        do_disable_firewall()
        {
                log_progress_msg "disabling firewall"
                # flushes list of abusers
                pfctl -Tflush -t sshguard 2> /dev/null
                # removes sshguard firewall rules
                pfctl -Tdel -t sshguard 2> /dev/null
                # removing sshguard table
                pfctl -Tkill -t sshguard 2> /dev/null
        }
fi
case "$1" in
        start)
        log_daemon_msg "Starting $DESC" "$NAME"
        if [ "$ENABLE_FIREWALL" = "1" ]; then
            do_enable_firewall
        fi
        if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --exec 
$DAEMON --background -- $DAEMON_ARGS; then
                log_end_msg 0
        else
                log_end_msg 1
        fi
        ;;
        stop)
        log_daemon_msg "Stopping $DESC" "$NAME"
        if start-stop-daemon --stop --quiet --oknodo --pidfile $PIDFILE; then
                ret=0
        else
                ret=1
        fi
        if [ "$ENABLE_FIREWALL" = "1" ]; then
            do_disable_firewall
        fi
        log_end_msg $ret
        ;;
        restart|force-reload)
        log_daemon_msg "Restarting $DESC" "$NAME"
        start-stop-daemon --stop --quiet --oknodo --retry 30 --pidfile $PIDFILE
        if [ "$ENABLE_FIREWALL" = "1" ]; then
            do_disable_firewall
            do_enable_firewall
        fi
        if start-stop-daemon --start --quiet --oknodo --pidfile $PIDFILE --exec 
$DAEMON --background -- $DAEMON_ARGS; then
                log_end_msg 0
        else
                log_end_msg 1
        fi
        ;;
        status)
                status_of_proc -p "$PIDFILE" "$DAEMON" "$NAME" && exit 0 || 
exit $?
        ;;
        *)
        log_action_msg "Usage: $SCRIPTNAME 
{start|stop|force-reload|restart|status}"
        exit 3
        ;;
esac


-- no debconf information


-- 
To UNSUBSCRIBE, email to debian-bugs-dist-requ...@lists.debian.org
with a subject of "unsubscribe". Trouble? Contact listmas...@lists.debian.org

Reply via email to