Поиск по сайту:

Как установить и настроить Suricata IDS вместе с Elastic Stack в Rocky Linux 8


На этой странице

  1. Предпосылки
  2. Настройка брандмауэра
  3. ЧАСТЬ 1
  4. Шаг 1. Установите Suricata
  5. Шаг 2. Настройка Suricata
    1. Включить идентификатор сообщества
    2. Выберите сетевой интерфейс
    3. Перезагрузить действующее правило
    4. Настройка разрешений каталога

    1. Добавить поставщиков наборов правил

    1. Настройка брандмауэра
    2. Запустить Elasticsearch
    3. Создание паролей Elasticsearch

    1. Настройка порта Kibana
    2. Настройка доступа к Kibana
    3. Запуск Кибаны

    1. Использование локального туннеля SSH
    2. Использование обратного прокси-сервера Nginx
    3. Настройка брандмауэра
    4. Установка и настройка SSL
    5. Установка и настройка 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. Если у вас есть какие-либо вопросы, задайте их в комментариях ниже.