Compare commits

..
Author SHA1 Message Date
Josh Brower 466e959340 Merge pull request #16335 from Security-Onion-Solutions/esql-default-query
Refactor correlation template
2026-10-19 13:05:55 -04:00
defensivedepth d2251d0cbc Refactor correlation template 2026-10-19 12:55:51 -04:00
coreyogburn 78013aa5bc Merge pull request #16333 from Security-Onion-Solutions/cogburn/automation-turn-timeout
Automation Turn Timeout
2026-10-15 15:12:52 -06:00
Corey Ogburn 69b2cb2b02 Automation Turn Timeout
Simplified to turnTimeoutSeconds as it sits on automationSettings and doesn't need to stutter.
2026-10-15 13:06:09 -06:00
Mike Reeves c13085ba71 Merge pull request #16332 from Security-Onion-Solutions/TOoSmOotH-patch-6
Change readonly to readonlyUi in YAML configuration
2026-10-15 11:44:49 -04:00
Mike Reeves da25083837 Change readonly to readonlyUi in YAML configuration 2026-10-15 11:39:59 -04:00
Mike Reeves 76fb1cc479 Merge pull request #16331 from Security-Onion-Solutions/TOoSmOotH-patch-5
Add readonly attribute to earliest alert time field
2026-10-15 11:19:58 -04:00
Mike Reeves cfb8992a92 Add readonly attribute to earliest alert time field 2026-10-15 11:16:48 -04:00
Josh Patterson 7121531336 Merge pull request #16328 from Security-Onion-Solutions/fix/socqeurymerge
combine default and alerts queries added via pillar
2026-10-14 11:13:39 -04:00
Josh Patterson ff2b46b73e combine default and alerts queries added via pillar
pillar.get replaces lists, so once alerts queries are saved to pillar
from the SOC config UI, queries added to defaults later (e.g. the
licensed Group By Assessment, Name) never reach soc.json. Merge them by
name the same way availableModels are merged by id: pillar order and
edits are kept, and default queries missing from pillar are appended.
2026-10-14 09:19:16 -04:00
Mike Reeves b158a38099 Merge pull request #16323 from Security-Onion-Solutions/mreeves/alert-triage-notify-skill
Remove the Notifier agent mapping
2026-10-13 17:45:22 -04:00
Mike Reeves 26f5d07435 Remove the Notifier agent mapping
AlertTriage now sends its own notification through the Notify skill, so the
Notifier agent no longer exists in SOC.
2026-10-13 17:35:22 -04:00
Mike Reeves 747abeed79 Merge pull request #16302 from Security-Onion-Solutions/mreeves/alert-assessment-groupby
Add a licensed Group By Assessment, Name alerts query
2026-10-13 17:16:48 -04:00
Mike Reeves 1bcf80dd10 Group by assessment without a missing bucket
The assessment is a number, and SOC's missing bucket only works on keyword
fields, so the * made Elasticsearch fail parsing "__missing__" as a long.
Untriaged alerts now drop out of this view.
2026-10-13 17:11:49 -04:00
Josh Patterson e7d7676a90 Merge pull request #16322 from Security-Onion-Solutions/fix/socmerge
combine default and availableModels added via pillar
2026-10-13 16:27:57 -04:00
Josh Patterson 2b6566d33b combine default and availableModels added via pillar 2026-10-13 13:52:30 -04:00
Jorge Reyes f5641647ab Merge pull request #16319 from Security-Onion-Solutions/reyesj2-patch-1
remap enterprisesearch integration components
2026-10-13 09:17:30 -05:00
Jorge Reyes fc5e66e913 remap enterprisesearch integration components 2026-10-13 09:10:36 -05:00
Jason Ertel 5f4fc58416 Merge pull request #16317 from Security-Onion-Solutions/jertel/wip
eval to use Suricata for metadata
2026-10-10 11:04:49 -04:00
Jason Ertel 84b2b19698 eval to use Suricata for metadata 2026-10-10 11:02:35 -04:00
Josh Brower 7214f8770c Merge pull request #16269 from Security-Onion-Solutions/esql-correlations
Initial Correlations support
2026-10-09 15:53:10 -04:00
Mike Reeves 0a0062b9ab Merge pull request #16315 from Security-Onion-Solutions/mreeves/soai-haiku
Add Claude Haiku to the SOAI assistant models
2026-10-09 13:51:46 -04:00
Mike Reeves 5d88755429 Increase contextLimitSmall to 1000000 2026-10-09 13:14:26 -04:00
Mike Reeves ecc75ef65a Merge branch '3/dev' into mreeves/soai-haiku 2026-10-09 13:13:45 -04:00
Mike Reeves 037f6d3d4f Update agent mapping for Investigator and DetectionEngineer 2026-10-09 13:09:09 -04:00
Mike Reeves 0cc7e36af5 Reduce contextLimitSmall from 1000000 to 100000 2026-10-09 12:47:46 -04:00
Mike Reeves 946e904434 Merge pull request #16301 from Security-Onion-Solutions/mreeves/alert-triage-agent
Map the AlertTriage and Notifier agents to a model
2026-10-09 12:39:24 -04:00
Mike Reeves b17b596a64 Add Claude Haiku to the SOAI assistant models 2026-10-09 10:11:25 -04:00
Matthew Wright 603949002b Merge pull request #16312 from Security-Onion-Solutions/mwright/md-img-toggle
Add allowExternalMarkdownImages SOC Setting
2026-10-08 12:38:45 -04:00
Matthew Wright de63f95ab0 turn off advanced 2026-10-08 12:38:13 -04:00
Matthew Wright a1b76650fb add external image markdown toggle 2026-10-08 12:10:30 -04:00
Jorge Reyes 0cd8e53832 Merge pull request #16311 from Security-Onion-Solutions/reyesj2-patch-4
regenerate elastic agent installer
2026-10-08 10:13:30 -05:00
reyesj2 0210ccfcc3 elastic agent 9.4.8 regenerate installer 2026-10-08 09:54:41 -05:00
reyesj2 517076330a stg profile update - breaks so-elastic-agent / so-elastic-fleet containers 2026-10-08 09:54:35 -05:00
Jason Ertel ad249782fc Merge pull request #16310 from Security-Onion-Solutions/jertel/wip
new destination timeout annotation; fix fp
2026-10-08 10:48:26 -04:00
Jason Ertel 2eab084358 new destination timeout annotation; fix fp 2026-10-08 10:46:15 -04:00
Jorge Reyes 547d2a316b Merge pull request #16306 from Security-Onion-Solutions/reyesj2/es948
ES 9.4.8
2026-10-07 16:17:52 -05:00
Jorge Reyes 1c4eef4224 Update version from 3.0.0-foxtrot to 3.4.0 2026-10-07 12:31:45 -05:00
Mike Reeves 3304aff62b Note that an oai query also needs the agentic assistant
SOC (securityonion-soc#1363) now hides a query licensed for oai unless the
assistant is enabled and agentic, so the query editor's license help says so.

Claude-Session: https://claude.ai/code/session_01SZLcwj68A2wLo3F8TGKsLP
2026-10-07 08:56:44 -04:00
Mike Reeves 7469d833d1 Add a licensed Group By Assessment, Name alerts query
Groups alerts by the AI triage assessment, keeping untriaged alerts as a
missing bucket. Query entries take an optional license feature, which SOC uses
to hide this one on grids without OnionAI, and the query editor now shows it.
2026-10-06 21:14:25 -04:00
Mike Reeves b11fc6257a Map the AlertTriage and Notifier agents to a model
SOC disables a built-in agent that has no agentMapping entry, so the new
AlertTriage agent and the Notifier it delegates to need one to run.
2026-10-06 20:43:04 -04:00
Jorge Reyes c6e42131b2 Update version from 3.4.0 to 3.0.0-foxtrot 2026-10-06 13:45:22 -05:00
reyesj2 337dddf596 ES 9.4.8 2026-10-06 13:44:52 -05:00
10 changed files with 122 additions and 39 deletions

No files matched your search

+1
View File
@@ -178,6 +178,7 @@ if [[ $EXCLUDE_FALSE_POSITIVE_ERRORS == 'Y' ]]; then
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|Missing ory_kratos_session cookie" # expected WARN log lines indicating invalid auth header
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|Static assets preprocessor only supports GET and HEAD requests" # expected WARN log lines indicating invalid auth header
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|respondError" # respondError is a function name, output via http middleware as standard request logging
EXCLUDED_ERRORS="$EXCLUDED_ERRORS|GET /kibana/" # Ignore Kibana queries with triggered words
fi
if [[ $EXCLUDE_KNOWN_ERRORS == 'Y' ]]; then
@@ -30,6 +30,8 @@
'azure_metrics.monitor': 'azure.monitor',
'azure_metrics.storage_account': 'azure.storage_account',
'azure_openai.metrics': 'azure.open_ai',
'enterprisesearch.health': 'enterprisesearch.stack_monitoring.health',
'enterprisesearch.stats': 'enterprisesearch.stack_monitoring.stats',
'kibana.cluster_actions': 'kibana.stack_monitoring.cluster_actions',
'kibana.cluster_rules': 'kibana.stack_monitoring.cluster_rules',
'kibana.node_actions': 'kibana.stack_monitoring.node_actions',
+1 -1
View File
@@ -1,7 +1,7 @@
elasticsearch:
enabled: false
esheap: '600m'
version: 9.4.5
version: 9.4.8
index_clean: true
data_retention_method: DLM
vm:
+1 -1
View File
@@ -22,7 +22,7 @@ kibana:
- default
- file
migrations:
discardCorruptObjects: "9.4.5"
discardCorruptObjects: "9.4.8"
telemetry:
enabled: False
xpack:
+11 -10
View File
@@ -1131,9 +1131,6 @@ post_to_3.2.0() {
### 3.3.0 Scripts ###
up_to_3.3.0() {
# download 9.4.5 elastic agent packages
determine_elastic_agent_upgrade
# remove existing (patched) elasticsearch index template to match integration naming change
if ! remove_elasticsearch_index_template "so-logs-sentinel_one_cloud_funnel.login" "sentinel_one_cloud_funnel.login changed to sentinel_one_cloud_funnel.logins"; then
FINAL_MESSAGE_QUEUE+=("WARNING: Unable to automatically remove the so-logs-sentinel_one_cloud_funnel.login index template. This step can be performed manually using the following command:")
@@ -1166,10 +1163,6 @@ post_to_3.3.0() {
# Recollate again since some internal DBs were excluded during 3.2.0 soup
recollate_postgres
# Generate 9.4.5 elastic agent installers
echo "Regenerating Elastic Agent Installers"
/sbin/so-elastic-agent-gen-installers
telegraf_repair
set_postversion 3.3.0
@@ -1178,6 +1171,9 @@ post_to_3.3.0() {
### 3.4.0 Scripts ###
up_to_3.4.0() {
# download 9.4.8 elastic agent packages
determine_elastic_agent_upgrade
set_soauth_range
echo "Removing so-kratos, so-hydra and so-soc so they are recreated on the soauth network."
@@ -1255,6 +1251,10 @@ valid_soauth_range() {
}
post_to_3.4.0() {
# Generate 9.4.8 elastic agent installers
echo "Regenerating Elastic Agent Installers"
/sbin/so-elastic-agent-gen-installers
for idx in "metrics-logstash.node-default" "metrics-logstash.stack_monitoring.node-default"; do
rollover_index "$idx"
done
@@ -1548,9 +1548,10 @@ verify_es_version_compatibility() {
["8.18.4"]="8.18.6 8.18.8 9.0.8"
["8.18.6"]="8.18.8 9.0.8"
["8.18.8"]="9.0.8"
["9.0.8"]="9.3.3 9.3.7 9.4.5"
["9.3.3"]="9.3.7 9.4.5"
["9.3.7"]="9.4.5"
["9.0.8"]="9.3.3 9.3.7 9.4.5 9.4.8"
["9.3.3"]="9.3.7 9.4.5 9.4.8"
["9.3.7"]="9.4.5 9.4.8"
["9.4.5"]="9.4.8"
)
# Elasticsearch MUST upgrade through these versions
+40 -22
View File
@@ -1542,8 +1542,9 @@ soc:
agentic: false
agentMapping:
Orchestrator: sonnet@SOAI
Investigator: gemma@SOAI
DetectionEngineer: gemma@SOAI
Investigator: haiku@SOAI
DetectionEngineer: haiku@SOAI
AlertTriage: haiku@SOAI
useMemory: false
useMemoryScanner: false
dontScanBefore: ""
@@ -1570,6 +1571,7 @@ soc:
tickIntervalSeconds: 60
maxConcurrentItems: 4
maxQueuedItems: 0
turnTimeoutSeconds: 300
alertTriageEpoch: "2026-09-24T00:00:00Z"
tools:
filterEventFields:
@@ -1823,6 +1825,7 @@ soc:
cacheExpirationMs: 300000
casesEnabled: true
detectionsEnabled: true
allowExternalMarkdownImages: false
inactiveTools: ['toolUnused']
exportNodeId:
tools:
@@ -2524,6 +2527,9 @@ soc:
queries:
- name: 'Group By Name, Module'
query: '* | groupby rule.name event.module* event.severity_label rule.uuid'
- name: 'Group By Assessment, Name'
query: '* | groupby event.so_alerttriage.assessment rule.name event.severity_label rule.uuid'
license: oai
- name: 'Group By Sensor, Source IP/Port, Destination IP/Port, Name'
query: '* | groupby observer.name source.ip source.port destination.ip destination.port rule.name network.community_id event.severity_label rule.uuid'
- name: 'Group By Source IP, Name'
@@ -2803,6 +2809,10 @@ soc:
# Sigma correlation rule; requires ES|QL (useEsql).
# First document: the correlation. Following documents: the rules it references.
#
# This example mirrors the shipped rule c448c9f6 (Repeated SOC Login Failures For One Account).
# Change it before enabling, or you will get two alerts for the same activity.
# To test: log out of SOC and enter a wrong password 5 times for one username.
#
# Types: event_count, value_count, temporal, value_sum, value_avg, value_median, value_percentile.
# Correlation Guide: https://sigmahq.io/docs/meta/correlations.html
# Logsources: https://sigmahq.io/docs/basics/log-sources.html
@@ -2811,46 +2821,45 @@ soc:
id: [publicId]
status: 'experimental'
description: |
Describe what the correlation finds and, importantly, why relating these
events is more meaningful than either of them alone.
Describe what the correlation finds and why relating these events is more
meaningful than any one of them alone.
Example: 5 or more failed SOC logins for one username in 10 minutes.
references:
- 'https://local.invalid'
- 'https://attack.mitre.org/techniques/T1110/001/'
author: '@SecurityOnion'
date: '[today]'
tags:
- detection.threat_hunting
- attack.technique_id
- attack.credential-access
- attack.t1110.001
correlation:
type: value_count
type: event_count # count the base rule's events...
rules:
- example_base_rule # the 'name' of the rule below
- example_base_rule # ...by the 'name' of the rule below
group-by:
- source.ip
# Xs, Xm, Xh, Xd or Xw.
timespan: 10m
- user.name # ...separately for each username
timespan: 10m # Xs, Xm, Xh
condition:
field: dns.query.name
gte: 40
gte: 5
falsepositives:
- 'Describe the benign activity that also produces this pattern'
- 'A user entering an old password after a password change'
# Placeholders: %count%, %start%, %end%, %duration%, or any field.
summary: '%count% distinct names queried by %source.ip% in %duration%'
summary: '%count% failed SOC logins for %user.name% in %duration%, from %http.request.headers.x-real-ip%'
level: 'medium' # info | low | medium | high | critical
---
title: 'Base Event'
title: 'SOC Login Failure'
# referenced by 'name' (or 'id')
name: example_base_rule
description: 'The single event that the correlation aggregates.'
description: 'One failed SOC login. Put filters here, not in the correlation.'
logsource:
category: network
service: dns
product: kratos
service: application
detection:
selection:
dns.query.name|exists: true
msg: 'Encountered self-service login error.'
condition: selection
# Carried into the alert.
fields:
- dns.query.name
- http.request.headers.x-real-ip
assistant:
enabled: false
investigationPrompt: Investigate Alert ID {socId}
@@ -2870,6 +2879,15 @@ soc:
enabled: true
adapter: SOAI
charsPerTokenEstimate: 4
- id: haiku
displayName: Claude Haiku
origin: USA
contextLimitSmall: 1000000
contextLimitLarge: 1000000
lowBalanceColorAlert: 500000
enabled: true
adapter: SOAI
charsPerTokenEstimate: 4
- id: gemma
displayName: Gemma
origin: USA
+37
View File
@@ -22,6 +22,43 @@
{% do SOCMERGED.config.server.update({'additionalCA': MANAGERMERGED.additionalCA}) %}
{% do SOCMERGED.config.server.update({'insecureSkipVerify': MANAGERMERGED.insecureSkipVerify}) %}
{# pillar.get replaces lists instead of merging them, so combine availableModels by id and alerts queries by name #}
{% set default_models = {} %}
{% for m in SOCDEFAULTS.config.server.client.assistant.availableModels %}
{% do default_models.setdefault(m.id, m) %}
{% endfor %}
{% set merged_models = [] %}
{% set merged_ids = [] %}
{% for m in SOCMERGED.config.server.client.assistant.availableModels or [] %}
{% set model = {} %}
{% do model.update(default_models.get(m.get('id'), {})) %}
{% do model.update(m) %}
{% do merged_models.append(model) %}
{% do merged_ids.append(m.get('id')) %}
{% endfor %}
{% for id, m in default_models.items() if id not in merged_ids %}
{% do merged_models.append(m) %}
{% endfor %}
{% do SOCMERGED.config.server.client.assistant.update({'availableModels': merged_models}) %}
{% set default_queries = {} %}
{% for q in SOCDEFAULTS.config.server.client.alerts.queries %}
{% do default_queries.setdefault(q.name, q) %}
{% endfor %}
{% set merged_queries = [] %}
{% set merged_names = [] %}
{% for q in SOCMERGED.config.server.client.alerts.queries or [] %}
{% set query = {} %}
{% do query.update(default_queries.get(q.get('name'), {})) %}
{% do query.update(q) %}
{% do merged_queries.append(query) %}
{% do merged_names.append(q.get('name')) %}
{% endfor %}
{% for name, q in default_queries.items() if name not in merged_names %}
{% do merged_queries.append(q) %}
{% endfor %}
{% do SOCMERGED.config.server.client.alerts.update({'queries': merged_queries}) %}
{% if not SOCMERGED.config.server.modules.postgres.host %}
{% do SOCMERGED.config.server.modules.postgres.update({'host': GLOBALS.manager}) %}
{% endif %}
+20
View File
@@ -525,6 +525,10 @@ soc:
description: Enables or disables the SOC notification module.
forcedType: bool
global: True
connectionTimeoutSeconds:
description: Duration (in seconds) to wait for a response from the remote notification endpoint host before giving up.
forcedType: int
global: True
postgres:
host:
description: Hostname or IP address of the PostgreSQL server used by SOC. Defaults to the manager hostname.
@@ -949,6 +953,9 @@ soc:
DetectionEngineer:
description: This agent manages detections and their overrides, including tuning noisy rules and authoring rule content.
global: True
AlertTriage:
description: This agent triages alerts autonomously for the Alert Triage automation, ending each run with a report and an assessment of the alert. It can send a notification but cannot acknowledge alerts or escalate to cases.
global: True
useMemory:
description: Enables the Memory system for OnionAI
global: True
@@ -1051,11 +1058,18 @@ soc:
global: True
advanced: True
forcedType: int
turnTimeoutSeconds:
description: Maximum number of seconds a single model turn of an automation's agent session may run, even while the model is still producing output. A turn that exceeds this limit is abandoned and the session is recorded as failed. Set to 0 to disable the timeout. Edit this setting via the Agent Studio.
global: True
advanced: True
forcedType: int
readonlyUi: True
alertTriageEpoch:
description: The earliest alert time the Alert Triage automation will consider. Alerts before this time are never triaged, which keeps a first run on an existing deployment from working through old history. Must be in UTC format (2026-09-24T00:00:00Z).
regex: '^(\d{4}-\d{2}-\d{2}T\d{2}:\d{2}:\d{2}(\.\d+)?Z)?$'
regexFailureMessage: Expecting date in RFC3339 format (2026-09-24T00:00:00Z)
global: True
readonlyUi: True
advanced: True
tools:
filterEventFields:
@@ -1163,6 +1177,10 @@ soc:
description: Set to true to enable the Detections module in SOC.
global: True
forcedType: bool
allowExternalMarkdownImages:
description: Set to true to let user-written Markdown, such as case descriptions and comments, load images from other servers. Loading an image sends a request to its server, so leave this disabled unless needed; Onion AI output never loads external images.
global: True
forcedType: bool
inactiveTools:
description: List of external tools to remove from the SOC UI.
global: True
@@ -1215,6 +1233,8 @@ soc:
- field: showSubtitle
label: Show Query in Dropdown.
forcedType: bool
- field: license
label: Only show on grids licensed for this feature, e.g. oai. An oai query also needs the assistant enabled and agentic. Leave blank to show everywhere.
queryToggleFilters:
description: Customize togglable query filters that apply to all queries. Exclusive toggles will invert the filter if toggled off rather than omitting the filter from the query.
global: True
+4 -4
View File
@@ -1333,8 +1333,8 @@ DISA STIG for Oracle Linux 9 V1R3.</xccdf-1.2:description>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_group_ownership_library_dirs" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_ownership_library_dirs" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_permissions_library_dirs" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_root_owned" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_sticky_bits" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_root_owned" selected="false"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_sticky_bits" selected="false"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_directory_group_ownership_var_log_audit" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_directory_ownership_var_log_audit" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_disable_ctrlaltdel_burstaction" selected="true"/>
@@ -1935,8 +1935,8 @@ standard DISA STIG for Oracle Linux 9 profile.</xccdf-1.2:description>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_group_ownership_library_dirs" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_ownership_library_dirs" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_permissions_library_dirs" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_root_owned" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_sticky_bits" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_root_owned" selected="false"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_dir_perms_world_writable_sticky_bits" selected="false"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_directory_group_ownership_var_log_audit" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_directory_ownership_var_log_audit" selected="true"/>
<xccdf-1.2:select idref="xccdf_org.ssgproject.content_rule_disable_ctrlaltdel_burstaction" selected="true"/>
+5 -1
View File
@@ -1362,7 +1362,11 @@ create_global() {
echo "global:" >> $global_pillar_file
echo " soversion: '$SOVERSION'" >> $global_pillar_file
echo " managerip: '$MAINIP'" >> $global_pillar_file
echo " mdengine: 'ZEEK'" >> $global_pillar_file
if [[ $is_eval ]] || [ "$install_type" = 'EVAL' ]; then
echo " mdengine: 'SURICATA'" >> $global_pillar_file
else
echo " mdengine: 'ZEEK'" >> $global_pillar_file
fi
echo " ids: 'Suricata'" >> $global_pillar_file
echo " url_base: '$REDIRECTIT'" >> $global_pillar_file
if [[ $is_airgap ]]; then