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