forked from evolix/ansible-roles
Jérémy Lecour
03c53433d6
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.
79 lines
2 KiB
Bash
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
|