mirror of
https://github.com/Security-Onion-Solutions/securityonion.git
synced 2025-12-06 09:12:45 +01:00
Merge pull request #13777 from Security-Onion-Solutions/2.4/dev
2.4.110
This commit is contained in:
9
.github/DISCUSSION_TEMPLATE/2-4.yml
vendored
9
.github/DISCUSSION_TEMPLATE/2-4.yml
vendored
@@ -11,7 +11,6 @@ body:
|
|||||||
description: Which version of Security Onion 2.4.x are you asking about?
|
description: Which version of Security Onion 2.4.x are you asking about?
|
||||||
options:
|
options:
|
||||||
-
|
-
|
||||||
- 2.4 Pre-release (Beta, Release Candidate)
|
|
||||||
- 2.4.10
|
- 2.4.10
|
||||||
- 2.4.20
|
- 2.4.20
|
||||||
- 2.4.30
|
- 2.4.30
|
||||||
@@ -22,6 +21,7 @@ body:
|
|||||||
- 2.4.80
|
- 2.4.80
|
||||||
- 2.4.90
|
- 2.4.90
|
||||||
- 2.4.100
|
- 2.4.100
|
||||||
|
- 2.4.110
|
||||||
- Other (please provide detail below)
|
- Other (please provide detail below)
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
@@ -32,9 +32,10 @@ body:
|
|||||||
options:
|
options:
|
||||||
-
|
-
|
||||||
- Security Onion ISO image
|
- Security Onion ISO image
|
||||||
- Network installation on Red Hat derivative like Oracle, Rocky, Alma, etc.
|
- Cloud image (Amazon, Azure, Google)
|
||||||
- Network installation on Ubuntu
|
- Network installation on Red Hat derivative like Oracle, Rocky, Alma, etc. (unsupported)
|
||||||
- Network installation on Debian
|
- Network installation on Ubuntu (unsupported)
|
||||||
|
- Network installation on Debian (unsupported)
|
||||||
- Other (please provide detail below)
|
- Other (please provide detail below)
|
||||||
validations:
|
validations:
|
||||||
required: true
|
required: true
|
||||||
|
|||||||
@@ -1,17 +1,17 @@
|
|||||||
### 2.4.100-20240903 ISO image released on 2024/09/03
|
### 2.4.110-20241004 ISO image released on 2024/10/07
|
||||||
|
|
||||||
|
|
||||||
### Download and Verify
|
### Download and Verify
|
||||||
|
|
||||||
2.4.100-20240903 ISO image:
|
2.4.110-20241004 ISO image:
|
||||||
https://download.securityonion.net/file/securityonion/securityonion-2.4.100-20240903.iso
|
https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241004.iso
|
||||||
|
|
||||||
MD5: 856BBB4F0764C0A479D8949725FC096B
|
MD5: 1641E4AFD65DB1C218BFAD22E33909C6
|
||||||
SHA1: B3FCFB8F1031EB8AA833A90C6C5BB61328A73842
|
SHA1: 131E1115F7CA76302F72625CD80A212B91608114
|
||||||
SHA256: 0103EB9D78970396BB47CBD18DA1FFE64524F5C1C559487A1B2D293E1882B265
|
SHA256: 8598EB03E52B332EF5445520445AD205C68A99BC030F8497F6EBDE1249B8B576
|
||||||
|
|
||||||
Signature for ISO image:
|
Signature for ISO image:
|
||||||
https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.100-20240903.iso.sig
|
https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241004.iso.sig
|
||||||
|
|
||||||
Signing key:
|
Signing key:
|
||||||
https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2.4/main/KEYS
|
https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2.4/main/KEYS
|
||||||
@@ -25,22 +25,22 @@ wget https://raw.githubusercontent.com/Security-Onion-Solutions/securityonion/2.
|
|||||||
|
|
||||||
Download the signature file for the ISO:
|
Download the signature file for the ISO:
|
||||||
```
|
```
|
||||||
wget https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.100-20240903.iso.sig
|
wget https://github.com/Security-Onion-Solutions/securityonion/raw/2.4/main/sigs/securityonion-2.4.110-20241004.iso.sig
|
||||||
```
|
```
|
||||||
|
|
||||||
Download the ISO image:
|
Download the ISO image:
|
||||||
```
|
```
|
||||||
wget https://download.securityonion.net/file/securityonion/securityonion-2.4.100-20240903.iso
|
wget https://download.securityonion.net/file/securityonion/securityonion-2.4.110-20241004.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
Verify the downloaded ISO image using the signature file:
|
Verify the downloaded ISO image using the signature file:
|
||||||
```
|
```
|
||||||
gpg --verify securityonion-2.4.100-20240903.iso.sig securityonion-2.4.100-20240903.iso
|
gpg --verify securityonion-2.4.110-20241004.iso.sig securityonion-2.4.110-20241004.iso
|
||||||
```
|
```
|
||||||
|
|
||||||
The output should show "Good signature" and the Primary key fingerprint should match what's shown below:
|
The output should show "Good signature" and the Primary key fingerprint should match what's shown below:
|
||||||
```
|
```
|
||||||
gpg: Signature made Sat 31 Aug 2024 05:05:05 PM EDT using RSA key ID FE507013
|
gpg: Signature made Sat 05 Oct 2024 09:31:57 AM EDT using RSA key ID FE507013
|
||||||
gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>"
|
gpg: Good signature from "Security Onion Solutions, LLC <info@securityonionsolutions.com>"
|
||||||
gpg: WARNING: This key is not certified with a trusted signature!
|
gpg: WARNING: This key is not certified with a trusted signature!
|
||||||
gpg: There is no indication that the signature belongs to the owner.
|
gpg: There is no indication that the signature belongs to the owner.
|
||||||
|
|||||||
@@ -310,3 +310,5 @@ base:
|
|||||||
'*_desktop':
|
'*_desktop':
|
||||||
- minions.{{ grains.id }}
|
- minions.{{ grains.id }}
|
||||||
- minions.adv_{{ grains.id }}
|
- minions.adv_{{ grains.id }}
|
||||||
|
- stig.soc_stig
|
||||||
|
- soc.license
|
||||||
|
|||||||
@@ -202,7 +202,8 @@
|
|||||||
'so-desktop': [
|
'so-desktop': [
|
||||||
'ssl',
|
'ssl',
|
||||||
'docker_clean',
|
'docker_clean',
|
||||||
'telegraf'
|
'telegraf',
|
||||||
|
'stig'
|
||||||
],
|
],
|
||||||
}, grain='role') %}
|
}, grain='role') %}
|
||||||
|
|
||||||
|
|||||||
@@ -8,12 +8,6 @@
|
|||||||
# Elastic agent is not managed by salt. Because of this we must store this base information in a
|
# Elastic agent is not managed by salt. Because of this we must store this base information in a
|
||||||
# script that accompanies the soup system. Since so-common is one of those special soup files,
|
# script that accompanies the soup system. Since so-common is one of those special soup files,
|
||||||
# and since this same logic is required during installation, it's included in this file.
|
# and since this same logic is required during installation, it's included in this file.
|
||||||
ELASTIC_AGENT_TARBALL_VERSION="8.14.3"
|
|
||||||
ELASTIC_AGENT_URL="https://repo.securityonion.net/file/so-repo/prod/2.4/elasticagent/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.tar.gz"
|
|
||||||
ELASTIC_AGENT_MD5_URL="https://repo.securityonion.net/file/so-repo/prod/2.4/elasticagent/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.md5"
|
|
||||||
ELASTIC_AGENT_FILE="/nsm/elastic-fleet/artifacts/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.tar.gz"
|
|
||||||
ELASTIC_AGENT_MD5="/nsm/elastic-fleet/artifacts/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.md5"
|
|
||||||
ELASTIC_AGENT_EXPANSION_DIR=/nsm/elastic-fleet/artifacts/beats/elastic-agent
|
|
||||||
|
|
||||||
DEFAULT_SALT_DIR=/opt/so/saltstack/default
|
DEFAULT_SALT_DIR=/opt/so/saltstack/default
|
||||||
DOC_BASE_URL="https://docs.securityonion.net/en/2.4"
|
DOC_BASE_URL="https://docs.securityonion.net/en/2.4"
|
||||||
@@ -174,6 +168,46 @@ check_salt_minion_status() {
|
|||||||
return $status
|
return $status
|
||||||
}
|
}
|
||||||
|
|
||||||
|
# Compare es versions and return the highest version
|
||||||
|
compare_es_versions() {
|
||||||
|
# Save the original IFS
|
||||||
|
local OLD_IFS="$IFS"
|
||||||
|
|
||||||
|
IFS=.
|
||||||
|
local i ver1=($1) ver2=($2)
|
||||||
|
|
||||||
|
# Restore the original IFS
|
||||||
|
IFS="$OLD_IFS"
|
||||||
|
|
||||||
|
# Determine the maximum length between the two version arrays
|
||||||
|
local max_len=${#ver1[@]}
|
||||||
|
if [[ ${#ver2[@]} -gt $max_len ]]; then
|
||||||
|
max_len=${#ver2[@]}
|
||||||
|
fi
|
||||||
|
|
||||||
|
# Compare each segment of the versions
|
||||||
|
for ((i=0; i<max_len; i++)); do
|
||||||
|
# If a segment in ver1 or ver2 is missing, set it to 0
|
||||||
|
if [[ -z ${ver1[i]} ]]; then
|
||||||
|
ver1[i]=0
|
||||||
|
fi
|
||||||
|
if [[ -z ${ver2[i]} ]]; then
|
||||||
|
ver2[i]=0
|
||||||
|
fi
|
||||||
|
if ((10#${ver1[i]} > 10#${ver2[i]})); then
|
||||||
|
echo "$1"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
if ((10#${ver1[i]} < 10#${ver2[i]})); then
|
||||||
|
echo "$2"
|
||||||
|
return 0
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
|
||||||
|
echo "$1" # If versions are equal, return either
|
||||||
|
return 0
|
||||||
|
}
|
||||||
|
|
||||||
copy_new_files() {
|
copy_new_files() {
|
||||||
# Copy new files over to the salt dir
|
# Copy new files over to the salt dir
|
||||||
cd $UPDATE_DIR
|
cd $UPDATE_DIR
|
||||||
@@ -263,11 +297,6 @@ fail() {
|
|||||||
exit 1
|
exit 1
|
||||||
}
|
}
|
||||||
|
|
||||||
get_random_value() {
|
|
||||||
length=${1:-20}
|
|
||||||
head -c 5000 /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $length | head -n 1
|
|
||||||
}
|
|
||||||
|
|
||||||
get_agent_count() {
|
get_agent_count() {
|
||||||
if [ -f /opt/so/log/agents/agentstatus.log ]; then
|
if [ -f /opt/so/log/agents/agentstatus.log ]; then
|
||||||
AGENTCOUNT=$(cat /opt/so/log/agents/agentstatus.log | grep -wF active | awk '{print $2}')
|
AGENTCOUNT=$(cat /opt/so/log/agents/agentstatus.log | grep -wF active | awk '{print $2}')
|
||||||
@@ -276,6 +305,27 @@ get_agent_count() {
|
|||||||
fi
|
fi
|
||||||
}
|
}
|
||||||
|
|
||||||
|
get_elastic_agent_vars() {
|
||||||
|
local path="${1:-/opt/so/saltstack/default}"
|
||||||
|
local defaultsfile="${path}/salt/elasticsearch/defaults.yaml"
|
||||||
|
|
||||||
|
if [ -f "$defaultsfile" ]; then
|
||||||
|
ELASTIC_AGENT_TARBALL_VERSION=$(egrep " +version: " $defaultsfile | awk -F: '{print $2}' | tr -d '[:space:]')
|
||||||
|
ELASTIC_AGENT_URL="https://repo.securityonion.net/file/so-repo/prod/2.4/elasticagent/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.tar.gz"
|
||||||
|
ELASTIC_AGENT_MD5_URL="https://repo.securityonion.net/file/so-repo/prod/2.4/elasticagent/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.md5"
|
||||||
|
ELASTIC_AGENT_FILE="/nsm/elastic-fleet/artifacts/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.tar.gz"
|
||||||
|
ELASTIC_AGENT_MD5="/nsm/elastic-fleet/artifacts/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.md5"
|
||||||
|
ELASTIC_AGENT_EXPANSION_DIR=/nsm/elastic-fleet/artifacts/beats/elastic-agent
|
||||||
|
else
|
||||||
|
fail "Could not find salt/elasticsearch/defaults.yaml"
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
get_random_value() {
|
||||||
|
length=${1:-20}
|
||||||
|
head -c 5000 /dev/urandom | tr -dc 'a-zA-Z0-9' | fold -w $length | head -n 1
|
||||||
|
}
|
||||||
|
|
||||||
gpg_rpm_import() {
|
gpg_rpm_import() {
|
||||||
if [[ $is_oracle ]]; then
|
if [[ $is_oracle ]]; then
|
||||||
if [[ "$WHATWOULDYOUSAYYAHDOHERE" == "setup" ]]; then
|
if [[ "$WHATWOULDYOUSAYYAHDOHERE" == "setup" ]]; then
|
||||||
@@ -627,6 +677,8 @@ has_uppercase() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
update_elastic_agent() {
|
update_elastic_agent() {
|
||||||
|
local path="${1:-/opt/so/saltstack/default}"
|
||||||
|
get_elastic_agent_vars "$path"
|
||||||
echo "Checking if Elastic Agent update is necessary..."
|
echo "Checking if Elastic Agent update is necessary..."
|
||||||
download_and_verify "$ELASTIC_AGENT_URL" "$ELASTIC_AGENT_MD5_URL" "$ELASTIC_AGENT_FILE" "$ELASTIC_AGENT_MD5" "$ELASTIC_AGENT_EXPANSION_DIR"
|
download_and_verify "$ELASTIC_AGENT_URL" "$ELASTIC_AGENT_MD5_URL" "$ELASTIC_AGENT_FILE" "$ELASTIC_AGENT_MD5" "$ELASTIC_AGENT_EXPANSION_DIR"
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -112,6 +112,10 @@ update_docker_containers() {
|
|||||||
container_list
|
container_list
|
||||||
fi
|
fi
|
||||||
|
|
||||||
|
# all the images using ELASTICSEARCHDEFAULTS.elasticsearch.version
|
||||||
|
# does not include so-elastic-fleet since that container uses so-elastic-agent image
|
||||||
|
local IMAGES_USING_ES_VERSION=("so-elasticsearch")
|
||||||
|
|
||||||
rm -rf $SIGNPATH >> "$LOG_FILE" 2>&1
|
rm -rf $SIGNPATH >> "$LOG_FILE" 2>&1
|
||||||
mkdir -p $SIGNPATH >> "$LOG_FILE" 2>&1
|
mkdir -p $SIGNPATH >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
@@ -139,15 +143,36 @@ update_docker_containers() {
|
|||||||
$PROGRESS_CALLBACK $i
|
$PROGRESS_CALLBACK $i
|
||||||
fi
|
fi
|
||||||
|
|
||||||
# Pull down the trusted docker image
|
if [[ " ${IMAGES_USING_ES_VERSION[*]} " =~ [[:space:]]${i}[[:space:]] ]]; then
|
||||||
|
# this is an es container so use version defined in elasticsearch defaults.yaml
|
||||||
|
local UPDATE_DIR='/tmp/sogh/securityonion'
|
||||||
|
if [ ! -d "$UPDATE_DIR" ]; then
|
||||||
|
UPDATE_DIR=/securityonion
|
||||||
|
fi
|
||||||
|
local v1=0
|
||||||
|
local v2=0
|
||||||
|
if [[ -f "$UPDATE_DIR/salt/elasticsearch/defaults.yaml" ]]; then
|
||||||
|
v1=$(egrep " +version: " "$UPDATE_DIR/salt/elasticsearch/defaults.yaml" | awk -F: '{print $2}' | tr -d '[:space:]')
|
||||||
|
fi
|
||||||
|
if [[ -f "$DEFAULT_SALT_DIR/salt/elasticsearch/defaults.yaml" ]]; then
|
||||||
|
v2=$(egrep " +version: " "$DEFAULT_SALT_DIR/salt/elasticsearch/defaults.yaml" | awk -F: '{print $2}' | tr -d '[:space:]')
|
||||||
|
fi
|
||||||
|
local highest_es_version=$(compare_es_versions "$v1" "$v2")
|
||||||
|
local image=$i:$highest_es_version$IMAGE_TAG_SUFFIX
|
||||||
|
local sig_url=https://sigs.securityonion.net/es-$highest_es_version/$image.sig
|
||||||
|
else
|
||||||
|
# this is not an es container so use the so version for the version
|
||||||
local image=$i:$VERSION$IMAGE_TAG_SUFFIX
|
local image=$i:$VERSION$IMAGE_TAG_SUFFIX
|
||||||
|
local sig_url=https://sigs.securityonion.net/$VERSION/$image.sig
|
||||||
|
fi
|
||||||
|
# Pull down the trusted docker image
|
||||||
run_check_net_err \
|
run_check_net_err \
|
||||||
"docker pull $CONTAINER_REGISTRY/$IMAGEREPO/$image" \
|
"docker pull $CONTAINER_REGISTRY/$IMAGEREPO/$image" \
|
||||||
"Could not pull $image, please ensure connectivity to $CONTAINER_REGISTRY" >> "$LOG_FILE" 2>&1
|
"Could not pull $image, please ensure connectivity to $CONTAINER_REGISTRY" >> "$LOG_FILE" 2>&1
|
||||||
|
|
||||||
# Get signature
|
# Get signature
|
||||||
run_check_net_err \
|
run_check_net_err \
|
||||||
"curl --retry 5 --retry-delay 60 -A '$CURLTYPE/$CURRENTVERSION/$OS/$(uname -r)' https://sigs.securityonion.net/$VERSION/$i:$VERSION$IMAGE_TAG_SUFFIX.sig --output $SIGNPATH/$image.sig" \
|
"curl --retry 5 --retry-delay 60 -A '$CURLTYPE/$CURRENTVERSION/$OS/$(uname -r)' $sig_url --output $SIGNPATH/$image.sig" \
|
||||||
"Could not pull signature file for $image, please ensure connectivity to https://sigs.securityonion.net " \
|
"Could not pull signature file for $image, please ensure connectivity to https://sigs.securityonion.net " \
|
||||||
noretry >> "$LOG_FILE" 2>&1
|
noretry >> "$LOG_FILE" 2>&1
|
||||||
# Dump our hash values
|
# Dump our hash values
|
||||||
|
|||||||
@@ -20,30 +20,30 @@ dockergroup:
|
|||||||
dockerheldpackages:
|
dockerheldpackages:
|
||||||
pkg.installed:
|
pkg.installed:
|
||||||
- pkgs:
|
- pkgs:
|
||||||
- containerd.io: 1.6.33-1
|
- containerd.io: 1.7.21-1
|
||||||
- docker-ce: 5:26.1.4-1~debian.12~bookworm
|
- docker-ce: 5:27.2.0-1~debian.12~bookworm
|
||||||
- docker-ce-cli: 5:26.1.4-1~debian.12~bookworm
|
- docker-ce-cli: 5:27.2.0-1~debian.12~bookworm
|
||||||
- docker-ce-rootless-extras: 5:26.1.4-1~debian.12~bookworm
|
- docker-ce-rootless-extras: 5:27.2.0-1~debian.12~bookworm
|
||||||
- hold: True
|
- hold: True
|
||||||
- update_holds: True
|
- update_holds: True
|
||||||
{% elif grains.oscodename == 'jammy' %}
|
{% elif grains.oscodename == 'jammy' %}
|
||||||
dockerheldpackages:
|
dockerheldpackages:
|
||||||
pkg.installed:
|
pkg.installed:
|
||||||
- pkgs:
|
- pkgs:
|
||||||
- containerd.io: 1.6.33-1
|
- containerd.io: 1.7.21-1
|
||||||
- docker-ce: 5:26.1.4-1~ubuntu.22.04~jammy
|
- docker-ce: 5:27.2.0-1~ubuntu.22.04~jammy
|
||||||
- docker-ce-cli: 5:26.1.4-1~ubuntu.22.04~jammy
|
- docker-ce-cli: 5:27.2.0-1~ubuntu.22.04~jammy
|
||||||
- docker-ce-rootless-extras: 5:26.1.4-1~ubuntu.22.04~jammy
|
- docker-ce-rootless-extras: 5:27.2.0-1~ubuntu.22.04~jammy
|
||||||
- hold: True
|
- hold: True
|
||||||
- update_holds: True
|
- update_holds: True
|
||||||
{% else %}
|
{% else %}
|
||||||
dockerheldpackages:
|
dockerheldpackages:
|
||||||
pkg.installed:
|
pkg.installed:
|
||||||
- pkgs:
|
- pkgs:
|
||||||
- containerd.io: 1.6.33-1
|
- containerd.io: 1.7.21-1
|
||||||
- docker-ce: 5:26.1.4-1~ubuntu.20.04~focal
|
- docker-ce: 5:27.2.0-1~ubuntu.20.04~focal
|
||||||
- docker-ce-cli: 5:26.1.4-1~ubuntu.20.04~focal
|
- docker-ce-cli: 5:27.2.0-1~ubuntu.20.04~focal
|
||||||
- docker-ce-rootless-extras: 5:26.1.4-1~ubuntu.20.04~focal
|
- docker-ce-rootless-extras: 5:27.2.0-1~ubuntu.20.04~focal
|
||||||
- hold: True
|
- hold: True
|
||||||
- update_holds: True
|
- update_holds: True
|
||||||
{% endif %}
|
{% endif %}
|
||||||
@@ -51,10 +51,10 @@ dockerheldpackages:
|
|||||||
dockerheldpackages:
|
dockerheldpackages:
|
||||||
pkg.installed:
|
pkg.installed:
|
||||||
- pkgs:
|
- pkgs:
|
||||||
- containerd.io: 1.6.33-3.1.el9
|
- containerd.io: 1.7.21-3.1.el9
|
||||||
- docker-ce: 3:26.1.4-1.el9
|
- docker-ce: 3:27.2.0-1.el9
|
||||||
- docker-ce-cli: 1:26.1.4-1.el9
|
- docker-ce-cli: 1:27.2.0-1.el9
|
||||||
- docker-ce-rootless-extras: 26.1.4-1.el9
|
- docker-ce-rootless-extras: 27.2.0-1.el9
|
||||||
- hold: True
|
- hold: True
|
||||||
- update_holds: True
|
- update_holds: True
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
elastalert:
|
elastalert:
|
||||||
enabled:
|
enabled:
|
||||||
description: You can enable or disable Elastalert.
|
description: Enables or disables the ElastAlert 2 process. This process is critical for ensuring alerts arrive in SOC, and for outbound notification delivery.
|
||||||
helpLink: elastalert.html
|
helpLink: elastalert.html
|
||||||
alerter_parameters:
|
alerter_parameters:
|
||||||
title: Custom Configuration Parameters
|
title: Custom Configuration Parameters
|
||||||
|
|||||||
@@ -1,4 +1,4 @@
|
|||||||
elastic_fleet_package_registry:
|
elastic_fleet_package_registry:
|
||||||
enabled:
|
enabled:
|
||||||
description: You can enable or disable Elastic Fleet Package Registry.
|
description: Enables or disables the Fleet package registry process. This process must remain enabled to allow Elastic Agent packages to be updated.
|
||||||
advanced: True
|
advanced: True
|
||||||
|
|||||||
@@ -8,7 +8,6 @@
|
|||||||
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
{% from 'docker/docker.map.jinja' import DOCKER %}
|
{% from 'docker/docker.map.jinja' import DOCKER %}
|
||||||
|
|
||||||
|
|
||||||
include:
|
include:
|
||||||
- elasticagent.config
|
- elasticagent.config
|
||||||
- elasticagent.sostatus
|
- elasticagent.sostatus
|
||||||
|
|||||||
4
salt/elasticagent/soc_elasticagent.yaml
Normal file
4
salt/elasticagent/soc_elasticagent.yaml
Normal file
@@ -0,0 +1,4 @@
|
|||||||
|
elasticagent:
|
||||||
|
enabled:
|
||||||
|
description: Enables or disables the Elastic Agent process. This process must remain enabled to allow collection of node events.
|
||||||
|
advanced: True
|
||||||
@@ -73,6 +73,63 @@ eapackageupgrade:
|
|||||||
- template: jinja
|
- template: jinja
|
||||||
|
|
||||||
{% if GLOBALS.role != "so-fleet" %}
|
{% if GLOBALS.role != "so-fleet" %}
|
||||||
|
|
||||||
|
soresourcesrepoconfig:
|
||||||
|
git.config_set:
|
||||||
|
- name: safe.directory
|
||||||
|
- value: /nsm/securityonion-resources
|
||||||
|
- global: True
|
||||||
|
- user: socore
|
||||||
|
|
||||||
|
{% if not GLOBALS.airgap %}
|
||||||
|
soresourcesrepoclone:
|
||||||
|
git.latest:
|
||||||
|
- name: https://github.com/Security-Onion-Solutions/securityonion-resources.git
|
||||||
|
- target: /nsm/securityonion-resources
|
||||||
|
- rev: 'main'
|
||||||
|
- depth: 1
|
||||||
|
- force_reset: True
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
|
elasticdefendconfdir:
|
||||||
|
file.directory:
|
||||||
|
- name: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets
|
||||||
|
- user: 947
|
||||||
|
- group: 939
|
||||||
|
- makedirs: True
|
||||||
|
|
||||||
|
elasticdefenddisabled:
|
||||||
|
file.managed:
|
||||||
|
- name: /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml
|
||||||
|
- source: salt://elasticfleet/files/soc/elastic-defend-disabled-filters.yaml
|
||||||
|
- user: 947
|
||||||
|
- group: 939
|
||||||
|
- mode: 600
|
||||||
|
|
||||||
|
elasticdefendcustom:
|
||||||
|
file.managed:
|
||||||
|
- name: /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters-raw
|
||||||
|
- source: salt://elasticfleet/files/soc/elastic-defend-custom-filters.yaml
|
||||||
|
- user: 947
|
||||||
|
- group: 939
|
||||||
|
- mode: 600
|
||||||
|
|
||||||
|
{% if ELASTICFLEETMERGED.config.defend_filters.enable_auto_configuration %}
|
||||||
|
{% set ap = "present" %}
|
||||||
|
{% else %}
|
||||||
|
{% set ap = "absent" %}
|
||||||
|
{% endif %}
|
||||||
|
cron-elastic-defend-filters:
|
||||||
|
cron.{{ap}}:
|
||||||
|
- name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log
|
||||||
|
- identifier: elastic-defend-filters
|
||||||
|
- user: root
|
||||||
|
- minute: '0'
|
||||||
|
- hour: '3'
|
||||||
|
- daymonth: '*'
|
||||||
|
- month: '*'
|
||||||
|
- dayweek: '*'
|
||||||
|
|
||||||
eaintegrationsdir:
|
eaintegrationsdir:
|
||||||
file.directory:
|
file.directory:
|
||||||
- name: /opt/so/conf/elastic-fleet/integrations
|
- name: /opt/so/conf/elastic-fleet/integrations
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ elasticfleet:
|
|||||||
endpoints_enrollment: ''
|
endpoints_enrollment: ''
|
||||||
es_token: ''
|
es_token: ''
|
||||||
grid_enrollment: ''
|
grid_enrollment: ''
|
||||||
|
defend_filters:
|
||||||
|
enable_auto_configuration: False
|
||||||
logging:
|
logging:
|
||||||
zeek:
|
zeek:
|
||||||
excluded:
|
excluded:
|
||||||
@@ -36,6 +38,7 @@ elasticfleet:
|
|||||||
- aws
|
- aws
|
||||||
- azure
|
- azure
|
||||||
- barracuda
|
- barracuda
|
||||||
|
- barracuda_cloudgen_firewall
|
||||||
- carbonblack_edr
|
- carbonblack_edr
|
||||||
- cef
|
- cef
|
||||||
- checkpoint
|
- checkpoint
|
||||||
@@ -66,6 +69,7 @@ elasticfleet:
|
|||||||
- http_endpoint
|
- http_endpoint
|
||||||
- httpjson
|
- httpjson
|
||||||
- iis
|
- iis
|
||||||
|
- imperva_cloud_waf
|
||||||
- journald
|
- journald
|
||||||
- juniper
|
- juniper
|
||||||
- juniper_srx
|
- juniper_srx
|
||||||
|
|||||||
@@ -17,10 +17,12 @@ include:
|
|||||||
- elasticfleet.sostatus
|
- elasticfleet.sostatus
|
||||||
- ssl
|
- ssl
|
||||||
|
|
||||||
|
{% if grains.role not in ['so-fleet'] %}
|
||||||
# Wait for Elasticsearch to be ready - no reason to try running Elastic Fleet server if ES is not ready
|
# Wait for Elasticsearch to be ready - no reason to try running Elastic Fleet server if ES is not ready
|
||||||
wait_for_elasticsearch_elasticfleet:
|
wait_for_elasticsearch_elasticfleet:
|
||||||
cmd.run:
|
cmd.run:
|
||||||
- name: so-elasticsearch-wait
|
- name: so-elasticsearch-wait
|
||||||
|
{% endif %}
|
||||||
|
|
||||||
# If enabled, automatically update Fleet Logstash Outputs
|
# If enabled, automatically update Fleet Logstash Outputs
|
||||||
{% if ELASTICFLEETMERGED.config.server.enable_auto_configuration and grains.role not in ['so-import', 'so-eval', 'so-fleet'] %}
|
{% if ELASTICFLEETMERGED.config.server.enable_auto_configuration and grains.role not in ['so-import', 'so-eval', 'so-fleet'] %}
|
||||||
@@ -142,6 +144,19 @@ so-elastic-agent-grid-upgrade:
|
|||||||
cmd.run:
|
cmd.run:
|
||||||
- name: /usr/sbin/so-elastic-agent-grid-upgrade
|
- name: /usr/sbin/so-elastic-agent-grid-upgrade
|
||||||
- retry: True
|
- retry: True
|
||||||
|
|
||||||
|
so-elastic-fleet-integration-upgrade:
|
||||||
|
cmd.run:
|
||||||
|
- name: /usr/sbin/so-elastic-fleet-integration-upgrade
|
||||||
|
|
||||||
|
{% if ELASTICFLEETMERGED.config.defend_filters.enable_auto_configuration %}
|
||||||
|
so-elastic-defend-manage-filters-file-watch:
|
||||||
|
cmd.run:
|
||||||
|
- name: python3 /sbin/so-elastic-defend-manage-filters.py -c /opt/so/conf/elasticsearch/curl.config -d /opt/so/conf/elastic-fleet/defend-exclusions/disabled-filters.yaml -i /nsm/securityonion-resources/event_filters/ -i /opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters/ &>> /opt/so/log/elasticfleet/elastic-defend-manage-filters.log
|
||||||
|
- onchanges:
|
||||||
|
- file: elasticdefendcustom
|
||||||
|
- file: elasticdefenddisabled
|
||||||
|
{% endif %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
|
|
||||||
delete_so-elastic-fleet_so-status.disabled:
|
delete_so-elastic-fleet_so-status.disabled:
|
||||||
|
|||||||
@@ -0,0 +1,27 @@
|
|||||||
|
title: 'Template 1'
|
||||||
|
id: 'This needs to be a UUIDv4 id - https://www.uuidgenerator.net/version4'
|
||||||
|
description: 'Short description detailing what this rule is filtering and why.'
|
||||||
|
references: 'Relevant urls, etc'
|
||||||
|
author: '@SecurityOnion'
|
||||||
|
date: 'MM/DD/YY'
|
||||||
|
event_type: 'dns_query'
|
||||||
|
filter_type: 'exclude'
|
||||||
|
filter:
|
||||||
|
selection_1:
|
||||||
|
TargetField: 'QueryName'
|
||||||
|
Condition: 'end with'
|
||||||
|
Pattern: '.thawte.com'
|
||||||
|
---
|
||||||
|
title: 'Template 2'
|
||||||
|
id: 'This needs to be a UUIDv4 id - https://www.uuidgenerator.net/version4'
|
||||||
|
description: 'Short description detailing what this rule is filtering and why.'
|
||||||
|
references: 'Relevant urls, etc'
|
||||||
|
author: '@SecurityOnion'
|
||||||
|
date: 'MM/DD/YY'
|
||||||
|
event_type: 'process_creation'
|
||||||
|
filter_type: 'exclude'
|
||||||
|
filter:
|
||||||
|
selection_1:
|
||||||
|
TargetField: 'ParentImage'
|
||||||
|
Condition: 'is'
|
||||||
|
Pattern: 'C:\Windows\Microsoft.NET\Framework\v4.0.30319\ngentask.exe'
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
'9EDAA51C-BB12-49D9-8748-2B61371F2E7D':
|
||||||
|
Date: '10/10/2024'
|
||||||
|
Notes: 'Example Disabled Filter - Leave this entry here, just copy and paste as needed.'
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
elasticfleet:
|
elasticfleet:
|
||||||
enabled:
|
enabled:
|
||||||
description: You can enable or disable Elastic Fleet.
|
description: Enables or disables the Elastic Fleet process. This process is critical for managing Elastic Agents.
|
||||||
advanced: True
|
advanced: True
|
||||||
helpLink: elastic-fleet.html
|
helpLink: elastic-fleet.html
|
||||||
enable_manager_output:
|
enable_manager_output:
|
||||||
@@ -9,6 +9,24 @@ elasticfleet:
|
|||||||
global: True
|
global: True
|
||||||
forcedType: bool
|
forcedType: bool
|
||||||
helpLink: elastic-fleet.html
|
helpLink: elastic-fleet.html
|
||||||
|
files:
|
||||||
|
soc:
|
||||||
|
elastic-defend-disabled-filters__yaml:
|
||||||
|
title: Disabled Elastic Defend filters
|
||||||
|
description: Enter the ID of the filter that should be disabled.
|
||||||
|
syntax: yaml
|
||||||
|
file: True
|
||||||
|
global: True
|
||||||
|
helpLink: elastic-fleet.html
|
||||||
|
advanced: True
|
||||||
|
elastic-defend-custom-filters__yaml:
|
||||||
|
title: Custom Elastic Defend filters
|
||||||
|
description: Enter custom filters seperated by ---
|
||||||
|
syntax: yaml
|
||||||
|
file: True
|
||||||
|
global: True
|
||||||
|
helpLink: elastic-fleet.html
|
||||||
|
advanced: True
|
||||||
logging:
|
logging:
|
||||||
zeek:
|
zeek:
|
||||||
excluded:
|
excluded:
|
||||||
@@ -16,6 +34,12 @@ elasticfleet:
|
|||||||
forcedType: "[]string"
|
forcedType: "[]string"
|
||||||
helpLink: zeek.html
|
helpLink: zeek.html
|
||||||
config:
|
config:
|
||||||
|
defend_filters:
|
||||||
|
enable_auto_configuration:
|
||||||
|
description: Enable auto-configuration and management of the Elastic Defend Exclusion filters.
|
||||||
|
global: True
|
||||||
|
helpLink: elastic-fleet.html
|
||||||
|
advanced: True
|
||||||
server:
|
server:
|
||||||
custom_fqdn:
|
custom_fqdn:
|
||||||
description: Custom FQDN for Agents to connect to. One per line.
|
description: Custom FQDN for Agents to connect to. One per line.
|
||||||
|
|||||||
251
salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py
Normal file
251
salt/elasticfleet/tools/sbin/so-elastic-defend-manage-filters.py
Normal file
@@ -0,0 +1,251 @@
|
|||||||
|
from datetime import datetime
|
||||||
|
import sys
|
||||||
|
import getopt
|
||||||
|
from so_elastic_defend_filters_helper import *
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logging.basicConfig(level=logging.INFO, format='%(message)s')
|
||||||
|
|
||||||
|
# Define mappings for Target Field, Event Type, Conditions
|
||||||
|
TARGET_FIELD_MAPPINGS = {
|
||||||
|
"Image": "process.executable",
|
||||||
|
"ParentImage": "process.parent.executable",
|
||||||
|
"CommandLine": "process.command_line",
|
||||||
|
"ParentCommandLine": "process.parent.command_line",
|
||||||
|
"DestinationHostname": "destination.domain",
|
||||||
|
"QueryName": "dns.question.name",
|
||||||
|
"DestinationIp": "destination.ip",
|
||||||
|
"TargetObject": "registry.path",
|
||||||
|
"TargetFilename": "file.path"
|
||||||
|
}
|
||||||
|
|
||||||
|
DATASET_MAPPINGS = {
|
||||||
|
"process_create": "endpoint.events.process",
|
||||||
|
"network_connection": "endpoint.events.network",
|
||||||
|
"file_create": "endpoint.events.file",
|
||||||
|
"file_delete": "endpoint.events.file",
|
||||||
|
"registry_event": "endpoint.events.registry",
|
||||||
|
"dns_query": "endpoint.events.network"
|
||||||
|
}
|
||||||
|
|
||||||
|
CONDITION_MAPPINGS = {
|
||||||
|
"is": ("included", "match"),
|
||||||
|
"end with": ("included", "wildcard"),
|
||||||
|
"begin with": ("included", "wildcard"),
|
||||||
|
"contains": ("included", "wildcard")
|
||||||
|
}
|
||||||
|
|
||||||
|
# Extract entries for a rule
|
||||||
|
def extract_entries(data, event_type):
|
||||||
|
entries = []
|
||||||
|
filter_data = data.get('filter', {})
|
||||||
|
for value in filter_data.values():
|
||||||
|
target_field = TARGET_FIELD_MAPPINGS.get(value.get('TargetField', ''))
|
||||||
|
condition = value.get('Condition', '')
|
||||||
|
pattern = value.get('Pattern', '')
|
||||||
|
|
||||||
|
if condition not in CONDITION_MAPPINGS:
|
||||||
|
logging.error(f"Invalid condition: {condition}")
|
||||||
|
|
||||||
|
# Modify the pattern based on the condition
|
||||||
|
pattern = modify_pattern(condition, pattern)
|
||||||
|
|
||||||
|
operator, match_type = CONDITION_MAPPINGS[condition]
|
||||||
|
|
||||||
|
entries.append({
|
||||||
|
"field": target_field,
|
||||||
|
"operator": operator,
|
||||||
|
"type": match_type,
|
||||||
|
"value": pattern
|
||||||
|
})
|
||||||
|
|
||||||
|
# Add the event.dataset entry from DATASET_MAPPINGS
|
||||||
|
dataset_value = DATASET_MAPPINGS.get(event_type, '')
|
||||||
|
if dataset_value:
|
||||||
|
entries.append({
|
||||||
|
"field": "event.dataset",
|
||||||
|
"operator": "included",
|
||||||
|
"type": "match",
|
||||||
|
"value": dataset_value
|
||||||
|
})
|
||||||
|
else:
|
||||||
|
logging.error(f"No dataset mapping found for event_type: {event_type}")
|
||||||
|
|
||||||
|
return entries
|
||||||
|
|
||||||
|
# Build the JSON
|
||||||
|
def build_json_entry(entries, guid, event_type, context):
|
||||||
|
return {
|
||||||
|
"comments": [],
|
||||||
|
"entries": entries,
|
||||||
|
"item_id": guid,
|
||||||
|
"name": f"SO - {event_type} - {guid}",
|
||||||
|
"description": f"{context}\n\n <<- Note: This filter is managed by Security Onion. ->>",
|
||||||
|
"namespace_type": "agnostic",
|
||||||
|
"tags": ["policy:all"],
|
||||||
|
"type": "simple",
|
||||||
|
"os_types": ["windows"],
|
||||||
|
"entries": entries
|
||||||
|
}
|
||||||
|
|
||||||
|
# Check to see if the rule is disabled
|
||||||
|
# If it is, make sure it is not active
|
||||||
|
def disable_check(guid, disabled_rules, username, password):
|
||||||
|
if guid in disabled_rules:
|
||||||
|
logging.info(f"Rule {guid} is in the disabled rules list, confirming that is is actually disabled...")
|
||||||
|
existing_rule = api_request("GET", guid, username, password)
|
||||||
|
|
||||||
|
if existing_rule:
|
||||||
|
if api_request("DELETE", guid, username, password):
|
||||||
|
logging.info(f"Successfully deleted rule {guid}")
|
||||||
|
return True, "deleted"
|
||||||
|
else:
|
||||||
|
logging.error(f"Error deleting rule {guid}.")
|
||||||
|
return True, "Error deleting"
|
||||||
|
return True, "NOP"
|
||||||
|
return False, None
|
||||||
|
|
||||||
|
def modify_pattern(condition, pattern):
|
||||||
|
"""
|
||||||
|
Modify the pattern based on the condition.
|
||||||
|
- 'end with': Add '*' to the beginning of the pattern.
|
||||||
|
- 'begin with': Add '*' to the end of the pattern.
|
||||||
|
- 'contains': Add '*' to both the beginning and end of the pattern.
|
||||||
|
"""
|
||||||
|
if isinstance(pattern, list):
|
||||||
|
# Apply modification to each pattern in the list if it's a list of patterns
|
||||||
|
return [modify_pattern(condition, p) for p in pattern]
|
||||||
|
|
||||||
|
if condition == "end with":
|
||||||
|
return f"*{pattern}"
|
||||||
|
elif condition == "begin with":
|
||||||
|
return f"{pattern}*"
|
||||||
|
elif condition == "contains":
|
||||||
|
return f"*{pattern}*"
|
||||||
|
return pattern
|
||||||
|
|
||||||
|
|
||||||
|
def process_rule_update_or_create(guid, json_entry, username, password):
|
||||||
|
existing_rule = api_request("GET", guid, username, password)
|
||||||
|
|
||||||
|
if existing_rule:
|
||||||
|
existing_rule_data = extract_relevant_fields(existing_rule)
|
||||||
|
new_rule_data = extract_relevant_fields(json_entry)
|
||||||
|
if generate_hash(existing_rule_data) != generate_hash(new_rule_data):
|
||||||
|
logging.info(f"Updating rule {guid}")
|
||||||
|
json_entry.pop("list_id", None)
|
||||||
|
api_request("PUT", guid, username, password, json_data=json_entry)
|
||||||
|
return "updated"
|
||||||
|
logging.info(f"Rule {guid} is up to date.")
|
||||||
|
return "no_change"
|
||||||
|
else:
|
||||||
|
logging.info(f"Creating new rule {guid}")
|
||||||
|
json_entry["list_id"] = "endpoint_event_filters"
|
||||||
|
api_request("POST", guid, username, password, json_data=json_entry)
|
||||||
|
return "new"
|
||||||
|
|
||||||
|
# Main function for processing rules
|
||||||
|
def process_rules(yaml_files, disabled_rules, username, password):
|
||||||
|
stats = {"rule_count": 0, "new": 0, "updated": 0, "no_change": 0, "disabled": 0, "deleted": 0}
|
||||||
|
for data in yaml_files:
|
||||||
|
logging.info(f"Processing rule: {data.get('id', '')}")
|
||||||
|
event_type = data.get('event_type', '')
|
||||||
|
guid = data.get('id', '')
|
||||||
|
dataset = DATASET_MAPPINGS.get(event_type, '')
|
||||||
|
context = data.get('description', '')
|
||||||
|
|
||||||
|
rule_deleted, state = disable_check(guid, disabled_rules, username, password)
|
||||||
|
if rule_deleted:
|
||||||
|
stats["disabled"] += 1
|
||||||
|
if state == "deleted":
|
||||||
|
stats["deleted"] += 1
|
||||||
|
continue
|
||||||
|
|
||||||
|
# Extract entries and build JSON
|
||||||
|
entries = extract_entries(data, event_type)
|
||||||
|
json_entry = build_json_entry(entries, guid, event_type, context)
|
||||||
|
|
||||||
|
# Process rule creation or update
|
||||||
|
status = process_rule_update_or_create(guid, json_entry, username, password)
|
||||||
|
|
||||||
|
stats[status] += 1
|
||||||
|
stats["rule_count"] += 1
|
||||||
|
return stats
|
||||||
|
|
||||||
|
def parse_args(argv):
|
||||||
|
try:
|
||||||
|
opts, args = getopt.getopt(argv, "i:d:c:f:", ["input=", "disabled=", "credentials=", "flags_file="])
|
||||||
|
except getopt.GetoptError:
|
||||||
|
print("Usage: python so-elastic-defend-manage-filters.py -c <credentials_file> -d <disabled_file> -i <folder_of_yaml_files> [-f <flags_file>]")
|
||||||
|
sys.exit(2)
|
||||||
|
return opts
|
||||||
|
|
||||||
|
def load_flags(file_path):
|
||||||
|
with open(file_path, 'r') as flags_file:
|
||||||
|
return flags_file.read().splitlines()
|
||||||
|
|
||||||
|
def validate_inputs(credentials_file, disabled_file, yaml_directories):
|
||||||
|
if not credentials_file or not disabled_file or not yaml_directories:
|
||||||
|
print("Usage: python so-elastic-defend-manage-filters.py -c <credentials_file> -d <disabled_file> -i <folder_of_yaml_files> [-f <flags_file>]")
|
||||||
|
sys.exit(2)
|
||||||
|
|
||||||
|
def main(argv):
|
||||||
|
credentials_file = ""
|
||||||
|
disabled_file = ""
|
||||||
|
yaml_directories = []
|
||||||
|
|
||||||
|
opts = parse_args(argv)
|
||||||
|
|
||||||
|
for opt, arg in opts:
|
||||||
|
if opt in ("-c", "--credentials"):
|
||||||
|
credentials_file = arg
|
||||||
|
elif opt in ("-d", "--disabled"):
|
||||||
|
disabled_file = arg
|
||||||
|
elif opt in ("-i", "--input"):
|
||||||
|
yaml_directories.append(arg)
|
||||||
|
elif opt in ("-f", "--flags_file"):
|
||||||
|
flags = load_flags(arg)
|
||||||
|
return main(argv + flags)
|
||||||
|
|
||||||
|
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
logging.info(f"\n{timestamp}")
|
||||||
|
|
||||||
|
validate_inputs(credentials_file, disabled_file, yaml_directories)
|
||||||
|
|
||||||
|
credentials = load_credentials(credentials_file)
|
||||||
|
if not credentials:
|
||||||
|
raise Exception("Failed to load credentials")
|
||||||
|
|
||||||
|
username, password = extract_auth_details(credentials)
|
||||||
|
if not username or not password:
|
||||||
|
raise Exception("Invalid credentials format")
|
||||||
|
|
||||||
|
custom_rules_input = '/opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters-raw'
|
||||||
|
custom_rules_output = '/opt/so/conf/elastic-fleet/defend-exclusions/rulesets/custom-filters'
|
||||||
|
prepare_custom_rules(custom_rules_input, custom_rules_output)
|
||||||
|
disabled_rules = load_disabled(disabled_file)
|
||||||
|
|
||||||
|
total_stats = {"rule_count": 0, "new": 0, "updated": 0, "no_change": 0, "disabled": 0, "deleted": 0}
|
||||||
|
|
||||||
|
for yaml_dir in yaml_directories:
|
||||||
|
yaml_files = load_yaml_files(yaml_dir)
|
||||||
|
stats = process_rules(yaml_files, disabled_rules, username, password)
|
||||||
|
|
||||||
|
for key in total_stats:
|
||||||
|
total_stats[key] += stats[key]
|
||||||
|
|
||||||
|
logging.info(f"\nProcessing Summary")
|
||||||
|
logging.info(f" - Total processed rules: {total_stats['rule_count']}")
|
||||||
|
logging.info(f" - New rules: {total_stats['new']}")
|
||||||
|
logging.info(f" - Updated rules: {total_stats['updated']}")
|
||||||
|
logging.info(f" - Disabled rules: {total_stats['deleted']}")
|
||||||
|
logging.info(f" - Rules with no changes: {total_stats['no_change']}")
|
||||||
|
logging.info(f"Rule status Summary")
|
||||||
|
logging.info(f" - Active rules: {total_stats['rule_count'] - total_stats['disabled']}")
|
||||||
|
logging.info(f" - Disabled rules: {total_stats['disabled']}")
|
||||||
|
timestamp = datetime.now().strftime('%Y-%m-%d %H:%M:%S')
|
||||||
|
logging.info(f"Execution completed at: {timestamp}")
|
||||||
|
|
||||||
|
|
||||||
|
if __name__ == "__main__":
|
||||||
|
main(sys.argv[1:])
|
||||||
@@ -102,6 +102,62 @@ elastic_fleet_package_is_installed() {
|
|||||||
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET -H 'kbn-xsrf: true' "localhost:5601/api/fleet/epm/packages/$PACKAGE" | jq -r '.item.status'
|
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET -H 'kbn-xsrf: true' "localhost:5601/api/fleet/epm/packages/$PACKAGE" | jq -r '.item.status'
|
||||||
}
|
}
|
||||||
|
|
||||||
|
elastic_fleet_agent_policy_names() {
|
||||||
|
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies" | jq -r .items[].name
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to retrieve agent policies."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
elastic_fleet_integration_policy_names() {
|
||||||
|
AGENT_POLICY=$1
|
||||||
|
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r .item.package_policies[].name
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to retrieve integrations for '$AGENT_POLICY'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
elastic_fleet_integration_policy_package_name() {
|
||||||
|
AGENT_POLICY=$1
|
||||||
|
INTEGRATION=$2
|
||||||
|
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .package.name'
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to retrieve package name for '$INTEGRATION' in '$AGENT_POLICY'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
elastic_fleet_integration_policy_package_version() {
|
||||||
|
AGENT_POLICY=$1
|
||||||
|
INTEGRATION=$2
|
||||||
|
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .package.version'
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to retrieve package version for '$INTEGRATION' in '$AGENT_POLICY'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
elastic_fleet_integration_id() {
|
||||||
|
AGENT_POLICY=$1
|
||||||
|
INTEGRATION=$2
|
||||||
|
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -L -X GET "localhost:5601/api/fleet/agent_policies/$AGENT_POLICY" | jq -r --arg INTEGRATION "$INTEGRATION" '.item.package_policies[] | select(.name==$INTEGRATION)| .id'
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to retrieve integration ID for '$INTEGRATION' in '$AGENT_POLICY'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
|
elastic_fleet_integration_policy_dryrun_upgrade() {
|
||||||
|
INTEGRATION_ID=$1
|
||||||
|
curl -s -K /opt/so/conf/elasticsearch/curl.config -b "sid=$SESSIONCOOKIE" -H "Content-Type: application/json" -H 'kbn-xsrf: true' -L -X POST "localhost:5601/api/fleet/package_policies/upgrade/dryrun" -d "{\"packagePolicyIds\":[\"$INTEGRATION_ID\"]}"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to complete dry run for '$INTEGRATION_ID'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
}
|
||||||
|
|
||||||
elastic_fleet_policy_create() {
|
elastic_fleet_policy_create() {
|
||||||
|
|
||||||
NAME=$1
|
NAME=$1
|
||||||
|
|||||||
@@ -0,0 +1,62 @@
|
|||||||
|
#!/bin/bash
|
||||||
|
# Copyright Security Onion Solutions LLC and/or licensed to Security Onion Solutions LLC under one
|
||||||
|
# or more contributor license agreements. Licensed under the Elastic License 2.0 as shown at
|
||||||
|
# https://securityonion.net/license; you may not use this file except in compliance with the
|
||||||
|
# Elastic License 2.0.
|
||||||
|
|
||||||
|
. /usr/sbin/so-elastic-fleet-common
|
||||||
|
|
||||||
|
curl_output=$(curl -s -K /opt/so/conf/elasticsearch/curl.config -c - -X GET http://localhost:5601/)
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to connect to Kibana."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
IFS=$'\n'
|
||||||
|
agent_policies=$(elastic_fleet_agent_policy_names)
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Failed to retrieve agent policies."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
|
||||||
|
for AGENT_POLICY in $agent_policies; do
|
||||||
|
integrations=$(elastic_fleet_integration_policy_names "$AGENT_POLICY")
|
||||||
|
for INTEGRATION in $integrations; do
|
||||||
|
if ! [[ "$INTEGRATION" == "elastic-defend-endpoints" ]] && ! [[ "$INTEGRATION" == "fleet_server-"* ]]; then
|
||||||
|
# Get package name so we know what package to look for when checking the current and latest available version
|
||||||
|
PACKAGE_NAME=$(elastic_fleet_integration_policy_package_name "$AGENT_POLICY" "$INTEGRATION")
|
||||||
|
|
||||||
|
# Get currently installed version of package
|
||||||
|
PACKAGE_VERSION=$(elastic_fleet_integration_policy_package_version "$AGENT_POLICY" "$INTEGRATION")
|
||||||
|
|
||||||
|
# Get latest available version of package
|
||||||
|
AVAILABLE_VERSION=$(elastic_fleet_package_latest_version_check "$PACKAGE_NAME")
|
||||||
|
|
||||||
|
# Get integration ID
|
||||||
|
INTEGRATION_ID=$(elastic_fleet_integration_id "$AGENT_POLICY" "$INTEGRATION")
|
||||||
|
|
||||||
|
if [[ "$PACKAGE_VERSION" != "$AVAILABLE_VERSION" ]]; then
|
||||||
|
# Dry run of the upgrade
|
||||||
|
echo "Current $PACKAGE_NAME package version ($PACKAGE_VERSION) is not the same as the latest available package ($AVAILABLE_VERSION)..."
|
||||||
|
echo "Upgrading $INTEGRATION..."
|
||||||
|
echo "Starting dry run..."
|
||||||
|
DRYRUN_OUTPUT=$(elastic_fleet_integration_policy_dryrun_upgrade "$INTEGRATION_ID")
|
||||||
|
DRYRUN_ERRORS=$(echo "$DRYRUN_OUTPUT" | jq .[].hasErrors)
|
||||||
|
|
||||||
|
# If no errors with dry run, proceed with actual upgrade
|
||||||
|
if [[ "$DRYRUN_ERRORS" == "false" ]]; then
|
||||||
|
echo "No errors detected. Proceeding with upgrade..."
|
||||||
|
elastic_fleet_integration_policy_upgrade "$INTEGRATION_ID"
|
||||||
|
if [ $? -ne 0 ]; then
|
||||||
|
echo "Error: Upgrade failed for integration ID '$INTEGRATION_ID'."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
else
|
||||||
|
echo "Errors detected during dry run. Stopping upgrade..."
|
||||||
|
exit 1
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
fi
|
||||||
|
done
|
||||||
|
done
|
||||||
|
echo
|
||||||
128
salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py
Normal file
128
salt/elasticfleet/tools/sbin/so_elastic_defend_filters_helper.py
Normal file
@@ -0,0 +1,128 @@
|
|||||||
|
|
||||||
|
import hashlib
|
||||||
|
import os
|
||||||
|
import json
|
||||||
|
import yaml
|
||||||
|
import requests
|
||||||
|
from requests.auth import HTTPBasicAuth
|
||||||
|
import shutil
|
||||||
|
|
||||||
|
# Extract 'entries', 'description' and 'os_types' fields
|
||||||
|
def extract_relevant_fields(filter):
|
||||||
|
return {
|
||||||
|
'entries': filter.get('entries', []),
|
||||||
|
'description': filter.get('description', '')
|
||||||
|
}
|
||||||
|
|
||||||
|
# Sort for consistency, so that a hash can be generated
|
||||||
|
def sorted_data(value):
|
||||||
|
if isinstance(value, dict):
|
||||||
|
# Recursively sort the dictionary by key
|
||||||
|
return {k: sorted_data(v) for k, v in sorted(value.items())}
|
||||||
|
elif isinstance(value, list):
|
||||||
|
# Sort lists; for dictionaries, sort by a specific key
|
||||||
|
return sorted(value, key=lambda x: tuple(sorted(x.items())) if isinstance(x, dict) else x)
|
||||||
|
return value
|
||||||
|
|
||||||
|
# Generate a hash based on sorted relevant fields
|
||||||
|
def generate_hash(data):
|
||||||
|
sorted_data_string = json.dumps(sorted_data(data), sort_keys=True)
|
||||||
|
return hashlib.sha256(sorted_data_string.encode('utf-8')).hexdigest()
|
||||||
|
|
||||||
|
# Load Elasticsearch credentials from the config file
|
||||||
|
def load_credentials(config_path):
|
||||||
|
with open(config_path, 'r') as file:
|
||||||
|
for line in file:
|
||||||
|
if line.startswith("user"):
|
||||||
|
credentials = line.split('=', 1)[1].strip().strip('"')
|
||||||
|
return credentials
|
||||||
|
return None
|
||||||
|
|
||||||
|
# Extract username and password from credentials
|
||||||
|
def extract_auth_details(credentials):
|
||||||
|
if ':' in credentials:
|
||||||
|
return credentials.split(':', 1)
|
||||||
|
return None, None
|
||||||
|
|
||||||
|
# Generalized API request function
|
||||||
|
def api_request(method, guid, username, password, json_data=None):
|
||||||
|
headers = {
|
||||||
|
'kbn-xsrf': 'true',
|
||||||
|
'Content-Type': 'application/json'
|
||||||
|
}
|
||||||
|
auth = HTTPBasicAuth(username, password)
|
||||||
|
|
||||||
|
if method == "POST":
|
||||||
|
url = "http://localhost:5601/api/exception_lists/items?namespace_type=agnostic"
|
||||||
|
else:
|
||||||
|
url = f"http://localhost:5601/api/exception_lists/items?item_id={guid}&namespace_type=agnostic"
|
||||||
|
|
||||||
|
response = requests.request(method, url, headers=headers, auth=auth, json=json_data)
|
||||||
|
|
||||||
|
if response.status_code in [200, 201]:
|
||||||
|
return response.json() if response.content else True
|
||||||
|
elif response.status_code == 404 and method == "GET":
|
||||||
|
return None
|
||||||
|
else:
|
||||||
|
print(f"Error with {method} request: {response.status_code} - {response.text}")
|
||||||
|
return False
|
||||||
|
|
||||||
|
|
||||||
|
# Load YAML data for GUIDs to skip
|
||||||
|
def load_disabled(disabled_file_path):
|
||||||
|
if os.path.exists(disabled_file_path):
|
||||||
|
with open(disabled_file_path, 'r') as file:
|
||||||
|
return yaml.safe_load(file) or {}
|
||||||
|
return {}
|
||||||
|
|
||||||
|
def load_yaml_files(*dirs):
|
||||||
|
yaml_files = []
|
||||||
|
|
||||||
|
for dir_path in dirs:
|
||||||
|
if os.path.isdir(dir_path):
|
||||||
|
# Recurse through the directory and subdirectories
|
||||||
|
for root, dirs, files in os.walk(dir_path):
|
||||||
|
for file_name in files:
|
||||||
|
if file_name.endswith(".yaml"):
|
||||||
|
full_path = os.path.join(root, file_name)
|
||||||
|
with open(full_path, 'r') as f:
|
||||||
|
try:
|
||||||
|
yaml_content = yaml.safe_load(f)
|
||||||
|
yaml_files.append(yaml_content)
|
||||||
|
except yaml.YAMLError as e:
|
||||||
|
print(f"Error loading {full_path}: {e}")
|
||||||
|
else:
|
||||||
|
print(f"Invalid directory: {dir_path}")
|
||||||
|
|
||||||
|
return yaml_files
|
||||||
|
|
||||||
|
def prepare_custom_rules(input_file, output_dir):
|
||||||
|
# Clear the output directory first
|
||||||
|
if os.path.exists(output_dir):
|
||||||
|
shutil.rmtree(output_dir)
|
||||||
|
os.makedirs(output_dir, exist_ok=True)
|
||||||
|
|
||||||
|
try:
|
||||||
|
# Load the YAML file
|
||||||
|
with open(input_file, 'r') as f:
|
||||||
|
docs = yaml.safe_load_all(f)
|
||||||
|
|
||||||
|
for doc in docs:
|
||||||
|
if 'id' not in doc:
|
||||||
|
print(f"Skipping rule, no 'id' found: {doc}")
|
||||||
|
continue
|
||||||
|
if doc.get('title') in ["Template 1", "Template 2"]:
|
||||||
|
print(f"Skipping template rule with title: {doc['title']}")
|
||||||
|
continue
|
||||||
|
# Create a filename using the 'id' field
|
||||||
|
file_name = os.path.join(output_dir, f"{doc['id']}.yaml")
|
||||||
|
|
||||||
|
# Write the individual YAML file
|
||||||
|
with open(file_name, 'w') as output_file:
|
||||||
|
yaml.dump(doc, output_file, default_flow_style=False)
|
||||||
|
print(f"Created file: {file_name}")
|
||||||
|
|
||||||
|
except yaml.YAMLError as e:
|
||||||
|
print(f"Error parsing YAML: {e}")
|
||||||
|
except Exception as e:
|
||||||
|
print(f"Error processing file: {e}")
|
||||||
@@ -13,6 +13,9 @@
|
|||||||
|
|
||||||
LOG="/opt/so/log/elasticfleet/so-elastic-agent-gen-installers.log"
|
LOG="/opt/so/log/elasticfleet/so-elastic-agent-gen-installers.log"
|
||||||
|
|
||||||
|
# get the variables needed such as ELASTIC_AGENT_TARBALL_VERSION
|
||||||
|
get_elastic_agent_vars
|
||||||
|
|
||||||
# Check to see if we are already running
|
# Check to see if we are already running
|
||||||
NUM_RUNNING=$(pgrep -cf "/bin/bash /sbin/so-elastic-agent-gen-installers")
|
NUM_RUNNING=$(pgrep -cf "/bin/bash /sbin/so-elastic-agent-gen-installers")
|
||||||
[ "$NUM_RUNNING" -gt 1 ] && echo "$(date) - $NUM_RUNNING gen installers script processes running...exiting." >>$LOG && exit 0
|
[ "$NUM_RUNNING" -gt 1 ] && echo "$(date) - $NUM_RUNNING gen installers script processes running...exiting." >>$LOG && exit 0
|
||||||
@@ -36,6 +39,7 @@ printf "\n### Creating a temp directory at /nsm/elastic-agent-workspace\n"
|
|||||||
rm -rf /nsm/elastic-agent-workspace
|
rm -rf /nsm/elastic-agent-workspace
|
||||||
mkdir -p /nsm/elastic-agent-workspace
|
mkdir -p /nsm/elastic-agent-workspace
|
||||||
|
|
||||||
|
|
||||||
printf "\n### Extracting outer tarball and then each individual tarball/zip\n"
|
printf "\n### Extracting outer tarball and then each individual tarball/zip\n"
|
||||||
tar -xf /nsm/elastic-fleet/artifacts/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.tar.gz -C /nsm/elastic-agent-workspace/
|
tar -xf /nsm/elastic-fleet/artifacts/elastic-agent_SO-$ELASTIC_AGENT_TARBALL_VERSION.tar.gz -C /nsm/elastic-agent-workspace/
|
||||||
unzip -q /nsm/elastic-agent-workspace/elastic-agent-*.zip -d /nsm/elastic-agent-workspace/
|
unzip -q /nsm/elastic-agent-workspace/elastic-agent-*.zip -d /nsm/elastic-agent-workspace/
|
||||||
|
|||||||
@@ -5,6 +5,7 @@
|
|||||||
# this file except in compliance with the Elastic License 2.0.
|
# this file except in compliance with the Elastic License 2.0.
|
||||||
|
|
||||||
. /usr/sbin/so-common
|
. /usr/sbin/so-common
|
||||||
|
{%- import_yaml 'elasticsearch/defaults.yaml' as ELASTICSEARCHDEFAULTS %}
|
||||||
|
|
||||||
# Only run on Managers
|
# Only run on Managers
|
||||||
if ! is_manager_node; then
|
if ! is_manager_node; then
|
||||||
@@ -27,10 +28,10 @@ OUTDATED_LIST=$(jq -r '.items | map(.id) | (tojson)' <<< "$RAW_JSON")
|
|||||||
|
|
||||||
if [ "$OUTDATED_LIST" != '[]' ]; then
|
if [ "$OUTDATED_LIST" != '[]' ]; then
|
||||||
AGENTNUMBERS=$(jq -r '.total' <<< "$RAW_JSON")
|
AGENTNUMBERS=$(jq -r '.total' <<< "$RAW_JSON")
|
||||||
printf "Initiating upgrades for $AGENTNUMBERS Agents to Elastic $ELASTIC_AGENT_TARBALL_VERSION...\n\n"
|
printf "Initiating upgrades for $AGENTNUMBERS Agents to Elastic {{ELASTICSEARCHDEFAULTS.elasticsearch.version}}...\n\n"
|
||||||
|
|
||||||
# Generate updated JSON payload
|
# Generate updated JSON payload
|
||||||
JSON_STRING=$(jq -n --arg ELASTICVERSION $ELASTIC_AGENT_TARBALL_VERSION --arg UPDATELIST $OUTDATED_LIST '{"version": $ELASTICVERSION,"agents": $UPDATELIST }')
|
JSON_STRING=$(jq -n --arg ELASTICVERSION {{ELASTICSEARCHDEFAULTS.elasticsearch.version}} --arg UPDATELIST $OUTDATED_LIST '{"version": $ELASTICVERSION,"agents": $UPDATELIST }')
|
||||||
|
|
||||||
# Update Node Agents
|
# Update Node Agents
|
||||||
curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "http://localhost:5601/api/fleet/agents/bulk_upgrade" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING"
|
curl -K /opt/so/conf/elasticsearch/curl.config -L -X POST "http://localhost:5601/api/fleet/agents/bulk_upgrade" -H 'kbn-xsrf: true' -H 'Content-Type: application/json' -d "$JSON_STRING"
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
elasticsearch:
|
elasticsearch:
|
||||||
enabled: false
|
enabled: false
|
||||||
|
version: 8.14.3
|
||||||
index_clean: true
|
index_clean: true
|
||||||
config:
|
config:
|
||||||
action:
|
action:
|
||||||
@@ -2365,6 +2366,52 @@ elasticsearch:
|
|||||||
set_priority:
|
set_priority:
|
||||||
priority: 50
|
priority: 50
|
||||||
min_age: 30d
|
min_age: 30d
|
||||||
|
so-logs-barracuda_cloudgen_firewall_x_log:
|
||||||
|
index_sorting: False
|
||||||
|
index_template:
|
||||||
|
ignore_missing_component_templates:
|
||||||
|
- logs-barracuda_cloudgen_firewall.log@custom
|
||||||
|
index_patterns:
|
||||||
|
- "logs-barracuda_cloudgen_firewall.log-*"
|
||||||
|
template:
|
||||||
|
settings:
|
||||||
|
index:
|
||||||
|
lifecycle:
|
||||||
|
name: so-logs-barracuda_cloudgen_firewall.log-logs
|
||||||
|
number_of_replicas: 0
|
||||||
|
composed_of:
|
||||||
|
- "logs-barracuda_cloudgen_firewall.log@package"
|
||||||
|
- "logs-barracuda_cloudgen_firewall.log@custom"
|
||||||
|
- "so-fleet_globals-1"
|
||||||
|
- "so-fleet_agent_id_verification-1"
|
||||||
|
priority: 501
|
||||||
|
data_stream:
|
||||||
|
hidden: false
|
||||||
|
allow_custom_routing: false
|
||||||
|
policy:
|
||||||
|
phases:
|
||||||
|
cold:
|
||||||
|
actions:
|
||||||
|
set_priority:
|
||||||
|
priority: 0
|
||||||
|
min_age: 30d
|
||||||
|
delete:
|
||||||
|
actions:
|
||||||
|
delete: {}
|
||||||
|
min_age: 365d
|
||||||
|
hot:
|
||||||
|
actions:
|
||||||
|
rollover:
|
||||||
|
max_age: 30d
|
||||||
|
max_primary_shard_size: 50gb
|
||||||
|
set_priority:
|
||||||
|
priority: 100
|
||||||
|
min_age: 0ms
|
||||||
|
warm:
|
||||||
|
actions:
|
||||||
|
set_priority:
|
||||||
|
priority: 50
|
||||||
|
min_age: 30d
|
||||||
so-logs-carbonblack_edr_x_log:
|
so-logs-carbonblack_edr_x_log:
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
@@ -6555,6 +6602,52 @@ elasticsearch:
|
|||||||
set_priority:
|
set_priority:
|
||||||
priority: 50
|
priority: 50
|
||||||
min_age: 30d
|
min_age: 30d
|
||||||
|
so-logs-imperva_cloud_waf_x_event:
|
||||||
|
index_sorting: False
|
||||||
|
index_template:
|
||||||
|
ignore_missing_component_templates:
|
||||||
|
- logs-imperva_cloud_waf.event@custom
|
||||||
|
index_patterns:
|
||||||
|
- "logs-imperva_cloud_waf.event-*"
|
||||||
|
template:
|
||||||
|
settings:
|
||||||
|
index:
|
||||||
|
lifecycle:
|
||||||
|
name: so-logs-imperva_cloud_waf.event-logs
|
||||||
|
number_of_replicas: 0
|
||||||
|
composed_of:
|
||||||
|
- "logs-imperva_cloud_waf.event@package"
|
||||||
|
- "logs-imperva_cloud_waf.event@custom"
|
||||||
|
- "so-fleet_globals-1"
|
||||||
|
- "so-fleet_agent_id_verification-1"
|
||||||
|
priority: 501
|
||||||
|
data_stream:
|
||||||
|
hidden: false
|
||||||
|
allow_custom_routing: false
|
||||||
|
policy:
|
||||||
|
phases:
|
||||||
|
cold:
|
||||||
|
actions:
|
||||||
|
set_priority:
|
||||||
|
priority: 0
|
||||||
|
min_age: 30d
|
||||||
|
delete:
|
||||||
|
actions:
|
||||||
|
delete: {}
|
||||||
|
min_age: 365d
|
||||||
|
hot:
|
||||||
|
actions:
|
||||||
|
rollover:
|
||||||
|
max_age: 30d
|
||||||
|
max_primary_shard_size: 50gb
|
||||||
|
set_priority:
|
||||||
|
priority: 100
|
||||||
|
min_age: 0ms
|
||||||
|
warm:
|
||||||
|
actions:
|
||||||
|
set_priority:
|
||||||
|
priority: 50
|
||||||
|
min_age: 30d
|
||||||
so-logs-juniper_srx_x_log:
|
so-logs-juniper_srx_x_log:
|
||||||
index_sorting: false
|
index_sorting: false
|
||||||
index_template:
|
index_template:
|
||||||
|
|||||||
@@ -6,10 +6,11 @@
|
|||||||
{% from 'allowed_states.map.jinja' import allowed_states %}
|
{% from 'allowed_states.map.jinja' import allowed_states %}
|
||||||
{% if sls.split('.')[0] in allowed_states %}
|
{% if sls.split('.')[0] in allowed_states %}
|
||||||
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
{% from 'vars/globals.map.jinja' import GLOBALS %}
|
||||||
|
{% import_yaml 'elasticsearch/defaults.yaml' as ELASTICSEARCHDEFAULTS %}
|
||||||
|
|
||||||
so-elasticsearch_image:
|
so-elasticsearch_image:
|
||||||
docker_image.present:
|
docker_image.present:
|
||||||
- name: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elasticsearch:{{ GLOBALS.so_version }}
|
- name: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elasticsearch:{{ ELASTICSEARCHDEFAULTS.elasticsearch.version }}
|
||||||
|
|
||||||
{% else %}
|
{% else %}
|
||||||
|
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ include:
|
|||||||
|
|
||||||
so-elasticsearch:
|
so-elasticsearch:
|
||||||
docker_container.running:
|
docker_container.running:
|
||||||
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elasticsearch:{{ GLOBALS.so_version }}
|
- image: {{ GLOBALS.registry_host }}:5000/{{ GLOBALS.image_repo }}/so-elasticsearch:{{ ELASTICSEARCHMERGED.version }}
|
||||||
- hostname: elasticsearch
|
- hostname: elasticsearch
|
||||||
- name: so-elasticsearch
|
- name: so-elasticsearch
|
||||||
- user: elasticsearch
|
- user: elasticsearch
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"description": "Pipeline for pfSense",
|
"description": "Pipeline for PFsense",
|
||||||
"processors": [
|
"processors": [
|
||||||
{
|
{
|
||||||
"set": {
|
"set": {
|
||||||
|
|||||||
@@ -1,9 +1,14 @@
|
|||||||
{
|
{
|
||||||
"description": "Pipeline for parsing pfSense Suricata logs.",
|
"description": "Pipeline for parsing pfSense Suricata logs.",
|
||||||
"processors": [
|
"processors": [
|
||||||
|
{ "set": {
|
||||||
|
"field": "event.module",
|
||||||
|
"value": "suricata"
|
||||||
|
}
|
||||||
|
},
|
||||||
{
|
{
|
||||||
"pipeline": {
|
"pipeline": {
|
||||||
"name": "suricata.common"
|
"name": "suricata.common_pfsense"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
|
|||||||
414
salt/elasticsearch/files/ingest/logs-pfsense.log-1.19.1
Normal file
414
salt/elasticsearch/files/ingest/logs-pfsense.log-1.19.1
Normal file
@@ -0,0 +1,414 @@
|
|||||||
|
{
|
||||||
|
"description": "Pipeline for PFsense",
|
||||||
|
"processors": [
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "ecs.version",
|
||||||
|
"value": "8.11.0"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "observer.vendor",
|
||||||
|
"value": "netgate"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "observer.type",
|
||||||
|
"value": "firewall"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rename": {
|
||||||
|
"field": "message",
|
||||||
|
"target_field": "event.original",
|
||||||
|
"ignore_missing": true,
|
||||||
|
"if": "ctx.event?.original == null"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "event.kind",
|
||||||
|
"value": "event"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "event.timezone",
|
||||||
|
"value": "{{_tmp.tz_offset}}",
|
||||||
|
"if": "ctx._tmp?.tz_offset != null && ctx._tmp?.tz_offset != 'local'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"grok": {
|
||||||
|
"description": "Parse syslog header",
|
||||||
|
"field": "event.original",
|
||||||
|
"patterns": [
|
||||||
|
"^(%{ECS_SYSLOG_PRI})?%{TIMESTAMP} %{GREEDYDATA:message}"
|
||||||
|
],
|
||||||
|
"pattern_definitions": {
|
||||||
|
"ECS_SYSLOG_PRI": "<%{NONNEGINT:log.syslog.priority:long}>(\\d )?",
|
||||||
|
"TIMESTAMP": "(?:%{BSD_TIMESTAMP_FORMAT}|%{SYSLOG_TIMESTAMP_FORMAT})",
|
||||||
|
"BSD_TIMESTAMP_FORMAT": "%{SYSLOGTIMESTAMP:_tmp.timestamp}(%{SPACE}%{BSD_PROCNAME}|%{SPACE}%{OBSERVER}%{SPACE}%{BSD_PROCNAME})(\\[%{POSINT:process.pid:long}\\])?:",
|
||||||
|
"BSD_PROCNAME": "(?:\\b%{NAME:process.name}|\\(%{NAME:process.name}\\))",
|
||||||
|
"NAME": "[[[:alnum:]]_-]+",
|
||||||
|
"SYSLOG_TIMESTAMP_FORMAT": "%{TIMESTAMP_ISO8601:_tmp.timestamp8601}%{SPACE}%{OBSERVER}%{SPACE}%{PROCESS}%{SPACE}(%{POSINT:process.pid:long}|-) - (-|%{META})",
|
||||||
|
"TIMESTAMP_ISO8601": "%{YEAR}-%{MONTHNUM}-%{MONTHDAY}[T ]%{HOUR}:?%{MINUTE}(?::?%{SECOND})?%{ISO8601_TIMEZONE:event.timezone}?",
|
||||||
|
"OBSERVER": "(?:%{IP:observer.ip}|%{HOSTNAME:observer.name})",
|
||||||
|
"UNIXPATH": "(/([\\w_%!$@:.,+~-]+|\\\\.)*)*",
|
||||||
|
"PROCESS": "(\\(%{DATA:process.name}\\)|(?:%{UNIXPATH})%{BASEPATH:process.name})",
|
||||||
|
"BASEPATH": "[[[:alnum:]]_%!$@:.,+~-]+",
|
||||||
|
"META": "\\[[^\\]]*\\]"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": {
|
||||||
|
"if": "ctx._tmp.timestamp8601 != null",
|
||||||
|
"field": "_tmp.timestamp8601",
|
||||||
|
"target_field": "@timestamp",
|
||||||
|
"formats": [
|
||||||
|
"ISO8601"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"date": {
|
||||||
|
"if": "ctx.event?.timezone != null && ctx._tmp?.timestamp != null",
|
||||||
|
"field": "_tmp.timestamp",
|
||||||
|
"target_field": "@timestamp",
|
||||||
|
"formats": [
|
||||||
|
"MMM d HH:mm:ss",
|
||||||
|
"MMM d HH:mm:ss",
|
||||||
|
"MMM dd HH:mm:ss"
|
||||||
|
],
|
||||||
|
"timezone": "{{ event.timezone }}"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"grok": {
|
||||||
|
"description": "Set Event Provider",
|
||||||
|
"field": "process.name",
|
||||||
|
"patterns": [
|
||||||
|
"^%{HYPHENATED_WORDS:event.provider}"
|
||||||
|
],
|
||||||
|
"pattern_definitions": {
|
||||||
|
"HYPHENATED_WORDS": "\\b[A-Za-z0-9_]+(-[A-Za-z_]+)*\\b"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-firewall",
|
||||||
|
"if": "ctx.event.provider == 'filterlog'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-openvpn",
|
||||||
|
"if": "ctx.event.provider == 'openvpn'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-ipsec",
|
||||||
|
"if": "ctx.event.provider == 'charon'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-dhcp",
|
||||||
|
"if": "[\"dhcpd\", \"dhclient\", \"dhcp6c\"].contains(ctx.event.provider)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-unbound",
|
||||||
|
"if": "ctx.event.provider == 'unbound'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-haproxy",
|
||||||
|
"if": "ctx.event.provider == 'haproxy'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-php-fpm",
|
||||||
|
"if": "ctx.event.provider == 'php-fpm'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.19.1-squid",
|
||||||
|
"if": "ctx.event.provider == 'squid'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log-1.16.0-suricata",
|
||||||
|
"if": "ctx.event.provider == 'suricata'"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"drop": {
|
||||||
|
"if": "![\"filterlog\", \"openvpn\", \"charon\", \"dhcpd\", \"dhclient\", \"dhcp6c\", \"unbound\", \"haproxy\", \"php-fpm\", \"squid\", \"suricata\"].contains(ctx.event?.provider)"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"append": {
|
||||||
|
"field": "event.category",
|
||||||
|
"value": "network",
|
||||||
|
"if": "ctx.network != null"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"convert": {
|
||||||
|
"field": "source.address",
|
||||||
|
"target_field": "source.ip",
|
||||||
|
"type": "ip",
|
||||||
|
"ignore_failure": true,
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"convert": {
|
||||||
|
"field": "destination.address",
|
||||||
|
"target_field": "destination.ip",
|
||||||
|
"type": "ip",
|
||||||
|
"ignore_failure": true,
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "network.type",
|
||||||
|
"value": "ipv6",
|
||||||
|
"if": "ctx.source?.ip != null && ctx.source.ip.contains(\":\")"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "network.type",
|
||||||
|
"value": "ipv4",
|
||||||
|
"if": "ctx.source?.ip != null && ctx.source.ip.contains(\".\")"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"geoip": {
|
||||||
|
"field": "source.ip",
|
||||||
|
"target_field": "source.geo",
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"geoip": {
|
||||||
|
"field": "destination.ip",
|
||||||
|
"target_field": "destination.geo",
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"geoip": {
|
||||||
|
"ignore_missing": true,
|
||||||
|
"database_file": "GeoLite2-ASN.mmdb",
|
||||||
|
"field": "source.ip",
|
||||||
|
"target_field": "source.as",
|
||||||
|
"properties": [
|
||||||
|
"asn",
|
||||||
|
"organization_name"
|
||||||
|
]
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"geoip": {
|
||||||
|
"database_file": "GeoLite2-ASN.mmdb",
|
||||||
|
"field": "destination.ip",
|
||||||
|
"target_field": "destination.as",
|
||||||
|
"properties": [
|
||||||
|
"asn",
|
||||||
|
"organization_name"
|
||||||
|
],
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rename": {
|
||||||
|
"field": "source.as.asn",
|
||||||
|
"target_field": "source.as.number",
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rename": {
|
||||||
|
"field": "source.as.organization_name",
|
||||||
|
"target_field": "source.as.organization.name",
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rename": {
|
||||||
|
"field": "destination.as.asn",
|
||||||
|
"target_field": "destination.as.number",
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"rename": {
|
||||||
|
"field": "destination.as.organization_name",
|
||||||
|
"target_field": "destination.as.organization.name",
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"community_id": {
|
||||||
|
"target_field": "network.community_id",
|
||||||
|
"ignore_failure": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"grok": {
|
||||||
|
"field": "observer.ingress.interface.name",
|
||||||
|
"patterns": [
|
||||||
|
"%{DATA}.%{NONNEGINT:observer.ingress.vlan.id}"
|
||||||
|
],
|
||||||
|
"ignore_missing": true,
|
||||||
|
"ignore_failure": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "network.vlan.id",
|
||||||
|
"copy_from": "observer.ingress.vlan.id",
|
||||||
|
"ignore_empty_value": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"append": {
|
||||||
|
"field": "related.ip",
|
||||||
|
"value": "{{destination.ip}}",
|
||||||
|
"allow_duplicates": false,
|
||||||
|
"if": "ctx.destination?.ip != null"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"append": {
|
||||||
|
"field": "related.ip",
|
||||||
|
"value": "{{source.ip}}",
|
||||||
|
"allow_duplicates": false,
|
||||||
|
"if": "ctx.source?.ip != null"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"append": {
|
||||||
|
"field": "related.ip",
|
||||||
|
"value": "{{source.nat.ip}}",
|
||||||
|
"allow_duplicates": false,
|
||||||
|
"if": "ctx.source?.nat?.ip != null"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"append": {
|
||||||
|
"field": "related.hosts",
|
||||||
|
"value": "{{destination.domain}}",
|
||||||
|
"if": "ctx.destination?.domain != null"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"append": {
|
||||||
|
"field": "related.user",
|
||||||
|
"value": "{{user.name}}",
|
||||||
|
"if": "ctx.user?.name != null"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "network.direction",
|
||||||
|
"value": "{{network.direction}}bound",
|
||||||
|
"if": "ctx.network?.direction != null && ctx.network?.direction =~ /^(in|out)$/"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"remove": {
|
||||||
|
"field": [
|
||||||
|
"_tmp"
|
||||||
|
],
|
||||||
|
"ignore_failure": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"script": {
|
||||||
|
"lang": "painless",
|
||||||
|
"description": "This script processor iterates over the whole document to remove fields with null values.",
|
||||||
|
"source": "void handleMap(Map map) {\n for (def x : map.values()) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\n map.values().removeIf(v -> v == null || (v instanceof String && v == \"-\"));\n}\nvoid handleList(List list) {\n for (def x : list) {\n if (x instanceof Map) {\n handleMap(x);\n } else if (x instanceof List) {\n handleList(x);\n }\n }\n}\nhandleMap(ctx);\n"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"remove": {
|
||||||
|
"field": "event.original",
|
||||||
|
"if": "ctx.tags == null || !(ctx.tags.contains('preserve_original_event'))",
|
||||||
|
"ignore_failure": true,
|
||||||
|
"ignore_missing": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "global@custom",
|
||||||
|
"ignore_missing_pipeline": true,
|
||||||
|
"description": "[Fleet] Global pipeline for all data streams"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs@custom",
|
||||||
|
"ignore_missing_pipeline": true,
|
||||||
|
"description": "[Fleet] Pipeline for all data streams of type `logs`"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.integration@custom",
|
||||||
|
"ignore_missing_pipeline": true,
|
||||||
|
"description": "[Fleet] Pipeline for all data streams of type `logs` defined by the `pfsense` integration"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"pipeline": {
|
||||||
|
"name": "logs-pfsense.log@custom",
|
||||||
|
"ignore_missing_pipeline": true,
|
||||||
|
"description": "[Fleet] Pipeline for the `pfsense.log` dataset"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"on_failure": [
|
||||||
|
{
|
||||||
|
"remove": {
|
||||||
|
"field": [
|
||||||
|
"_tmp"
|
||||||
|
],
|
||||||
|
"ignore_failure": true
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"set": {
|
||||||
|
"field": "event.kind",
|
||||||
|
"value": "pipeline_error"
|
||||||
|
}
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"append": {
|
||||||
|
"field": "error.message",
|
||||||
|
"value": "{{{ _ingest.on_failure_message }}}"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"_meta": {
|
||||||
|
"managed_by": "fleet",
|
||||||
|
"managed": true,
|
||||||
|
"package": {
|
||||||
|
"name": "pfsense"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
16
salt/elasticsearch/files/ingest/suricata.alert_pfsense
Normal file
16
salt/elasticsearch/files/ingest/suricata.alert_pfsense
Normal file
@@ -0,0 +1,16 @@
|
|||||||
|
{
|
||||||
|
"description" : "suricata.alert",
|
||||||
|
"processors" : [
|
||||||
|
{ "set": { "field": "data_stream.dataset", "value": "suricata" } },
|
||||||
|
{ "set": { "field": "data_stream.namespace", "value": "so" } },
|
||||||
|
{ "set": { "field": "_index", "value": "logs-suricata.alerts-so" } },
|
||||||
|
{ "set": { "field": "tags","value": "alert" }},
|
||||||
|
{ "rename":{ "field": "message2.alert", "target_field": "rule", "ignore_failure": true } },
|
||||||
|
{ "rename":{ "field": "rule.signature", "target_field": "rule.name", "ignore_failure": true } },
|
||||||
|
{ "rename":{ "field": "rule.ref", "target_field": "rule.version", "ignore_failure": true } },
|
||||||
|
{ "rename":{ "field": "rule.signature_id", "target_field": "rule.uuid", "ignore_failure": true } },
|
||||||
|
{ "rename":{ "field": "rule.signature_id", "target_field": "rule.signature", "ignore_failure": true } },
|
||||||
|
{ "rename":{ "field": "message2.payload_printable", "target_field": "network.data.decoded", "ignore_failure": true } },
|
||||||
|
{ "pipeline": { "name": "common.nids" } }
|
||||||
|
]
|
||||||
|
}
|
||||||
23
salt/elasticsearch/files/ingest/suricata.common_pfsense
Normal file
23
salt/elasticsearch/files/ingest/suricata.common_pfsense
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
{
|
||||||
|
"description" : "suricata.common",
|
||||||
|
"processors" : [
|
||||||
|
{ "json": { "field": "message", "target_field": "message2", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.pkt_src", "target_field": "network.packet_source","ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.proto", "target_field": "network.transport", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.in_iface", "target_field": "observer.ingress.interface.name", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.flow_id", "target_field": "log.id.uid", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.src_ip", "target_field": "source.ip", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.src_port", "target_field": "source.port", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.dest_ip", "target_field": "destination.ip", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.dest_port", "target_field": "destination.port", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.vlan", "target_field": "network.vlan.id", "ignore_failure": true } },
|
||||||
|
{ "rename": { "field": "message2.community_id", "target_field": "network.community_id", "ignore_missing": true } },
|
||||||
|
{ "rename": { "field": "message2.xff", "target_field": "xff.ip", "ignore_missing": true } },
|
||||||
|
{ "set": { "field": "event.dataset", "value": "{{ message2.event_type }}" } },
|
||||||
|
{ "set": { "field": "observer.name", "value": "{{agent.name}}" } },
|
||||||
|
{ "set": { "field": "event.ingested", "value": "{{@timestamp}}" } },
|
||||||
|
{ "date": { "field": "message2.timestamp", "target_field": "@timestamp", "formats": ["ISO8601", "UNIX"], "timezone": "UTC", "ignore_failure": true } },
|
||||||
|
{ "remove":{ "field": "agent", "ignore_failure": true } },
|
||||||
|
{ "pipeline": { "if": "ctx?.event?.dataset != null", "name": "suricata.{{event.dataset}}_pfsense" } }
|
||||||
|
]
|
||||||
|
}
|
||||||
@@ -1,7 +1,13 @@
|
|||||||
elasticsearch:
|
elasticsearch:
|
||||||
enabled:
|
enabled:
|
||||||
description: You can enable or disable Elasticsearch.
|
description: Enables or disables the Elasticsearch process. This process provides the log event storage system. WARNING - Disabling this process is unsupported.
|
||||||
|
advanced: True
|
||||||
helpLink: elasticsearch.html
|
helpLink: elasticsearch.html
|
||||||
|
version:
|
||||||
|
description: "This specifies the version of the following containers: so-elastic-fleet-package-registry, so-elastic-agent, so-elastic-fleet, so-kibana, so-logstash and so-elasticsearch. Modifying this value in the Elasticsearch defaults.yaml will result in catastrophic grid failure."
|
||||||
|
readonly: True
|
||||||
|
global: True
|
||||||
|
advanced: True
|
||||||
esheap:
|
esheap:
|
||||||
description: Specify the memory heap size in (m)egabytes for Elasticsearch.
|
description: Specify the memory heap size in (m)egabytes for Elasticsearch.
|
||||||
helpLink: elasticsearch.html
|
helpLink: elasticsearch.html
|
||||||
@@ -376,6 +382,7 @@ elasticsearch:
|
|||||||
so-logs-azure_x_signinlogs: *indexSettings
|
so-logs-azure_x_signinlogs: *indexSettings
|
||||||
so-logs-azure_x_springcloudlogs: *indexSettings
|
so-logs-azure_x_springcloudlogs: *indexSettings
|
||||||
so-logs-barracuda_x_waf: *indexSettings
|
so-logs-barracuda_x_waf: *indexSettings
|
||||||
|
so-logs-barracuda_cloudgen_firewall_x_log: *indexSettings
|
||||||
so-logs-cef_x_log: *indexSettings
|
so-logs-cef_x_log: *indexSettings
|
||||||
so-logs-cisco_asa_x_log: *indexSettings
|
so-logs-cisco_asa_x_log: *indexSettings
|
||||||
so-logs-cisco_ftd_x_log: *indexSettings
|
so-logs-cisco_ftd_x_log: *indexSettings
|
||||||
@@ -430,6 +437,7 @@ elasticsearch:
|
|||||||
so-logs-httpjson_x_generic: *indexSettings
|
so-logs-httpjson_x_generic: *indexSettings
|
||||||
so-logs-iis_x_access: *indexSettings
|
so-logs-iis_x_access: *indexSettings
|
||||||
so-logs-iis_x_error: *indexSettings
|
so-logs-iis_x_error: *indexSettings
|
||||||
|
so-logs-imperva_cloud_waf_x_event: *indexSettings
|
||||||
so-logs-juniper_x_junos: *indexSettings
|
so-logs-juniper_x_junos: *indexSettings
|
||||||
so-logs-juniper_x_netscreen: *indexSettings
|
so-logs-juniper_x_netscreen: *indexSettings
|
||||||
so-logs-juniper_x_srx: *indexSettings
|
so-logs-juniper_x_srx: *indexSettings
|
||||||
|
|||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,36 @@
|
|||||||
|
{
|
||||||
|
"template": {
|
||||||
|
"mappings": {
|
||||||
|
"properties": {
|
||||||
|
"host": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"related": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"destination": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"source": {
|
||||||
|
"properties":{
|
||||||
|
"ip": {
|
||||||
|
"type": "ip"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user