Система Check Risk WAF готова к интеграции с ELK Stack сразу после развертывания как в кластерном, так и в all in one построении.

Внимание: NAT и внешние firewall в этой инструкции не рассматриваются. В инструкции рассматривается настройка передачи логов по протоколу Syslog на порт TCP/5514.

Порядок настройки передачи событий

№ шага Описание Скриншот
1

Перенесите минимальный комплект конфигураций на ВМ Elastic и распакуйте его в /opt/check-risk-elastic/.

scp check-risk-elastic-integration.zip ubuntu@<ELASTIC_IP>:/tmp/
ssh ubuntu@<ELASTIC_IP>
sudo apt-get install -y unzip
sudo install -d -m 0755 /opt/check-risk-elastic
sudo unzip -o /tmp/check-risk-elastic-integration.zip -d /opt/check-risk-elastic

В комплекте: 30-checkrisk.conf, logstash.conf, pipelines.yml и docker-compose.override.yml.

Шаг 1. Распаковка комплекта интеграции и список файлов в /opt/check-risk-elastic.
2

Установите rsyslog и подготовьте каталог файлов коллектора.

sudo apt-get update
sudo apt-get install -y rsyslog
sudo systemctl enable --now rsyslog
sudo install -d -o syslog -g adm -m 0755 /var/log/checkrisk
sudo touch /var/log/checkrisk/raw.log /var/log/checkrisk/events.ndjson
sudo chown syslog:adm /var/log/checkrisk/raw.log /var/log/checkrisk/events.ndjson
sudo chmod 0640 /var/log/checkrisk/raw.log
sudo chmod 0644 /var/log/checkrisk/events.ndjson
Шаг 2. Установка rsyslog и подготовка файлов коллектора.
3

Установите конфигурацию rsyslog и проверьте приём TCP Syslog.

sudo install -m 0644 /opt/check-risk-elastic/30-checkrisk.conf /etc/rsyslog.d/30-checkrisk.conf
sudo rsyslogd -N1
sudo systemctl restart rsyslog
sudo ss -lntp | grep 5514

Порт TCP 5514 должен слушать rsyslog. raw.log сохраняет исходные JSON, events.ndjson передаётся в Logstash.

Шаг 3. Проверка конфигурации rsyslog и прослушивания TCP 5514.
4

Установите pipeline Logstash и подключение каталога логов.

sudo install -m 0644 /opt/check-risk-elastic/logstash.conf /opt/elastic-stack/logstash/pipeline/logstash.conf
sudo install -m 0644 /opt/check-risk-elastic/pipelines.yml /opt/elastic-stack/logstash/config/pipelines.yml
sudo install -m 0644 /opt/check-risk-elastic/docker-compose.override.yml /opt/elastic-stack/docker-compose.override.yml
cd /opt/elastic-stack
sudo docker compose config --quiet

В .env должен быть задан ELASTIC_PASSWORD пользователя elastic.

Шаг 4. Копирование файлов настройки Logstash и проверка Docker Compose.
5

Проверьте pipeline Logstash и перезапустите только Logstash.

cd /opt/elastic-stack
sudo docker compose run --rm --no-deps logstash /usr/share/logstash/bin/logstash --path.settings /usr/share/logstash/config --config.test_and_exit -f /usr/share/logstash/pipeline/logstash.conf
sudo docker compose up -d --force-recreate --no-deps logstash
sudo docker compose ps logstash

В логах должны появиться Pipeline started и file input для /var/log/checkrisk/events.ndjson.

Шаг 5. Проверка конфигурации Logstash и перезапуск контейнера.
6

Создайте index template и Data Views.

cd /opt/elastic-stack
curl -sS -u elastic -H 'Content-Type: application/json' -X PUT http://127.0.0.1:9200/_index_template/check-risk-waf -d '{"index_patterns":["check-risk-waf-*"],"template":{"settings":{"number_of_shards":1,"number_of_replicas":0}},"priority":100}'
Шаг 6. Создание шаблона индексов check-risk-waf-* и ответ acknowledged.
7

В Check Risk WAF включите отправку Syslog и задайте параметры.

Хост — внешний IP или DNS Elastic Stack Порт — 5514 Тип подключения — TCP Отправлять access-события — включить Отправлять audit-события — включить

Сохраните настройки отправки событий.

Шаг 7. Параметры отправки Syslog из Check Risk WAF.
8

Отправьте тестовое RFC 6587 событие с хоста, который видит внешний адрес Elastic.

export CHECK_RISK_HOST=<PUBLIC_IP_OR_DNS>

python3 - <<'PY'
import datetime
import json
import os
import socket
import uuid

def send_event(event):
    event["event_time"] = datetime.datetime.now(
        datetime.timezone.utc
    ).isoformat(timespec="seconds").replace("+00:00", "Z")

    data = json.dumps(event, separators=(",", ":")).encode()

    with socket.create_connection(
        (os.environ["CHECK_RISK_HOST"], 5514), 5
    ) as sock:
        sock.sendall(str(len(data)).encode() + b" " + data)

    print("SENT:", event["type"], event["request_id"])

send_event({
    "type": "audit",
    "request_id": "elastic-audit-" + uuid.uuid4().hex[:8],
    "domain": "test.example.com",
    "client_ip": "203.0.113.7",
    "uri": "/audit-test",
    "status": 403,
    "rule_id": 942100,
    "action": "BLOCK"
})

send_event({
    "type": "access",
    "request_id": "elastic-access-" + uuid.uuid4().hex[:8],
    "domain": "test.example.com",
    "client_ip": "203.0.113.7",
    "uri": "/access-test",
    "status": 200,
    "action": "ALLOW"
})
PY
Шаг 8. Тестовый Python-код отправки audit- и access-событий и сообщения SENT.
9

Добавление DataView

Перейдите в Management -> Stack Management -> Kibana Data Views -> Create a data view и добавьте индексы check-risk-waf-access-*, check-risk-waf-audit-* и check-risk-waf-raw-*.

Шаг 9. Создание Data View для check-risk-waf-access-*.
Шаг 9. Создание Data View для check-risk-waf-audit-*.
Шаг 9. Создание Data View для check-risk-waf-raw-*.
10

Проверьте прохождение и получение событий.

В Discover выберите check-risk-waf-audit-* или check-risk-waf-access-* и нажмите Refresh.

Шаг 10. Просмотр audit-событий Check Risk WAF в Discover.