mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2026-03-25 05:52:41 +01:00
Compare commits
53 Commits
stenoclean
...
reyesj2-15
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
a52e5d0474 | ||
|
|
1a943aefc5 | ||
|
|
eaf3f10adc | ||
|
|
84f4e460f6 | ||
|
|
88841c9814 | ||
|
|
5b2def6fdd | ||
|
|
9b6d29212d | ||
|
|
c1bff03b1c | ||
|
|
b00f113658 | ||
|
|
7dcd923ebf | ||
|
|
1fcd8a7c1a | ||
|
|
a9196348ab | ||
|
|
12dec366e0 | ||
|
|
1713f6af76 | ||
|
|
7f4adb70bd | ||
|
|
e2483e4be0 | ||
|
|
322c0b8d56 | ||
|
|
81c1d8362d | ||
|
|
d1156ee3fd | ||
|
|
18f971954b | ||
|
|
e55ac7062c | ||
|
|
c178eada22 | ||
|
|
92213e302f | ||
|
|
72193b0249 | ||
|
|
066d7106b0 | ||
|
|
589de8e361 | ||
|
|
914cd8b611 | ||
|
|
845290595e | ||
|
|
544b60d111 | ||
|
|
aa0787b0ff | ||
|
|
89f144df75 | ||
|
|
cfccbe2bed | ||
|
|
3dd9a06d67 | ||
|
|
4bfe9039ed | ||
|
|
75cddbf444 | ||
|
|
89b18341c5 | ||
|
|
90137f7093 | ||
|
|
480187b1f5 | ||
|
|
0360d4145c | ||
|
|
2bec5afcdd | ||
|
|
4539024280 | ||
|
|
398bd0c1da | ||
|
|
91759587f5 | ||
|
|
bc9841ea8c | ||
|
|
32241faf55 | ||
|
|
685e22bd68 | ||
|
|
88de779ff7 | ||
|
|
d452694c55 | ||
|
|
7fba8ac2b4 | ||
|
|
d78a5867b8 | ||
|
|
6809a40257 | ||
|
|
cea55a72c3 | ||
|
|
e38a4a21ee |
2
.github/DISCUSSION_TEMPLATE/2-4.yml
vendored
2
.github/DISCUSSION_TEMPLATE/2-4.yml
vendored
@@ -33,7 +33,7 @@ body:
|
|||||||
- 2.4.200
|
- 2.4.200
|
||||||
- 2.4.201
|
- 2.4.201
|
||||||
- 2.4.210
|
- 2.4.210
|
||||||
- 3.0.0
|
- 2.4.211
|
||||||
- Other (please provide detail below)
|
- Other (please provide detail below)
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
177
.github/DISCUSSION_TEMPLATE/3-0.yml
vendored
Normal file
177
.github/DISCUSSION_TEMPLATE/3-0.yml
vendored
Normal file
@@ -0,0 +1,177 @@
|
|||||||
|
body:
|
||||||
|
- type: markdown
|
||||||
|
attributes:
|
||||||
|
value: |
|
||||||
|
If your organization needs more immediate, enterprise grade professional support, with one-on-one virtual meetings and screensharing, contact us via our website: https://securityonion.com/support
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Version
|
||||||
|
description: Which version of Security Onion are you asking about?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- 3.0.0
|
||||||
|
- Other (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Installation Method
|
||||||
|
description: How did you install Security Onion?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- Security Onion ISO image
|
||||||
|
- Cloud image (Amazon, Azure, Google)
|
||||||
|
- Network installation on Oracle 9 (unsupported)
|
||||||
|
- Other (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Description
|
||||||
|
description: >
|
||||||
|
Is this discussion about installation, configuration, upgrading, or other?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- installation
|
||||||
|
- configuration
|
||||||
|
- upgrading
|
||||||
|
- other (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Installation Type
|
||||||
|
description: >
|
||||||
|
When you installed, did you choose Import, Eval, Standalone, Distributed, or something else?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- Import
|
||||||
|
- Eval
|
||||||
|
- Standalone
|
||||||
|
- Distributed
|
||||||
|
- other (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Location
|
||||||
|
description: >
|
||||||
|
Is this deployment in the cloud, on-prem with Internet access, or airgap?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- cloud
|
||||||
|
- on-prem with Internet access
|
||||||
|
- airgap
|
||||||
|
- other (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Hardware Specs
|
||||||
|
description: >
|
||||||
|
Does your hardware meet or exceed the minimum requirements for your installation type as shown at https://securityonion.net/docs/hardware?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- Meets minimum requirements
|
||||||
|
- Exceeds minimum requirements
|
||||||
|
- Does not meet minimum requirements
|
||||||
|
- other (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: CPU
|
||||||
|
description: How many CPU cores do you have?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: RAM
|
||||||
|
description: How much RAM do you have?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Storage for /
|
||||||
|
description: How much storage do you have for the / partition?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: input
|
||||||
|
attributes:
|
||||||
|
label: Storage for /nsm
|
||||||
|
description: How much storage do you have for the /nsm partition?
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Network Traffic Collection
|
||||||
|
description: >
|
||||||
|
Are you collecting network traffic from a tap or span port?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- tap
|
||||||
|
- span port
|
||||||
|
- other (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Network Traffic Speeds
|
||||||
|
description: >
|
||||||
|
How much network traffic are you monitoring?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- Less than 1Gbps
|
||||||
|
- 1Gbps to 10Gbps
|
||||||
|
- more than 10Gbps
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Status
|
||||||
|
description: >
|
||||||
|
Does SOC Grid show all services on all nodes as running OK?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- Yes, all services on all nodes are running OK
|
||||||
|
- No, one or more services are failed (please provide detail below)
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Salt Status
|
||||||
|
description: >
|
||||||
|
Do you get any failures when you run "sudo salt-call state.highstate"?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- Yes, there are salt failures (please provide detail below)
|
||||||
|
- No, there are no failures
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: dropdown
|
||||||
|
attributes:
|
||||||
|
label: Logs
|
||||||
|
description: >
|
||||||
|
Are there any additional clues in /opt/so/log/?
|
||||||
|
options:
|
||||||
|
-
|
||||||
|
- Yes, there are additional clues in /opt/so/log/ (please provide detail below)
|
||||||
|
- No, there are no additional clues
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: textarea
|
||||||
|
attributes:
|
||||||
|
label: Detail
|
||||||
|
description: Please read our discussion guidelines at https://github.com/Security-Onion-Solutions/securityonion/discussions/1720 and then provide detailed information to help us help you.
|
||||||
|
placeholder: |-
|
||||||
|
STOP! Before typing, please read our discussion guidelines at https://github.com/Security-Onion-Solutions/securityonion/discussions/1720 in their entirety!
|
||||||
|
|
||||||
|
If your organization needs more immediate, enterprise grade professional support, with one-on-one virtual meetings and screensharing, contact us via our website: https://securityonion.com/support
|
||||||
|
validations:
|
||||||
|
required: true
|
||||||
|
- type: checkboxes
|
||||||
|
attributes:
|
||||||
|
label: Guidelines
|
||||||
|
options:
|
||||||
|
- label: I have read the discussion guidelines at https://github.com/Security-Onion-Solutions/securityonion/discussions/1720 and assert that I have followed the guidelines.
|
||||||
|
required: true
|
||||||
@@ -8,5 +8,12 @@
|
|||||||
"base": "172.17.0.0/24",
|
"base": "172.17.0.0/24",
|
||||||
"size": 24
|
"size": 24
|
||||||
}
|
}
|
||||||
]
|
],
|
||||||
|
"default-ulimits": {
|
||||||
|
"nofile": {
|
||||||
|
"Name": "nofile",
|
||||||
|
"Soft": 1048576,
|
||||||
|
"Hard": 1048576
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -550,6 +550,22 @@ retry() {
|
|||||||
return $exitcode
|
return $exitcode
|
||||||
}
|
}
|
||||||
|
|
||||||
|
rollover_index() {
|
||||||
|
idx=$1
|
||||||
|
exists=$(so-elasticsearch-query $idx -o /dev/null -w "%{http_code}")
|
||||||
|
if [[ $exists -eq 200 ]]; then
|
||||||
|
rollover=$(so-elasticsearch-query $idx/_rollover -o /dev/null -w "%{http_code}" -XPOST)
|
||||||
|
|
||||||
|
if [[ $rollover -eq 200 ]]; then
|
||||||
|
echo "Successfully triggered rollover for $idx..."
|
||||||
|
else
|
||||||
|
echo "Could not trigger rollover for $idx..."
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Could not find index $idx..."
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
run_check_net_err() {
|
run_check_net_err() {
|
||||||
local cmd=$1
|
local cmd=$1
|
||||||
local err_msg=${2:-"Unknown error occured, please check /root/$WHATWOULDYOUSAYYAHDOHERE.log for details."} # Really need to rename that variable
|
local err_msg=${2:-"Unknown error occured, please check /root/$WHATWOULDYOUSAYYAHDOHERE.log for details."} # Really need to rename that variable
|
||||||
|
|||||||
@@ -117,7 +117,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- so-case*
|
- so-case*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -129,8 +129,6 @@ elasticsearch:
|
|||||||
match_mapping_type: string
|
match_mapping_type: string
|
||||||
settings:
|
settings:
|
||||||
index:
|
index:
|
||||||
lifecycle:
|
|
||||||
name: so-case-logs
|
|
||||||
mapping:
|
mapping:
|
||||||
total_fields:
|
total_fields:
|
||||||
limit: 1500
|
limit: 1500
|
||||||
@@ -141,14 +139,7 @@ elasticsearch:
|
|||||||
sort:
|
sort:
|
||||||
field: '@timestamp'
|
field: '@timestamp'
|
||||||
order: desc
|
order: desc
|
||||||
policy:
|
|
||||||
phases:
|
|
||||||
hot:
|
|
||||||
actions: {}
|
|
||||||
min_age: 0ms
|
|
||||||
so-common:
|
so-common:
|
||||||
close: 30
|
|
||||||
delete: 365
|
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
composed_of:
|
composed_of:
|
||||||
@@ -212,7 +203,9 @@ elasticsearch:
|
|||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
- winlog-mappings
|
- winlog-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-*-so*
|
- logs-*-so*
|
||||||
@@ -272,7 +265,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- so-detection*
|
- so-detection*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -284,8 +277,6 @@ elasticsearch:
|
|||||||
match_mapping_type: string
|
match_mapping_type: string
|
||||||
settings:
|
settings:
|
||||||
index:
|
index:
|
||||||
lifecycle:
|
|
||||||
name: so-detection-logs
|
|
||||||
mapping:
|
mapping:
|
||||||
total_fields:
|
total_fields:
|
||||||
limit: 1500
|
limit: 1500
|
||||||
@@ -296,11 +287,6 @@ elasticsearch:
|
|||||||
sort:
|
sort:
|
||||||
field: '@timestamp'
|
field: '@timestamp'
|
||||||
order: desc
|
order: desc
|
||||||
policy:
|
|
||||||
phases:
|
|
||||||
hot:
|
|
||||||
actions: {}
|
|
||||||
min_age: 0ms
|
|
||||||
sos-backup:
|
sos-backup:
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
@@ -460,7 +446,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- endgame*
|
- endgame*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -508,8 +494,6 @@ elasticsearch:
|
|||||||
priority: 50
|
priority: 50
|
||||||
min_age: 30d
|
min_age: 30d
|
||||||
so-idh:
|
so-idh:
|
||||||
close: 30
|
|
||||||
delete: 365
|
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
composed_of:
|
composed_of:
|
||||||
@@ -566,8 +550,8 @@ elasticsearch:
|
|||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- so-idh-*
|
- logs-idh-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -677,11 +661,13 @@ elasticsearch:
|
|||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
- winlog-mappings
|
- winlog-mappings
|
||||||
- hash-mappings
|
- hash-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-import-so*
|
- logs-import-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -736,7 +722,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- so-ip*
|
- so-ip*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -751,19 +737,12 @@ elasticsearch:
|
|||||||
mapping:
|
mapping:
|
||||||
total_fields:
|
total_fields:
|
||||||
limit: 1500
|
limit: 1500
|
||||||
lifecycle:
|
|
||||||
name: so-ip-mappings-logs
|
|
||||||
number_of_replicas: 0
|
number_of_replicas: 0
|
||||||
number_of_shards: 1
|
number_of_shards: 1
|
||||||
refresh_interval: 30s
|
refresh_interval: 30s
|
||||||
sort:
|
sort:
|
||||||
field: '@timestamp'
|
field: '@timestamp'
|
||||||
order: desc
|
order: desc
|
||||||
policy:
|
|
||||||
phases:
|
|
||||||
hot:
|
|
||||||
actions: {}
|
|
||||||
min_age: 0ms
|
|
||||||
so-items:
|
so-items:
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
@@ -772,7 +751,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- .items-default-**
|
- .items-default-**
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -851,8 +830,6 @@ elasticsearch:
|
|||||||
priority: 50
|
priority: 50
|
||||||
min_age: 30d
|
min_age: 30d
|
||||||
so-kratos:
|
so-kratos:
|
||||||
close: 30
|
|
||||||
delete: 365
|
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
composed_of:
|
composed_of:
|
||||||
@@ -873,7 +850,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-kratos-so*
|
- logs-kratos-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -921,8 +898,6 @@ elasticsearch:
|
|||||||
priority: 50
|
priority: 50
|
||||||
min_age: 30d
|
min_age: 30d
|
||||||
so-hydra:
|
so-hydra:
|
||||||
close: 30
|
|
||||||
delete: 365
|
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
composed_of:
|
composed_of:
|
||||||
@@ -983,7 +958,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-hydra-so*
|
- logs-hydra-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -1038,7 +1013,7 @@ elasticsearch:
|
|||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- .lists-default-**
|
- .lists-default-**
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -1524,6 +1499,9 @@ elasticsearch:
|
|||||||
- so-fleet_integrations.ip_mappings-1
|
- so-fleet_integrations.ip_mappings-1
|
||||||
- so-fleet_globals-1
|
- so-fleet_globals-1
|
||||||
- so-fleet_agent_id_verification-1
|
- so-fleet_agent_id_verification-1
|
||||||
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates:
|
ignore_missing_component_templates:
|
||||||
- logs-elastic_agent.cloudbeat@custom
|
- logs-elastic_agent.cloudbeat@custom
|
||||||
index_patterns:
|
index_patterns:
|
||||||
@@ -1759,6 +1737,9 @@ elasticsearch:
|
|||||||
- so-fleet_integrations.ip_mappings-1
|
- so-fleet_integrations.ip_mappings-1
|
||||||
- so-fleet_globals-1
|
- so-fleet_globals-1
|
||||||
- so-fleet_agent_id_verification-1
|
- so-fleet_agent_id_verification-1
|
||||||
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates:
|
ignore_missing_component_templates:
|
||||||
- logs-elastic_agent.heartbeat@custom
|
- logs-elastic_agent.heartbeat@custom
|
||||||
index_patterns:
|
index_patterns:
|
||||||
@@ -3018,8 +2999,6 @@ elasticsearch:
|
|||||||
priority: 50
|
priority: 50
|
||||||
min_age: 30d
|
min_age: 30d
|
||||||
so-logs-soc:
|
so-logs-soc:
|
||||||
close: 30
|
|
||||||
delete: 365
|
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
composed_of:
|
composed_of:
|
||||||
@@ -3074,11 +3053,13 @@ elasticsearch:
|
|||||||
- dtc-user_agent-mappings
|
- dtc-user_agent-mappings
|
||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-soc-so*
|
- logs-soc-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -3668,10 +3649,13 @@ elasticsearch:
|
|||||||
- vulnerability-mappings
|
- vulnerability-mappings
|
||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-logstash-default*
|
- logs-logstash-default*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -3971,8 +3955,8 @@ elasticsearch:
|
|||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-redis-default*
|
- logs-redis.log*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -4083,11 +4067,13 @@ elasticsearch:
|
|||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
- hash-mappings
|
- hash-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-strelka-so*
|
- logs-strelka-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -4197,11 +4183,13 @@ elasticsearch:
|
|||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
- hash-mappings
|
- hash-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-suricata-so*
|
- logs-suricata-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -4311,11 +4299,13 @@ elasticsearch:
|
|||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
- hash-mappings
|
- hash-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-suricata.alerts-*
|
- logs-suricata.alerts-*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -4425,11 +4415,13 @@ elasticsearch:
|
|||||||
- vulnerability-mappings
|
- vulnerability-mappings
|
||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-syslog-so*
|
- logs-syslog-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
@@ -4541,11 +4533,13 @@ elasticsearch:
|
|||||||
- common-settings
|
- common-settings
|
||||||
- common-dynamic-mappings
|
- common-dynamic-mappings
|
||||||
- hash-mappings
|
- hash-mappings
|
||||||
data_stream: {}
|
data_stream:
|
||||||
|
allow_custom_routing: false
|
||||||
|
hidden: false
|
||||||
ignore_missing_component_templates: []
|
ignore_missing_component_templates: []
|
||||||
index_patterns:
|
index_patterns:
|
||||||
- logs-zeek-so*
|
- logs-zeek-so*
|
||||||
priority: 500
|
priority: 501
|
||||||
template:
|
template:
|
||||||
mappings:
|
mappings:
|
||||||
date_detection: false
|
date_detection: false
|
||||||
|
|||||||
@@ -462,19 +462,14 @@ function add_sensor_to_minion() {
|
|||||||
echo " lb_procs: '$CORECOUNT'"
|
echo " lb_procs: '$CORECOUNT'"
|
||||||
echo "suricata:"
|
echo "suricata:"
|
||||||
echo " enabled: True "
|
echo " enabled: True "
|
||||||
|
echo " pcap:"
|
||||||
|
echo " enabled: True"
|
||||||
if [[ $is_pcaplimit ]]; then
|
if [[ $is_pcaplimit ]]; then
|
||||||
echo " pcap:"
|
|
||||||
echo " maxsize: $MAX_PCAP_SPACE"
|
echo " maxsize: $MAX_PCAP_SPACE"
|
||||||
fi
|
fi
|
||||||
echo " config:"
|
echo " config:"
|
||||||
echo " af-packet:"
|
echo " af-packet:"
|
||||||
echo " threads: '$CORECOUNT'"
|
echo " threads: '$CORECOUNT'"
|
||||||
echo "pcap:"
|
|
||||||
echo " enabled: True"
|
|
||||||
if [[ $is_pcaplimit ]]; then
|
|
||||||
echo " config:"
|
|
||||||
echo " diskfreepercentage: $DFREEPERCENT"
|
|
||||||
fi
|
|
||||||
echo " "
|
echo " "
|
||||||
} >> $PILLARFILE
|
} >> $PILLARFILE
|
||||||
if [ $? -ne 0 ]; then
|
if [ $? -ne 0 ]; then
|
||||||
|
|||||||
@@ -256,7 +256,7 @@ def replacelistobject(args):
|
|||||||
def addKey(content, key, value):
|
def addKey(content, key, value):
|
||||||
pieces = key.split(".", 1)
|
pieces = key.split(".", 1)
|
||||||
if len(pieces) > 1:
|
if len(pieces) > 1:
|
||||||
if not pieces[0] in content:
|
if pieces[0] not in content or content[pieces[0]] is None:
|
||||||
content[pieces[0]] = {}
|
content[pieces[0]] = {}
|
||||||
addKey(content[pieces[0]], pieces[1], value)
|
addKey(content[pieces[0]], pieces[1], value)
|
||||||
elif key in content:
|
elif key in content:
|
||||||
@@ -346,7 +346,12 @@ def get(args):
|
|||||||
print(f"Key '{key}' not found by so-yaml.py", file=sys.stderr)
|
print(f"Key '{key}' not found by so-yaml.py", file=sys.stderr)
|
||||||
return 2
|
return 2
|
||||||
|
|
||||||
print(yaml.safe_dump(output))
|
if isinstance(output, bool):
|
||||||
|
print(str(output).lower())
|
||||||
|
elif isinstance(output, (dict, list)):
|
||||||
|
print(yaml.safe_dump(output).strip())
|
||||||
|
else:
|
||||||
|
print(output)
|
||||||
return 0
|
return 0
|
||||||
|
|
||||||
|
|
||||||
|
|||||||
@@ -393,7 +393,7 @@ class TestRemove(unittest.TestCase):
|
|||||||
|
|
||||||
result = soyaml.get([filename, "key1.child2.deep1"])
|
result = soyaml.get([filename, "key1.child2.deep1"])
|
||||||
self.assertEqual(result, 0)
|
self.assertEqual(result, 0)
|
||||||
self.assertIn("45\n...", mock_stdout.getvalue())
|
self.assertEqual("45\n", mock_stdout.getvalue())
|
||||||
|
|
||||||
def test_get_str(self):
|
def test_get_str(self):
|
||||||
with patch('sys.stdout', new=StringIO()) as mock_stdout:
|
with patch('sys.stdout', new=StringIO()) as mock_stdout:
|
||||||
@@ -404,7 +404,18 @@ class TestRemove(unittest.TestCase):
|
|||||||
|
|
||||||
result = soyaml.get([filename, "key1.child2.deep1"])
|
result = soyaml.get([filename, "key1.child2.deep1"])
|
||||||
self.assertEqual(result, 0)
|
self.assertEqual(result, 0)
|
||||||
self.assertIn("hello\n...", mock_stdout.getvalue())
|
self.assertEqual("hello\n", mock_stdout.getvalue())
|
||||||
|
|
||||||
|
def test_get_bool(self):
|
||||||
|
with patch('sys.stdout', new=StringIO()) as mock_stdout:
|
||||||
|
filename = "/tmp/so-yaml_test-get.yaml"
|
||||||
|
file = open(filename, "w")
|
||||||
|
file.write("{key1: { child1: 123, child2: { deep1: 45 } }, key2: false, key3: [e,f,g]}")
|
||||||
|
file.close()
|
||||||
|
|
||||||
|
result = soyaml.get([filename, "key2"])
|
||||||
|
self.assertEqual(result, 0)
|
||||||
|
self.assertEqual("false\n", mock_stdout.getvalue())
|
||||||
|
|
||||||
def test_get_list(self):
|
def test_get_list(self):
|
||||||
with patch('sys.stdout', new=StringIO()) as mock_stdout:
|
with patch('sys.stdout', new=StringIO()) as mock_stdout:
|
||||||
|
|||||||
File diff suppressed because it is too large
Load Diff
@@ -387,15 +387,13 @@ http {
|
|||||||
error_page 429 = @error429;
|
error_page 429 = @error429;
|
||||||
|
|
||||||
location @error401 {
|
location @error401 {
|
||||||
if ($request_uri ~* (^/connect/.*|^/oauth2/.*)) {
|
if ($request_uri ~* (^/api/.*|^/connect/.*|^/oauth2/.*)) {
|
||||||
return 401;
|
return 401;
|
||||||
}
|
}
|
||||||
|
|
||||||
if ($request_uri ~* ^/(?!(^/api/.*))) {
|
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
||||||
add_header Strict-Transport-Security "max-age=31536000; includeSubDomains";
|
|
||||||
}
|
|
||||||
|
|
||||||
if ($request_uri ~* ^/(?!(api/|login|auth|oauth2|$))) {
|
if ($request_uri ~* ^/(?!(login|auth|oauth2|$))) {
|
||||||
add_header Set-Cookie "AUTH_REDIRECT=$request_uri;Path=/;Max-Age=14400";
|
add_header Set-Cookie "AUTH_REDIRECT=$request_uri;Path=/;Max-Age=14400";
|
||||||
}
|
}
|
||||||
return 302 /auth/self-service/login/browser;
|
return 302 /auth/self-service/login/browser;
|
||||||
|
|||||||
@@ -29,7 +29,11 @@ sool9_{{host}}:
|
|||||||
hypervisor_host: {{host ~ "_" ~ role}}
|
hypervisor_host: {{host ~ "_" ~ role}}
|
||||||
preflight_cmds:
|
preflight_cmds:
|
||||||
- |
|
- |
|
||||||
tee -a /etc/hosts <<< "{{ MANAGERIP }} {{ MANAGERHOSTNAME }}"
|
{%- set hostnames = [MANAGERHOSTNAME] %}
|
||||||
|
{%- if not (URL_BASE | ipaddr) and URL_BASE != MANAGERHOSTNAME %}
|
||||||
|
{%- do hostnames.append(URL_BASE) %}
|
||||||
|
{%- endif %}
|
||||||
|
tee -a /etc/hosts <<< "{{ MANAGERIP }} {{ hostnames | join(' ') }}"
|
||||||
- |
|
- |
|
||||||
timeout 600 bash -c 'trap "echo \"Preflight Check: Failed to establish repo connectivity\"; exit 1" TERM; \
|
timeout 600 bash -c 'trap "echo \"Preflight Check: Failed to establish repo connectivity\"; exit 1" TERM; \
|
||||||
while ! dnf makecache --repoid=securityonion >/dev/null 2>&1; do echo "Preflight Check: Waiting for repo connectivity..."; \
|
while ! dnf makecache --repoid=securityonion >/dev/null 2>&1; do echo "Preflight Check: Waiting for repo connectivity..."; \
|
||||||
|
|||||||
@@ -14,6 +14,7 @@
|
|||||||
{% if 'vrt' in salt['pillar.get']('features', []) %}
|
{% if 'vrt' in salt['pillar.get']('features', []) %}
|
||||||
{% set HYPERVISORS = salt['pillar.get']('hypervisor:nodes', {} ) %}
|
{% set HYPERVISORS = salt['pillar.get']('hypervisor:nodes', {} ) %}
|
||||||
{% from 'salt/map.jinja' import SALTVERSION %}
|
{% from 'salt/map.jinja' import SALTVERSION %}
|
||||||
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
|
||||||
{% if HYPERVISORS %}
|
{% if HYPERVISORS %}
|
||||||
cloud_providers:
|
cloud_providers:
|
||||||
@@ -34,6 +35,7 @@ cloud_profiles:
|
|||||||
MANAGERHOSTNAME: {{ grains.host }}
|
MANAGERHOSTNAME: {{ grains.host }}
|
||||||
MANAGERIP: {{ pillar.host.mainip }}
|
MANAGERIP: {{ pillar.host.mainip }}
|
||||||
SALTVERSION: {{ SALTVERSION }}
|
SALTVERSION: {{ SALTVERSION }}
|
||||||
|
URL_BASE: {{ GLOBALS.url_base }}
|
||||||
- template: jinja
|
- template: jinja
|
||||||
- makedirs: True
|
- makedirs: True
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|||||||
@@ -805,11 +805,6 @@ def process_vm_creation(hypervisor_path: str, vm_config: dict) -> None:
|
|||||||
mark_invalid_hardware(hypervisor_path, vm_name, vm_config,
|
mark_invalid_hardware(hypervisor_path, vm_name, vm_config,
|
||||||
{'nsm_size': 'Invalid nsm_size: must be positive integer'})
|
{'nsm_size': 'Invalid nsm_size: must be positive integer'})
|
||||||
return
|
return
|
||||||
if size > 10000: # 10TB reasonable maximum
|
|
||||||
log.error("VM: %s - nsm_size %dGB exceeds reasonable maximum (10000GB)", vm_name, size)
|
|
||||||
mark_invalid_hardware(hypervisor_path, vm_name, vm_config,
|
|
||||||
{'nsm_size': f'Invalid nsm_size: {size}GB exceeds maximum (10000GB)'})
|
|
||||||
return
|
|
||||||
log.debug("VM: %s - nsm_size validated: %dGB", vm_name, size)
|
log.debug("VM: %s - nsm_size validated: %dGB", vm_name, size)
|
||||||
except (ValueError, TypeError) as e:
|
except (ValueError, TypeError) as e:
|
||||||
log.error("VM: %s - nsm_size must be a valid integer, got: %s", vm_name, vm_config.get('nsm_size'))
|
log.error("VM: %s - nsm_size must be a valid integer, got: %s", vm_name, vm_config.get('nsm_size'))
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
suricata:
|
suricata:
|
||||||
enabled: False
|
enabled: False
|
||||||
pcap:
|
pcap:
|
||||||
|
enabled: "no"
|
||||||
filesize: 1000mb
|
filesize: 1000mb
|
||||||
maxsize: 25
|
maxsize: 25
|
||||||
compression: "none"
|
compression: "none"
|
||||||
@@ -141,8 +142,6 @@ suricata:
|
|||||||
enabled: "no"
|
enabled: "no"
|
||||||
tls-store:
|
tls-store:
|
||||||
enabled: "no"
|
enabled: "no"
|
||||||
pcap-log:
|
|
||||||
enabled: "no"
|
|
||||||
alert-debug:
|
alert-debug:
|
||||||
enabled: "no"
|
enabled: "no"
|
||||||
alert-prelude:
|
alert-prelude:
|
||||||
|
|||||||
@@ -11,13 +11,18 @@
|
|||||||
{# before we change outputs back to list, enable pcap-log if suricata is the pcapengine #}
|
{# before we change outputs back to list, enable pcap-log if suricata is the pcapengine #}
|
||||||
{% if GLOBALS.pcap_engine in ["SURICATA"] %}
|
{% if GLOBALS.pcap_engine in ["SURICATA"] %}
|
||||||
|
|
||||||
|
{# initialize pcap-log in config.outputs since we dont put it in defaults #}
|
||||||
|
{% if 'pcap-log' not in SURICATAMERGED.config.outputs %}
|
||||||
|
{% do SURICATAMERGED.config.outputs.update({'pcap-log': {}}) %}
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
{% from 'bpf/pcap.map.jinja' import PCAPBPF, PCAP_BPF_STATUS %}
|
{% from 'bpf/pcap.map.jinja' import PCAPBPF, PCAP_BPF_STATUS %}
|
||||||
{% if PCAPBPF and PCAP_BPF_STATUS %}
|
{% if PCAPBPF and PCAP_BPF_STATUS %}
|
||||||
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'bpf-filter': PCAPBPF|join(" ")}) %}
|
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'bpf-filter': PCAPBPF|join(" ")}) %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'enabled': 'yes'}) %}
|
|
||||||
{# move the items in suricata.pcap into suricata.config.outputs.pcap-log. these items were placed under suricata.config for ease of access in SOC #}
|
{# move the items in suricata.pcap into suricata.config.outputs.pcap-log. these items were placed under suricata.config for ease of access in SOC #}
|
||||||
|
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'enabled': SURICATAMERGED.pcap.enabled}) %}
|
||||||
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'compression': SURICATAMERGED.pcap.compression}) %}
|
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'compression': SURICATAMERGED.pcap.compression}) %}
|
||||||
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'lz4-checksum': SURICATAMERGED.pcap['lz4-checksum']}) %}
|
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'lz4-checksum': SURICATAMERGED.pcap['lz4-checksum']}) %}
|
||||||
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'lz4-level': SURICATAMERGED.pcap['lz4-level']}) %}
|
{% do SURICATAMERGED.config.outputs['pcap-log'].update({'lz4-level': SURICATAMERGED.pcap['lz4-level']}) %}
|
||||||
|
|||||||
@@ -22,6 +22,10 @@ suricata:
|
|||||||
title: Classifications
|
title: Classifications
|
||||||
helpLink: suricata.html
|
helpLink: suricata.html
|
||||||
pcap:
|
pcap:
|
||||||
|
enabled:
|
||||||
|
description: Enables or disables the Suricata packet recording process.
|
||||||
|
forcedType: bool
|
||||||
|
helpLink: suricata.html
|
||||||
filesize:
|
filesize:
|
||||||
description: Maximum file size for individual PCAP files written by Suricata. Increasing this number could improve write performance at the expense of pcap retrieval time.
|
description: Maximum file size for individual PCAP files written by Suricata. Increasing this number could improve write performance at the expense of pcap retrieval time.
|
||||||
advanced: True
|
advanced: True
|
||||||
@@ -209,12 +213,6 @@ suricata:
|
|||||||
header:
|
header:
|
||||||
description: Header name where the actual IP address will be reported.
|
description: Header name where the actual IP address will be reported.
|
||||||
helpLink: suricata.html
|
helpLink: suricata.html
|
||||||
pcap-log:
|
|
||||||
enabled:
|
|
||||||
description: This value is ignored by SO. pcapengine in globals takes precedence.
|
|
||||||
readonly: True
|
|
||||||
helpLink: suricata.html
|
|
||||||
advanced: True
|
|
||||||
asn1-max-frames:
|
asn1-max-frames:
|
||||||
description: Maximum nuber of asn1 frames to decode.
|
description: Maximum nuber of asn1 frames to decode.
|
||||||
helpLink: suricata.html
|
helpLink: suricata.html
|
||||||
|
|||||||
Reference in New Issue
Block a user