mirror of https://github.com/OISF/suricata
mt/ci: Add MT live test
Add MT live test capability: - multi-tenant.sh: harness that sets up and steps through MT steps - suricata-mt.yaml: Adds MT capability to Suricata - tenant-1.yaml: Per-tenant configuration filepull/13939/head
parent
4764152567
commit
51c9609c7c
@ -0,0 +1,110 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
|
||||||
|
# Script that runs through basic MT operations:
|
||||||
|
# - Enable MT for Suricata
|
||||||
|
# - Tenant registration via suricatasc
|
||||||
|
# - Tenant reload via suricatasc
|
||||||
|
# - Tenant deregistration via suricatasc
|
||||||
|
|
||||||
|
# Call with following argument:
|
||||||
|
# runmode string (single/autofp/workers)
|
||||||
|
|
||||||
|
SOCKET=/var/run/suricata/suricata-command.socket
|
||||||
|
function timed_command()
|
||||||
|
{
|
||||||
|
local command="$1"; shift
|
||||||
|
local expected=${1:-"OK"}; shift
|
||||||
|
local timeout=${1:-60}
|
||||||
|
local duration=${1:-30}
|
||||||
|
JSON=$(timeout --kill-after=${timeout} ${duration} ${SURICATASC} -c "${command}" ${SOCKET})
|
||||||
|
rc=$?
|
||||||
|
if [ $rc -eq 124 ]; then
|
||||||
|
echo "Timeout detected; exiting"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
result=$(echo $JSON | jq -r '.return')
|
||||||
|
if [ $result != ${expected} ]; then
|
||||||
|
echo "EXITing due to expected result mismatch: expected ${expected}; actual ${result}"
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
echo ${JSON}
|
||||||
|
}
|
||||||
|
|
||||||
|
if [ $# -ne "1" ]; then
|
||||||
|
echo "ERROR call with 1 args: runmode (single/autofp/workers)"
|
||||||
|
exit 1;
|
||||||
|
fi
|
||||||
|
|
||||||
|
RUNMODE=$1
|
||||||
|
|
||||||
|
# dump some info
|
||||||
|
uname -a
|
||||||
|
ip r
|
||||||
|
|
||||||
|
# remove eve.json from previous run
|
||||||
|
if [ -f eve.json ]; then
|
||||||
|
rm eve.json
|
||||||
|
fi
|
||||||
|
|
||||||
|
if [ -e ./rust/target/release/suricatasc ]; then
|
||||||
|
SURICATASC=./rust/target/release/suricatasc
|
||||||
|
else
|
||||||
|
SURICATASC=./rust/target/debug/suricatasc
|
||||||
|
fi
|
||||||
|
|
||||||
|
RES=0
|
||||||
|
|
||||||
|
export PYTHONPATH=python/
|
||||||
|
# Get listen interface and "ping" target address
|
||||||
|
IFACE=$(ip r|grep default|awk '{print $5}')
|
||||||
|
echo $IFACE
|
||||||
|
GW=$(ip r|grep default|awk '{print $3}')
|
||||||
|
echo $GW
|
||||||
|
|
||||||
|
ping $GW &
|
||||||
|
PINGPID=$!
|
||||||
|
|
||||||
|
# set first rule file
|
||||||
|
cp .github/workflows/live/icmp.rules suricata.rules
|
||||||
|
cp .github/workflows/live/{suricata-mt.yaml,tenant-1.yaml} .
|
||||||
|
|
||||||
|
# Start Suricata, SIGINT after 120 secords. Will close it earlier through
|
||||||
|
# the unix socket.
|
||||||
|
timeout --kill-after=240 --preserve-status 120 \
|
||||||
|
./src/suricata -c suricata.yaml --include suricata-mt.yaml -l ./ --pcap=$IFACE --set "pcap.bpf-filter=icmp" -v --set default-rule-path=. --runmode=$RUNMODE &
|
||||||
|
SURIPID=$!
|
||||||
|
|
||||||
|
sleep 15
|
||||||
|
|
||||||
|
JSON=$(timed_command "register-tenant 2 tenant-1.yaml")
|
||||||
|
echo $JSON
|
||||||
|
|
||||||
|
JSON=$(timed_command "reload-tenants")
|
||||||
|
echo $JSON
|
||||||
|
|
||||||
|
JSON=$(timed_command "register-tenant 3 tenant-1.yaml")
|
||||||
|
echo $JSON
|
||||||
|
|
||||||
|
JSON=$(timed_command "reload-tenants")
|
||||||
|
echo $JSON
|
||||||
|
|
||||||
|
JSON=$(timed_command "unregister-tenant 2")
|
||||||
|
echo $JSON
|
||||||
|
|
||||||
|
JSON=$(timed_command "unregister-tenant 3")
|
||||||
|
echo $JSON
|
||||||
|
|
||||||
|
JSON=$(timed_command "unregister-tenant 5" "NOK")
|
||||||
|
echo $JSON
|
||||||
|
|
||||||
|
echo "SURIPID $SURIPID PINGPID $PINGPID"
|
||||||
|
|
||||||
|
JSON=$(timed_command "reload-tenants")
|
||||||
|
|
||||||
|
kill -INT $PINGPID
|
||||||
|
wait $PINGPID
|
||||||
|
${SURICATASC} -c "shutdown" ${SOCKET}
|
||||||
|
wait $SURIPID
|
||||||
|
|
||||||
|
echo "done: $RES"
|
||||||
|
exit $RES
|
||||||
@ -0,0 +1,16 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
---
|
||||||
|
|
||||||
|
multi-detect:
|
||||||
|
enabled: yes
|
||||||
|
#selector: direct # direct or vlan or device
|
||||||
|
selector: vlan
|
||||||
|
loaders: 3
|
||||||
|
|
||||||
|
tenants:
|
||||||
|
- id: 1
|
||||||
|
yaml: tenant-1.yaml
|
||||||
|
|
||||||
|
mappings:
|
||||||
|
- vlan-id: 1000
|
||||||
|
tenant-id: 1
|
||||||
@ -0,0 +1,56 @@
|
|||||||
|
%YAML 1.1
|
||||||
|
---
|
||||||
|
|
||||||
|
# Suricata configuration file. In addition to the comments describing all
|
||||||
|
# options in this file, full documentation can be found at:
|
||||||
|
# https://docs.suricata.io/en/latest/configuration/suricata-yaml.html
|
||||||
|
|
||||||
|
# This configuration file was generated by Suricata 8.0.0-dev.
|
||||||
|
suricata-version: "8.0"
|
||||||
|
|
||||||
|
##
|
||||||
|
## Step 1: Inform Suricata about your network
|
||||||
|
##
|
||||||
|
|
||||||
|
vars:
|
||||||
|
# more specific is better for alert accuracy and performance
|
||||||
|
address-groups:
|
||||||
|
HOME_NET: "[192.168.0.0/16,10.0.0.0/8,172.16.0.0/12]"
|
||||||
|
#HOME_NET: "[192.168.0.0/16]"
|
||||||
|
#HOME_NET: "[10.0.0.0/8]"
|
||||||
|
#HOME_NET: "[172.16.0.0/12]"
|
||||||
|
#HOME_NET: "any"
|
||||||
|
|
||||||
|
EXTERNAL_NET: "!$HOME_NET"
|
||||||
|
#EXTERNAL_NET: "any"
|
||||||
|
|
||||||
|
HTTP_SERVERS: "$HOME_NET"
|
||||||
|
SMTP_SERVERS: "$HOME_NET"
|
||||||
|
SQL_SERVERS: "$HOME_NET"
|
||||||
|
DNS_SERVERS: "$HOME_NET"
|
||||||
|
TELNET_SERVERS: "$HOME_NET"
|
||||||
|
AIM_SERVERS: "$EXTERNAL_NET"
|
||||||
|
DC_SERVERS: "$HOME_NET"
|
||||||
|
DNP3_SERVER: "$HOME_NET"
|
||||||
|
DNP3_CLIENT: "$HOME_NET"
|
||||||
|
MODBUS_CLIENT: "$HOME_NET"
|
||||||
|
MODBUS_SERVER: "$HOME_NET"
|
||||||
|
ENIP_CLIENT: "$HOME_NET"
|
||||||
|
ENIP_SERVER: "$HOME_NET"
|
||||||
|
|
||||||
|
port-groups:
|
||||||
|
HTTP_PORTS: "80"
|
||||||
|
SHELLCODE_PORTS: "!80"
|
||||||
|
ORACLE_PORTS: 1521
|
||||||
|
SSH_PORTS: 22
|
||||||
|
DNP3_PORTS: 20000
|
||||||
|
MODBUS_PORTS: 502
|
||||||
|
FILE_DATA_PORTS: "[$HTTP_PORTS,110,143]"
|
||||||
|
FTP_PORTS: 21
|
||||||
|
GENEVE_PORTS: 6081
|
||||||
|
VXLAN_PORTS: 4789
|
||||||
|
TEREDO_PORTS: 3544
|
||||||
|
SIP_PORTS: "[5060, 5061]"
|
||||||
|
|
||||||
|
rule-files:
|
||||||
|
- suricata.rules
|
||||||
Loading…
Reference in New Issue