Как установить и настроить Suricata IDS вместе с Elastic Stack в Rocky Linux 8
На этой странице
- Предпосылки
- Настройка брандмауэра
- ЧАСТЬ 1
- Шаг 1. Установите Suricata
- Шаг 2. Настройка Suricata
- Включить идентификатор сообщества
- Выберите сетевой интерфейс
- Перезагрузить действующее правило
- Настройка разрешений каталога
- Добавить поставщиков наборов правил
- Настройка брандмауэра
- Запустить Elasticsearch
- Создание паролей Elasticsearch
- Настройка порта Kibana
- Настройка доступа к Kibana
- Запуск Кибаны
- Использование локального туннеля SSH
- Использование обратного прокси-сервера Nginx
- Настройка брандмауэра
- Установка и настройка SSL
- Установка и настройка Nginx
Suricata — это инструмент мониторинга сети, который проверяет и обрабатывает каждый пакет интернет-трафика, проходящий через ваш сервер. Он может генерировать события журнала, инициировать оповещения и сбрасывать трафик при обнаружении любой подозрительной активности.
Вы можете установить Suricata на отдельном компьютере для мониторинга его трафика или развернуть на хосте-шлюзе для сканирования всего входящего и исходящего трафика с других серверов, подключенных к нему. Вы можете комбинировать Suricata с Elasticsearch, Kibana и Filebeat для создания инструмента управления информацией и событиями безопасности (SIEM).
В этом руководстве вы установите Suricata IDS вместе с ElasticStack на сервер Rocky Linux 8. Различные компоненты стека:
- Elasticsearch для хранения, индексации, корреляции и поиска событий безопасности с сервера.
- Kibana для отображения журналов, хранящихся в Elasticsearch.
- Filebeat анализирует файл журнала Suricatas
eve.json
и отправляет каждое событие в Elasticsearch для обработки. - Suricata сканирует сетевой трафик на наличие подозрительных событий и отбрасывает недействительные пакеты.
Учебное пособие разделено на две части: первая часть посвящена установке и настройке Suricata, а вторая — установке и настройке Elastic Stack.
Для нашего руководства мы установим Suricata и стек Elastic на разных серверах.
Предпосылки
-
The servers hosting the Elastic Stack and Suricata should have a minimum of 4GB RAM and 2 CPU cores.
-
The servers should be able to communicate with each other using private IP addresses.
-
The servers should be running Rocky Linux 8 with a non-root sudo user.
-
If you want to access Kibana dashboards from everywhere, set up a domain (
kibana.example.com
) pointing to the server where Suricata will be installed. -
Install essential packages on both servers.
$ sudo dnf install yum-utils nano curl
Настроить брандмауэр
ЧАСТЬ 1
Шаг 1 - Установите Suricata
Чтобы установить Suricata, вам необходимо добавить репозиторий пакетов Open Information Security Foundations (OISF) на ваш сервер.
$ sudo dnf install 'dnf-command(copr)' $ sudo dnf copr enable @oisf/suricata-6.0
Первая команда включает проекты сообщества (
copr
) для установщика пакетаdnf
. Вторая команда включает и добавляет репозиторий OISF в вашу систему.suricata-6.0
включает репозиторий для последней стабильной версии программного обеспечения. Нажимайтеy
иENTER
каждый раз, когда вам будет предложено.Затем добавьте репозиторий EPEL.
$ sudo dnf install epel-release
Установите Сурикату.
$ sudo dnf install suricata
Включите службу Suricata.
$ sudo systemctl enable suricata
Шаг 2 — Настройте Suricata
Suricata хранит свою конфигурацию в файле
/etc/suricata/suricata.yaml
. Режимом по умолчанию для Suricata является режим IDS (система обнаружения вторжений), в котором трафик только регистрируется, а не останавливается. Если вы новичок в Suricata, вам следует оставить режим без изменений. После того, как вы настроили его и узнали больше, вы можете включить режим IPS (система предотвращения вторжений).Включить идентификатор сообщества
Поле идентификатора сообщества упрощает сопоставление данных между записями, созданными различными инструментами мониторинга. Поскольку мы будем использовать Suricata с Elasticsearch, включение идентификатора сообщества может быть полезным.
Откройте файл
/etc/suricata/suricata.yaml
для редактирования.$ sudo nano /etc/suricata/suricata.yaml
Найдите строку
# Community Flow ID
и установите для переменнойcommunity-id
значениеtrue
.. . . # Community Flow ID # Adds a 'community_id' field to EVE records. These are meant to give # records a predictable flow ID that can be used to match records to # output of other tools such as Zeek (Bro). # # Takes a 'seed' that needs to be same across sensors and tools # to make the id less predictable. # enable/disable the community id feature. community-id: true . . .
Теперь ваши события будут иметь идентификатор, например
1:S+3BA2UmrHK0Pk+u3XH78GAFTtQ=
, который вы можете использовать для сопоставления наборов данных в различных инструментах мониторинга.Выберите сетевой интерфейс
Файл конфигурации Suricata по умолчанию проверяет трафик на устройстве/сетевом интерфейсе
eth0
. Если ваш сервер использует другой сетевой интерфейс, вам нужно будет обновить его в конфигурации.Проверьте имя устройства вашего сетевого интерфейса, используя следующую команду.
$ ip -p -j route show default
Вы получите вывод, подобный следующему.
[ { "dst": "default", "gateway": "164.90.192.1", "dev": "eth0", "protocol": "static", "metric": 100, "flags": [ ] } ]
Переменная
dev
относится к сетевому устройству. В нашем выводе он показываетeth0
как сетевое устройство. Ваш вывод может отличаться в зависимости от вашей системы.Теперь, когда вы знаете имя своего устройства, откройте файл конфигурации.
$ sudo nano /etc/suricata/suricata.yaml
Найдите строку
af-packet:
вокруг строки номер 580. Под ней установите значение переменнойinterface
на имя устройства для вашей системы.# Linux high speed capture support af-packet: - interface: eth0 # Number of receive threads. "auto" uses the number of cores #threads: auto # Default clusterid. AF_PACKET will load balance packets based on flow. cluster-id: 99 . . .
Если вы хотите добавить дополнительные интерфейсы, вы можете сделать это, добавив их внизу раздела
af-packet
примерно на строке 650.Чтобы добавить новый интерфейс, вставьте его чуть выше раздела
-interface: default
, как показано ниже.# For eBPF and XDP setup including bypass, filter and load balancing, please # see doc/userguide/capture-hardware/ebpf-xdp.rst for more info. - interface: enp0s1 cluster-id: 98 ... - interface: default #threads: auto #use-mmap: no #tpacket-v3: yes
В нашем примере мы добавили новый интерфейс
enp0s1
и уникальное значение для переменнойcluster-id
. Вам необходимо включить уникальный идентификатор кластера в каждый добавляемый интерфейс.Перезагрузка действующих правил
Вам необходимо перезапускать Suricata каждый раз, когда вы добавляете, удаляете или редактируете ее правила. Включив Live Rule, Suricata может обрабатывать любые изменения правил без перезапуска.
Чтобы включить динамическую перезагрузку, добавьте следующие строки в конец файла конфигурации.
. . . detect-engine: - rule-reload: true
При включенной перезагрузке в реальном времени вы можете использовать следующую команду для перезагрузки правил без перезапуска процесса Suricata.
$ sudo kill -usr2 $(pidof suricata)
Флаг
$ (pidof suricata)
определяет идентификатор процесса Suricata. Часть-usr2
командыkill
отправляет сигналSIGUSR2
процессу Suricata. СигналSIGUSR2
настроен с помощью Suricata для перезагрузки правил.Когда вы закончите, сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Настройка разрешений каталога
Suricata автоматически создала системного пользователя и группу с именем
suricata
в процессе установки. Вам необходимо предоставить надлежащие права доступа к каталогу, чтобы установка работала должным образом.Выполните следующую команду, чтобы установить
suricata
в качестве группы для каталогов Suricatas.$ sudo chgrp -R suricata /etc/suricata $ sudo chgrp -R suricata /var/lib/suricata/rules $ sudo chgrp -R suricata /var/lib/suricata/update $ sudo chgrp -R suricata /var/log/suricata
Установите права группы на чтение и запись.
$ sudo chmod -R g+r /etc/suricata/ $ sudo chmod -R g+rw /var/lib/suricata/rules $ sudo chmod -R g+rw /var/lib/suricata/update $ sudo chmod -R g+rw /var/log/suricata
Добавьте свое текущее имя пользователя в группу suricata, чтобы выполнять операции напрямую, без использования sudo.
$ sudo usermod -a -G suricata $USER
Чтобы применить новое членство в группе, выйдите из сервера и снова войдите или введите следующее:
$ su - ${USER}
Вам будет предложено ввести пароль пользователя, чтобы продолжить.
Подтвердите, что ваш пользователь теперь добавлен в группу suricata, набрав:
$ id -nG username sudo suricata
Шаг 3 — Настройка правил Suricata
Suricata по умолчанию использует только ограниченный набор правил для обнаружения сетевого трафика. Вы можете добавить дополнительные наборы правил от внешних поставщиков с помощью инструмента под названием
suricata-update
. Выполните следующую команду, чтобы включить дополнительные правила.$ suricata-update 16/2/2022 -- 07:00:16 - <Info> -- Using data-directory /var/lib/suricata. 16/2/2022 -- 07:00:16 - <Info> -- Using Suricata configuration /etc/suricata/suricata.yaml 16/2/2022 -- 07:00:16 - <Info> -- Using /usr/share/suricata/rules for Suricata provided rules. ..... 16/2/2022 -- 07:00:16 - <Info> -- No sources configured, will use Emerging Threats Open ('https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz', None, True) 16/2/2022 -- 07:00:16 - <Info> -- Checking https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz.md5. 16/2/2022 -- 07:00:16 - <Info> -- Fetching https://rules.emergingthreats.net/open/suricata-6.0.4/emerging.rules.tar.gz. 100% - 3162050/3162050 ..... 16/2/2022 -- 07:00:23 - <Info> -- Writing rules to /var/lib/suricata/rules/suricata.rules: total: 32004; enabled: 24611; added: 8; removed 1; modified: 1218 16/2/2022 -- 07:00:23 - <Info> -- Writing /var/lib/suricata/rules/classification.config 16/2/2022 -- 07:00:23 - <Info> -- Testing with suricata -T. 16/2/2022 -- 07:01:16 - <Info> -- Done.
Добавить поставщиков наборов правил
Вы можете расширить правила Suricatas, добавив дополнительных поставщиков. Он может получать правила от различных бесплатных и коммерческих поставщиков.
Вы можете просмотреть список поставщиков по умолчанию, используя следующую команду.
$ suricata-update list-sources
Например, если вы хотите включить набор правил
tgreen/hunting
, вы можете включить его с помощью следующей команды.$ suricata-update enable-source tgreen/hunting
Запустите команду
suricata-update
еще раз, чтобы загрузить и обновить новые правила.Шаг 4 — Проверка конфигурации Suricata
Suricata поставляется с инструментом проверки для проверки файла конфигурации и правил на наличие ошибок. Выполните следующую команду, чтобы запустить средство проверки.
$ sudo suricata -T -c /etc/suricata/suricata.yaml -v 22/2/2022 -- 23:20:10 - <Info> - Running suricata under test mode 22/2/2022 -- 23:20:10 - <Notice> - This is Suricata version 6.0.4 RELEASE running in SYSTEM mode 22/2/2022 -- 23:20:10 - <Info> - CPUs/cores online: 2 22/2/2022 -- 23:20:10 - <Info> - dropped the caps for main thread 22/2/2022 -- 23:20:10 - <Info> - fast output device (regular) initialized: fast.log 22/2/2022 -- 23:20:10 - <Info> - eve-log output device (regular) initialized: eve.json 22/2/2022 -- 23:20:10 - <Info> - stats output device (regular) initialized: stats.log 22/2/2022 -- 23:20:21 - <Info> - 1 rule files processed. 24611 rules successfully loaded, 0 rules failed 22/2/2022 -- 23:20:21 - <Info> - Threshold config parsed: 0 rule(s) found 22/2/2022 -- 23:20:21 - <Info> - 24614 signatures processed. 1216 are IP-only rules, 4120 are inspecting packet payload, 19074 inspect application layer, 108 are decoder event only 22/2/2022 -- 23:21:02 - <Notice> - Configuration provided was successfully loaded. Exiting. 22/2/2022 -- 23:21:03 - <Info> - cleaning up signature grouping structure... complete
Флаг
-T
указывает Suricata работать в режиме тестирования, флаг-c
настраивает расположение файла конфигурации, а-v
выводит подробный вывод команды. В зависимости от конфигурации вашей системы и количества добавленных правил выполнение команды может занять несколько минут.Шаг 5 — Запуск Suricata
Теперь, когда Suricata настроена и настроена, пришло время запустить приложение.
$ sudo systemctl start suricata
Проверьте статус процесса.
$ sudo systemctl status suricata
Вы должны увидеть следующий вывод, если все работает правильно.
? suricata.service - Suricata Intrusion Detection Service Loaded: loaded (/usr/lib/systemd/system/suricata.service; enabled; vendor preset: disabled) Active: active (running) since Wed 2022-02-16 07:14:22 UTC; 32min ago Docs: man:suricata(1) Process: 1494 ExecStartPre=/bin/rm -f /var/run/suricata.pid (code=exited, status=0/SUCCESS) Main PID: 1496 (Suricata-Main) Tasks: 8 (limit: 23479) Memory: 367.5M CGroup: /system.slice/suricata.service ??1496 /sbin/suricata -c /etc/suricata/suricata.yaml --pidfile /var/run/suricata.pid -i eth0 --user suricata Feb 16 07:14:22 suricata systemd[1]: Starting Suricata Intrusion Detection Service... Feb 16 07:14:22 suricata systemd[1]: Started Suricata Intrusion Detection Service.
Процесс может занять несколько минут, чтобы завершить синтаксический анализ всех правил. Таким образом, приведенная выше проверка состояния не является полным показателем того, запущена ли Suricata и готова ли она к работе. Вы можете отслеживать файл журнала для этого, используя следующую команду.
$ sudo tail -f /var/log/suricata/suricata.log
Если вы видите следующую строку в файле журнала, это означает, что Suricata запущена и готова отслеживать сетевой трафик.
16/02/2022 -- 07:18:39 - <Info> - All AFP capture threads are running.
Шаг 6 — Тестирование правил Suricata
Мы проверим, обнаруживает ли Suricata какой-либо подозрительный трафик. В руководстве Suricata рекомендуется протестировать номер правила ET Open 2100498 с помощью следующей команды.
$ curl http://testmynids.org/uid/index.html
Вы получите следующий ответ.
uid=0(root) gid=0(root) groups=0(root)
Приведенная выше команда якобы возвращает вывод команды
id
, которую можно запустить на скомпрометированной системе. Чтобы проверить, обнаружил ли Suricata трафик, вам необходимо проверить файл журнала, используя указанный номер правила.$ grep 2100498 /var/log/suricata/fast.log
Если в вашем запросе использовался IPv6, вы должны увидеть следующий вывод.
02/22/2022-23:24:33.997371 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 2600:9000:2204:5c00:0018:30b3:e400:93a1:80 -> 2a03:b0c0:0002:00d0:0000:0000:0fc2:b001:41468
Если в вашем запросе используется IPv4, вы увидите следующий вывод.
02/22/2022-23:21:46.783476 [**] [1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] {TCP} 204.246.178.81:80 -> 164.90.192.1:36364
Suricata также записывает события в файл
/var/log/suricata/eve.log
в формате JSON. Чтобы прочитать и интерпретировать эти правила, вам необходимо установитьjq
, что выходит за рамки этого руководства.Мы закончили первую часть руководства, в которой мы установили Suricata и протестировали ее. Следующая часть включает в себя установку стека ELK и его настройку для визуализации Suricata и ее журналов. Эта вторая часть руководства должна выполняться на втором сервере, если не указано иное.
Шаг 7 — Установите Elasticsearch и Kibana
Первым шагом в установке Elasticsearch является добавление ключа Elastic GPG на ваш сервер.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Создайте репозиторий для пакета Elasticsearch, создав и открыв файл
/etc/yum/yum.repos.d/elasticsearch.repo
для редактирования.$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Вставьте в него следующий код.
[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Установите Elasticsearch и Kibana.
$ sudo dnf install --enablerepo=elasticsearch elasticsearch kibana
Вам нужно использовать флаг
--enablerepo=elasticsearch
каждый раз, так как мы отключили репозиторий по умолчанию. Это предотвращает случайное обновление этих пакетов.Найдите частный IP-адрес вашего сервера, используя следующую команду.
$ ip -brief address show lo UNKNOWN 127.0.0.1/8 ::1/128 eth0 UP 164.90.205.77/20 10.18.0.7/16 2a03:b0c0:2:d0::fef:b001/64 fe80::340a:6eff:fe5c:76ed/64 eth1 UP 10.133.0.3/16 fe80::906f:b5ff:fec4:c7b8/64
Запишите частный IP-адрес вашего сервера (в данном случае 10.133.0.3). Мы будем называть его
your_private_IP
. Общедоступный IP-адрес сервера (164.90.205.77) будет называтьсяyour_public_IP
в оставшемся руководстве. Также обратите внимание на сетевое имя вашего сервера,eth1
.Шаг 8 — Настройте Elasticsearch
Elasticsearch хранит свою конфигурацию в файле
/etc/elasticsearch/elasticsearch.yml
. Откройте файл для редактирования.$ sudo nano /etc/elasticsearch/elasticsearch.yml
Elasticsearch по умолчанию принимает только локальные подключения. Нам нужно изменить его, чтобы Kibana могла получить к нему доступ через частный IP-адрес.
Найдите строку
#network.host: 192.168.0.1
и добавьте следующую строку прямо под ней, как показано ниже.# By default Elasticsearch is only accessible on localhost. Set a different # address here to expose this node on the network: # #network.host: 192.168.0.1 network.bind_host: ["127.0.0.1", "your_private_IP"] # # By default Elasticsearch listens for HTTP traffic on the first free port it # finds starting at 9200. Set a specific HTTP port here:
Это гарантирует, что Elastic по-прежнему сможет принимать локальные подключения, оставаясь при этом доступным для Kibana через частный IP-адрес.
Следующий шаг — включить некоторые функции безопасности и убедиться, что Elastic настроен для работы на одном узле. Для этого добавьте следующие строки в конец файла.
. . . discovery.type: single-node xpack.security.enabled: true
Если вы собираетесь использовать несколько узлов поиска Elastic, вы можете пропустить первую строку.
Когда вы закончите, сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Настроить брандмауэр
Добавьте правильные правила брандмауэра для Elasticsearch, чтобы он был доступен через частную сеть.
$ sudo firewall-cmd --permanent --zone=internal --change-interface=eth1 $ sudo firewall-cmd --permanent --zone=internal --add-service=elasticsearch $ sudo firewall-cmd --permanent --zone=internal --add-service=kibana $ sudo firewall-cmd --reload
Убедитесь, что вы выбрали имя интерфейса в первой команде, подобное тому, которое вы получили на шаге 7. Приведенные выше команды изменяют зону брандмауэра по умолчанию на внутреннюю и открывают порты 9200, 9300 для Elasticsearch и порт 5601 для Kibana.
Запустить Elasticsearch
Теперь, когда вы настроили Elasticsearch, пришло время запустить службу.
$ sudo systemctl start elasticsearch
Создание паролей Elasticsearch
После включения настроек безопасности Elasticsearch следующим шагом будет создание паролей для пользователя по умолчанию. Elasticsearch поставляется с утилитой для создания паролей по адресу
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords
, которая может генерировать случайные пароли.Создайте пароли.
$ cd /usr/share/elasticsearch/bin $ sudo ./elasticsearch-setup-passwords auto
Вы получите результат, подобный следующему. Нажмите
y
, чтобы продолжить, когда будет предложено.Initiating the setup of passwords for reserved users elastic,apm_system,kibana,kibana_system,logstash_system,beats_system,remote_monitoring_user. The passwords will be randomly generated and printed to the console. Please confirm that you would like to continue [y/N]y Changed password for user apm_system PASSWORD apm_system = EtwMg8maU67o5tvD5rse Changed password for user kibana_system PASSWORD kibana_system = dTanR7Q2HtgDtATRvuJv Changed password for user kibana PASSWORD kibana = dTanR7Q2HtgDtATRvuJv Changed password for user logstash_system PASSWORD logstash_system = XGSjxNktuNMWVfGYibox Changed password for user beats_system PASSWORD beats_system = JXTr7CeHkMue608qVTQa Changed password for user remote_monitoring_user PASSWORD remote_monitoring_user = Q6JTJNl3lPy0fhy6QuMP Changed password for user elastic PASSWORD elastic = bd1YJfhSa8RC8SMvTIwg
Вы можете запустить утилиту только один раз, поэтому сохраните все пароли в безопасном месте.
Шаг 9 — Настройте Кибану
Первым шагом в настройке Kibana является включение функции безопасности
xpack
путем создания секретных ключей. Kibana использует эти секретные ключи для хранения данных в Elasticsearch. Доступ к утилите для создания секретных ключей можно получить из каталога/usr/share/kibana/bin
.$ cd /usr/share/kibana/bin/ $ sudo ./kibana-encryption-keys generate -q --force
Флаг
-q
подавляет командные инструкции, а флаг--force
обеспечивает создание новых секретов. Вы получите вывод, подобный следующему.xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5 xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed
Скопируйте вывод. Откройте файл конфигурации Kibanas по адресу
/etc/kibana/kibana.yml
для редактирования.$ sudo nano /etc/kibana/kibana.yml
Вставьте код из предыдущей команды в конец файла.
. . . # Specifies locale to be used for all localizable strings, dates and number formats. # Supported languages are the following: English - en , by default , Chinese - zh-CN . #i18n.locale: "en" xpack.encryptedSavedObjects.encryptionKey: 0f4e5e1cf8fad1874ffed0faac6be0da xpack.reporting.encryptionKey: d435c78a4e37521e539c0e905420c9f5 xpack.security.encryptionKey: 7ba0e2a02747bb90fb0f9a3c267b99ed
Настроить порт Кибана
Kibana необходимо настроить так, чтобы он был доступен на частном IP-адресе сервера. Найдите строку
#server.host: \localhost\
в файле и добавьте следующую строку прямо под ней, как показано.# Kibana is served by a back end server. This setting specifies the port to use. #server.port: 5601 # Specifies the address to which the Kibana server will bind. IP addresses and host names are both valid values. # The default is 'localhost', which usually means remote machines will not be able to connect. # To allow connections from remote users, set this parameter to a non-loopback address. #server.host: "localhost" server.host: "your_private_IP"
Когда вы закончите, сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Настроить доступ к Кибане
Следующим шагом является создание имени пользователя и пароля, которые Kibana может использовать для аутентификации. Вы можете сделать это, напрямую отредактировав файл конфигурации Kibanas, но это может привести к проблемам с безопасностью. Безопасный метод предполагает использование приложения
kibana-keystore
.Выполните следующие команды, чтобы установить имя пользователя. Введите
kibana_system
в качестве имени пользователя.$ cd /usr/share/kibana/bin $ sudo ./kibana-keystore add elasticsearch.username Enter value for elasticsearch.username: *************
Запустите команду еще раз, чтобы установить пароль. Убедитесь, что вы используете пароль, который вы создали для Kibana на шаге 8. В нашем руководстве используется пароль
dTanR7Q2HtgDtATRvuJv
.$ sudo ./kibana-keystore add elasticsearch.password Enter value for elasticsearch.password: ********************
Запуск Кибаны
Теперь, когда вы настроили безопасный доступ и сеть для Kibana, начните процесс.
$ sudo systemctl start kibana
Проверьте статус, чтобы увидеть, работает ли он.
$ sudo systemctl status kibana
Шаг 10 — Установите и настройте Filebeat
Важно отметить, что мы будем устанавливать Filebeat на сервер Suricata. Так что вернитесь к нему и добавьте ключ Elastic GPG, чтобы начать.
$ sudo rpm --import https://artifacts.elastic.co/GPG-KEY-elasticsearch
Создайте и откройте эластичный репозиторий.
$ sudo nano /etc/yum.repos.d/elasticsearch.repo
Вставьте следующий код.
[elasticsearch] name=Elasticsearch repository for 7.x packages baseurl=https://artifacts.elastic.co/packages/7.x/yum gpgcheck=1 gpgkey=https://artifacts.elastic.co/GPG-KEY-elasticsearch enabled=0 autorefresh=1 type=rpm-md
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Установите файлбит.
$ sudo dnf install --enablerepo=elasticsearch filebeat
Filebeat хранит свою конфигурацию в файле
/etc/filebeat/filebeat.yml
. Откройте его для редактирования.$ sudo nano /etc/filebeat/filebeat.yml
Первое, что вам нужно сделать, это подключить его к панели инструментов Kibanas. Найдите строку
#host: \localhost:5601\
в разделе Kibana и добавьте следующую строку прямо под ней, как показано.. . . # Starting with Beats version 6.0.0, the dashboards are loaded via the Kibana API. # This requires a Kibana endpoint configuration. setup.kibana: # Kibana Host # Scheme and port can be left out and will be set to the default (http and 5601) # In case you specify and additional path, the scheme is required: http://localhost:5601/path # IPv6 addresses should always be defined as: https://[2001:db8::1]:5601 #host: "localhost:5601" host: "your_private_IP:5601" . . .
Затем найдите раздел файла Elasticsearch Output и отредактируйте значения
hosts
,имя пользователя
ипароль
как показано ниже. Для имени пользователя выберитеelastic
в качестве значения, а для пароля используйте значение, созданное на шаге 8 этого руководства.output.elasticsearch: # Array of hosts to connect to. hosts: ["your_private_IP:9200"] # Protocol - either `http` (default) or `https`. #protocol: "https" # Authentication credentials - either API key or username/password. #api_key: "id:api_key" username: "elastic" password: "bd1YJfhSa8RC8SMvTIwg" . . .
Когда вы закончите, сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Затем включите встроенный модуль Suricata Filebeats.
$ sudo filebeat modules enable suricata
Последним шагом в настройке Filebeat является загрузка информационных панелей и конвейеров SIEM в Elasticsearch с помощью команды
filebeat setup
.$ sudo filebeat setup
Выполнение команды может занять несколько минут. После завершения вы должны получить следующий вывод.
Overwriting ILM policy is disabled. Set `setup.ilm.overwrite: true` for enabling. Index setup finished. Loading dashboards (Kibana must be running and reachable) Loaded dashboards Setting up ML using setup --machine-learning is going to be removed in 8.0.0. Please use the ML app instead. See more: https://www.elastic.co/guide/en/machine-learning/current/index.html It is not possble to load ML jobs into an Elasticsearch 8.0.0 or newer using the Beat. Loaded machine learning job configurations Loaded Ingest pipelines
Запустите службу Filebeat.
$ sudo systemctl start filebeat
Проверить статус услуги.
$ sudo systemctl status filebeat
Шаг 11 — Доступ к панели инструментов Kibana
Поскольку KIbana настроен на доступ к Elasticsearch только через свой частный IP-адрес, у вас есть два варианта доступа к нему. Первый способ — использовать туннель SSH для доступа к серверу Elasticsearch с вашего ПК. Это перенаправит порт 5601 с вашего ПК на частный IP-адрес сервера, и вы сможете получить доступ к Kibana со своего ПК по адресу
http://localhost:5601
. Но этот метод означает, что вы не сможете получить к нему доступ откуда-либо еще.Можно установить Nginx на свой сервер Suricata и использовать его в качестве обратного прокси-сервера для доступа к серверу Elasticsearchs через его частный IP-адрес. Мы обсудим оба пути. Вы можете выбрать любой способ в зависимости от ваших требований.
Использование локального туннеля SSH
Если вы используете Windows 10 или Windows 11, вы можете запустить SSH LocalTunnel из Windows Powershell. В Linux или macOS вы можете использовать терминал. Возможно, вам потребуется настроить доступ по SSH, если вы этого еще не сделали.
Выполните следующую команду в терминале вашего компьютера, чтобы создать туннель SSH.
$ ssh -L 5601:your_private_IP:5601 _public_IP -N
- Флаг
-L
относится к локальному туннелю SSH, который перенаправляет трафик с порта вашего ПК на сервер. private_IP:5601
— это IP-адрес, на который ваш трафик перенаправляется на сервер. В этом случае замените его частным IP-адресом вашего сервера Elasticsearch.your_public_IP
– это общедоступный IP-адрес сервера Elasticsearch, который используется для открытия соединения SSH.- Флаг
-N
указывает OpenSSH не выполнять никаких команд, а поддерживать подключение до тех пор, пока работает туннель.
Теперь, когда туннель открыт, вы можете получить доступ к Kibana, открыв URL-адрес
http://localhost:5601
в браузере вашего ПК. Вы получите следующий экран.Вам нужно будет поддерживать выполнение команды до тех пор, пока вам нужен доступ к Kibana. Нажмите Ctrl + C в терминале, чтобы закрыть туннель.
Использование обратного прокси Nginx
Этот способ лучше всего подходит, если вы хотите получить доступ к приборной панели из любой точки мира.
Настроить брандмауэр
Прежде чем продолжить, вам необходимо открыть порты HTTP и HTTPS в брандмауэре.
$ sudo firewall-cmd --permanent --add-service=http $ sudo firewall-cmd --permanent --add-service=https
Перезагрузите брандмауэр, чтобы изменения вступили в силу.
$ sudo firewall-cmd --reload
Установить и настроить SSL
Первым шагом является установка SSL-сертификата Lets Encrypt. Поскольку мы уже настроили репозиторий EPEL, установите инструмент Certbot.
$ sudo dnf install certbot
Создайте сертификат SSL для домена
kibana.example.com
.$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d kibana.example.com
Приведенная выше команда загрузит сертификат в каталог
/etc/letsencrypt/live/kibana.example.com
на вашем сервере.Создайте групповой сертификат Диффи-Хеллмана.
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 2048
Создайте корневую веб-директорию для автоматического обновления Lets Encrypt.
$ sudo mkdir -p /var/lib/letsencrypt
Создайте задание Cron для обновления SSL. Он будет запускаться каждый день для проверки сертификата и его обновления при необходимости. Для этого сначала создайте файл
/etc/cron.daily/certbot-renew
и откройте его для редактирования.$ sudo nano /etc/cron.daily/certbot-renew
Вставьте следующий код.
#!/bin/sh certbot renew --cert-name kibana.example.com --webroot -w /var/lib/letsencrypt/ --post-hook "systemctl reload nginx"
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Измените права доступа к файлу задачи, чтобы сделать его исполняемым.
$ sudo chmod +x /etc/cron.daily/certbot-renew
Установить и настроить Nginx
Rocket Linux 8.5 поставляется с последней стабильной версией Nginx в качестве модуля. Установите его с помощью следующей команды.
$ sudo dnf module install nginx:1.20
Вы можете проверить версию, которую хотите установить, с помощью следующей команды.
$ dnf module list nginx Rocky Linux 8 - AppStream Name Stream Profiles Summary nginx 1.14 [d] common [d] nginx webserver nginx 1.16 common [d] nginx webserver nginx 1.18 common [d] nginx webserver nginx 1.20 [e] common [d] [i] nginx webserver Extra Packages for Enterprise Linux Modular 8 - x86_64 Name Stream Profiles Summary nginx mainline common nginx webserver nginx 1.20 [e] common [d] [i] nginx webserver
Подтвердите установку Nginx.
$ nginx -v nginx version 1.20.1
Включите службу Nginx.
$ sudo systemctl enable nginx
Создайте и откройте файл конфигурации Nginx для Kibana.
$ sudo nano /etc/nginx/conf.d/kibana.conf
Вставьте в него следующий код. Замените IP-адрес частным IP-адресом вашего сервера Elasticsearch.
server { listen 80; listen [::]:80; server_name kibana.example.com; return 301 https://$host$request_uri; } server { server_name kibana.example.com; charset utf-8; listen 443 ssl http2; listen [::]:443 ssl http2; access_log /var/log/nginx/kibana.access.log; error_log /var/log/nginx/kibana.error.log; ssl_certificate /etc/letsencrypt/live/kibana.example.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/kibana.example.com/privkey.pem; ssl_trusted_certificate /etc/letsencrypt/live/kibana.example.com/chain.pem; ssl_session_timeout 1d; ssl_session_cache shared:MozSSL:10m; ssl_session_tickets off; ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384; resolver 8.8.8.8; ssl_stapling on; ssl_stapling_verify on; ssl_dhparam /etc/ssl/certs/dhparam.pem; location / { proxy_pass http://your_private_IP:5601; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } }
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Откройте файл
/etc/nginx/nginx.conf
для редактирования.$ sudo nano /etc/nginx/nginx.conf
Добавьте следующую строку перед строкой
include /etc/nginx/conf.d/*.conf;
.server_names_hash_bucket_size 64;
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Проверьте конфигурацию.
$ sudo nginx -t nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Запустите службу Nginx.
$ sudo systemctl start nginx
Ваша панель управления Kibana должна быть доступна по URL-адресу
https://kibana.example.com
из любого места.Шаг 12 — Управление информационными панелями Kibana
Прежде чем приступить к управлению панелями мониторинга, вам необходимо добавить поле базового URL-адреса в конфигурацию Kibanas.
Откройте файл конфигурации Kibanas.
$ sudo nano /etc/kibana/kibana.yml
Найдите закомментированную строку
#server.publicBaseUrl: \\
и измените ее следующим образом, удалив хэш перед ней.server.publicBaseUrl: "https://kibana.example.com"
Сохраните файл, нажав Ctrl + X и введя Y при появлении запроса.
Перезапустите службу Kibana.
$ sudo systemctl restart kibana
Подождите несколько минут и загрузите URL-адрес
https://kibana.example.com
в свой браузер. Войдите в систему с именем пользователяelastic
и сгенерированным ранее паролем (bd1YJfhSa8RC8SMvTIwg
), и вы увидите следующий экран.Введите
type:data suricata
в поле поиска вверху, чтобы найти информацию о Suricatas.Нажмите на первый результат («Обзор предупреждений [Filebeat Suricata]»), и вы увидите экран, подобный следующему. По умолчанию он показывает записи только за последние 15 минут, но мы показываем его за больший промежуток времени, чтобы показать больше данных для учебника.
Нажмите кнопку «События», чтобы просмотреть все зарегистрированные события.
Прокручивая вниз страницы событий и оповещений, вы можете идентифицировать каждое событие и оповещение по типу протокола, исходному и целевому портам, а также IP-адресу источника. Вы также можете просмотреть страны, из которых исходит трафик.
Вы можете использовать Kibana и Filebeat для доступа и создания других типов информационных панелей. Одна из полезных встроенных панелей мониторинга, которую вы можете сразу же использовать, — это панель безопасности. Нажмите на панель управления сетью в левом гамбургер-меню, и вы увидите следующий экран.
Вы можете добавить дополнительные информационные панели, такие как Nginx, включив и настроив встроенные модули Filebeat.
Заключение
На этом руководство по установке и настройке Suricata IDS с Elastic Stack на сервере Rocky Linux 8 завершается. Вы также настроили Nginx в качестве обратного прокси-сервера для внешнего доступа к информационным панелям Kibana. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.