new upstream release (3.3.0); modify package compatibility for Stretch
[ossec-hids.git] / active-response / firewalls / npf.sh
diff --git a/active-response/firewalls/npf.sh b/active-response/firewalls/npf.sh
new file mode 100755 (executable)
index 0000000..4eabb22
--- /dev/null
@@ -0,0 +1,74 @@
+#!/bin/sh
+# Author: Gianni D'Aprile
+
+GREP=`which grep`
+
+ACTION=$1
+USER=$2
+IP=$3
+
+# Finding path
+LOCAL=`dirname $0`;
+cd $LOCAL
+cd ../
+PWD=`pwd`
+echo "`date` $0 $1 $2 $3 $4 $5" >> ${PWD}/../logs/active-responses.log
+
+NPFCTL=/sbin/npfctl
+
+if [ ! -x ${NPFCTL} ]; then
+       echo "$0: NPF not present."
+       echo "$0: NPF not present." >> ${PWD}/ossec-hids-responses.log
+       exit 0;
+fi
+
+NPF_ACTIVE=`${NPFCTL} show | grep "filtering:" | ${GREP} -c active`
+
+if [ "x1" != "x${NPF_ACTIVE}" ]; then
+       echo "$0: NPF not active."
+       echo "$0: NPF not active." >> ${PWD}/ossec-hids-responses.log
+       exit 0;
+fi
+
+NPF_OSSEC_READY=`${NPFCTL} show | ${GREP} -c "table <ossec_blacklist>"`
+
+if [ "x1" != "x${NPF_OSSEC_READY}" ]; then
+       echo "$0: NPF not configured."
+       echo "$0: NPF not configured." >> ${PWD}/ossec-hids-responses.log
+       exit 0;
+fi
+
+# Checking for an IP
+if [ "x${IP}" = "x" ]; then
+   echo "$0: <action> <username> <ip>" 
+   exit 1;
+fi
+
+case "x${ACTION}" in
+
+       # Blocking IP
+       xadd)
+
+       ${NPFCTL} table ossec_blacklist add ${IP} >/dev/null 2>&1
+       exit 0
+
+       ;;
+
+       # Unblocking IP
+       xdelete)
+
+       ${NPFCTL} table ossec_blacklist del ${IP} >/dev/null 2>&1
+       exit 0
+
+       ;;
+
+       # No matching action
+       *)
+
+       echo "$0: invalid action: ${ACTION}"
+       echo "$0: invalid action: ${ACTION}" >> ${PWD}/ossec-hids-responses.log
+       exit 1
+
+       ;;
+
+esac