#!/bin/sh ######################################################################## # Begin $rc_base/init.d/suricata # # Description : Suricata Initscript # # Author : Stefan Schantl # # Version : 01.00 # # Notes : # ######################################################################## . /etc/sysconfig/rc . ${rc_functions} PATH=/usr/local/sbin:/usr/local/bin:/bin:/usr/bin:/sbin:/usr/sbin; export PATH eval $(/usr/local/bin/readhash /var/ipfire/suricata/settings) # Name of the firewall chain. FW_CHAIN="IPS" # Optional options for the Netfilter queue. NFQ_OPTS="--queue-bypass " # Array containing the 4 possible network zones. network_zones=( red green blue orange ) # Mark and Mask options. MARK="0x1" MASK="0x1" case "$1" in start) # Get amount of CPU cores. NFQUEUES= CPUCOUNT=0 while read line; do [ "$line" ] && [ -z "${line%processor*}" ] && NFQUEUES+="-q $CPUCOUNT " && ((CPUCOUNT++)) done 0 ]; then # Balance beetween all queues. NFQ_OPTIONS+="--queue-balance 0:" NFQ_OPTIONS+=$(($CPUCOUNT-1)) else # Send all packets to queue 0. NFQ_OPTIONS+="--queue-num 0" fi # Create firewall rules to queue the traffic and pass to # the IDS. iptables -I "$FW_CHAIN" -i "$network_device" -m mark ! --mark "$MARK"/"$MASK" -j NFQUEUE "$NFQ_OPTIONS" iptables -I "$FW_CHAIN" -o "$network_device" -m mark ! --mark "$MARK"/"$MASK" -j NFQUEUE "$NFQ_OPTIONS" fi done # Start the IDS. boot_mesg "Starting Intrusion Detection System..." /usr/bin/suricata -c /etc/suricata/suricata.yaml -D $NFQUEUES evaluate_retval fi ;; stop) boot_mesg "Stopping Intrusion Detection System..." killproc -p /var/run/suricata.pid /var/run # Flush firewall chain. iptables -F $FW_CHAIN # Remove suricata control socket. rm /var/run/suricata/* >/dev/null 2>/dev/null # Don't report returncode of rm if suricata was not started exit 0 ;; status) statusproc /usr/bin/suricata ;; restart) $0 stop $0 start ;; reload) # Send SIGUSR2 to the suricata process to perform a reload # of the ruleset. kill -USR2 $(pidof suricata) ;; *) echo "Usage: $0 {start|stop|restart|reload|status}" exit 1 ;; esac chmod 644 /var/log/suricata/* 2>/dev/null # End $rc_base/init.d/suricata