NAME

Ixchel::Actions::suricata_include - Generates the instance specific include for a suricata instance.

VERSION

Version 0.3.2

CLI SYNOPSIS

ixchel -a suricata_include [-i <instance>] [-d <base_dir>]

ixchel -a suricata_include [-w] [--np] [-i <instance>] [-d <base_dir>] [-E <exclude>] [-t <auto threading>] [--sna <0/1>] [--sno] [--snl <0/1>]

CODE SYNOPSIS

use Data::Dumper;

my $results=$ixchel->action(action=>'suricata_include', opts=>{np=>1, w=>1, });

print Dumper($results);

DESCRIPTION

This generates a the general purpose include for Suricata.

The include is generated by first reading in the values under .suricata.config and then if multiple instances are enabled, then .suricata.instances.$instance is merged into it. Arrays are replaced with the new array while the rest are just merged using Hash::Merge using RIGHT_PRECEDENT with the right being .suricata.instances.$instance .

If told to write it out, it will be written out to undef .suricata.config_base with the name "include.yaml" or "include-$instance.yaml" if multiple instances are in use.

AUTOMATED THREADING

Automated threading can be enabled by setting .suricata.auto_threading.enable=1, defaults to 0.

This requires lstopo to be available package hwloc on most OSes.

Most cores are used for worker-cpu-set with those excluded from it being used for management-cpu-set and receive-cpu-set. The count is per NUMA node. Non-NUMA are treated as a single node NUMA.

core count <= 16 = excluded 2
core count >  16 = excluded 3

This can be overrided by setting .suricata.auto_threading.exclude .

Will error if auto threading is enabled and exclude is greater than half the available cores.

Enabled on a system with 16 cores and a exclude of 3, will result in the below.

threading:
  cpu-affinity:
  - management-cpu-set:
      cpu:
      - 0
      - 1
      - 2
      mode: balanced
  - receive-cpu-set:
      cpu:
      - 0
      - 1
      - 2
      mode: balanced
  - worker-cpu-set:
      cpu:
      - 3
      - 4
      - 5
      - 6
      - 7
      - 8
      - 9
      - 10
      - 11
      - 12
      - 13
      - 14
      - 15
      mode: exclusive
  set-cpu-affinity: yes

AUTOMATED SENSOR-NAME

.sensor-name can be autogenerated if .suricata.auto_sensor_name.enable=1 or --sna 1 is set. For it to be generated it requires .suricata.instances.$instance.sensor-name and .suricata.config.sensor-name not be specified or --sno be used.

The base of the sensor-name is set to hostname of the device, which will be shortened, removing everything after the first . if .suricata.auto_sensor_name.full=0 or --snl 1.

If this is disabled and .suricata.instances.$instance.sensor-name and .suricata.config.sensor-name is not defined, this will error as there is no value for .sensor-name specified.

FLAGS

-w

Write the generated services to service files.

-i instance

A instance to operate on.

-d <base_dir>

Use this as the base dir instead of .suricata.config_base from the config.

-E <exclude>

Exclude per NUMA nod value.

This will override .suricata.auto_threading.exclude as well as the default.

-t <auto threading>

Auto threading enable/disable, 0/1 boolean.

This will override .suricata.auto_threading.enable as well as the default.

--sna <0/1>

Override .suricata.auto_sensor_name.enable with the specified value.

--sno

Disable using .suricata.instances.$instance.sensor-name or .suricata.config.sensor-name for the value for .sensor-name in the generated include.

This will automatically set --sna 1.

--snl <0/1>

Overrides .suricata.auto_sensor_name.full.

RESULT HASH REF

.errors :: A array of errors encountered.
.status_text :: A string description of what was done and teh results.
.ok :: Set to zero if any of the above errored.