ansible-roles/minifirewall/files/check_minifirewall
Jérémy Lecour 03c53433d6 Add minifirewal_status and check_minifirewall
minifirewall_status returns "started" on stdout and exit code 0,
or "stopped" on stdout and exit code 1. The state of minifirewall
is determined by looking for common iptables rules applied by
minifirewall.

check_minifirewall is an NRPE plugin for minifirewall. It returns:
* 0 (OK) if the firewall state is consistent with its configuration
(from the alert5 script)
* 1 (WARNING) if the firewall is started but alert5 is not configured
properly
* 2 (CRITICAL) if the firewall is not running but it should be.
2018-04-06 09:52:18 +02:00

79 lines
2 KiB
Bash

#!/bin/sh
is_alert5_enabled() {
# It's not very clear how to reliably detect if a SysVinit script
# wrapped in a systemd unit is enabled or not.
# Even when the script is not started in any run level, systemd says "active".
# So we test the SysVinit script path:
# if present, we test for an rc2.d symlink
# if missing, we ask systemd if a unit is active or not.
if test -f /etc/init.d/alert5; then
test -f /etc/rc2.d/S*alert5
else
systemctl is-active alert5 | grep -q "^active$"
fi
}
is_minifirewall_enabled() {
# TODO: instead of nested conditionals, we could loop with many possible paths
# and grep the first found, or error if none is found
if test -f /etc/rc2.d/S*alert5; then
grep -q "^/etc/init.d/minifirewall" /etc/rc2.d/S*alert5
else
if test -f /usr/share/scripts/alert5.sh; then
grep -q "^/etc/init.d/minifirewall" /usr/share/scripts/alert5.sh
else
return_critical "No Alert5 scripts has been found."
fi
fi
}
is_minifirewall_started() {
if test -x /usr/share/scripts/minifirewall_status; then
/usr/share/scripts/minifirewall_status > /dev/null
else
/sbin/iptables -L -n | grep -q -E "^(DROP\s+udp|ACCEPT\s+icmp)\s+--\s+0\.0\.0\.0\/0\s+0\.0\.0\.0\/0\s*$"
fi
}
return_critical() {
echo "CRITICAL: $1"
exit 2
}
return_warning() {
echo "WARNING: $1"
exit 1
}
return_ok() {
echo "OK: $1"
exit 0
}
main() {
if is_alert5_enabled; then
if is_minifirewall_enabled; then
if is_minifirewall_started; then
return_ok "Minifirewall is started."
else
return_critical "Minifirewall is not started."
fi
else
if is_minifirewall_started; then
return_warning "Minifirewall is started, but disabled in alert5."
else
return_ok "Minifirewall is not started, but disabled in alert5."
fi
fi
else
if is_minifirewall_started; then
return_warning "Minifirewall is started, but Alert5 script is not enabled."
else
return_ok "Minifirewall is not started and Alert5 script is not enabled."
fi
fi
}
main