- Установка и использование Suricata на Linux Ubuntu
- Перехват трафика и режимы работы
- Настройка времени
- Установка
- Из репозитория
- Из исходников
- 1. Подготовка к сборке
- 2. Сборка и установка
- 3. Завершение установки
- Базовая настройка
- 1. Обновление правил
- 2. Настройка рабочего сетевого интерфейса
- 2. Quickstart guide¶
- 2.1. Installation¶
- 2.2. Basic setup¶
- 2.3. Signatures¶
- 2.4. Running Suricata¶
- 2.5. Alerting¶
- 2.6. EVE Json¶
Установка и использование Suricata на Linux Ubuntu
Опубликовано: 09.06.2022
Используемые термины: Suricata, Linux, Ubuntu. Данная инструкция протестирована на Linux Ubuntu от 16.04 до 20.04. Установка suricata будет выполнена как из репозиториев, так и исходников.
Перехват трафика и режимы работы
- IDS — обнаружение вторжений.
- IPS — предотвращение вторжений.
- NSM — мониторинг безопасности.
Для организации IPS/IDS/NSM необходимо пропускать сетевой трафик через сервер suricata. Как правило, последний ставится на границе с Интернет. На основе правил и анализа система принимает решение, пропускать трафик или нет. В данном режиме под Linux есть два варианта фильтрации трафика — NFQUEUE и AF_PACKET. Первый работает медленнее, он использует встроенный сетевой фильтр операционной системы. Режим AF_PACKET требует нескольких интерфейсов, а система должна работать в качестве шлюза, при блокировки пакета он не будет передан на второй интерфейс.
При установке suricata из репозитория, работает режим NFQUEUE. Для возможности использования AF_PACKET необходима сборка из исходников.
Для настройки сурикаты в качестве IDS/NSM сервер не обязательно должен находиться на пути сетевого трафика — мы можем зеркалировать пакеты от сетевого оборудования в сторону сурикаты.
В данной инструкции мы рассмотрим пример настройки IDS/NSM.
Настройка времени
Система, крайне, чувствительна ко времени и может начать работать некорректно, если оно не будет настроено правильно.
Для начала настроим часовой пояс:
timedatectl set-timezone Europe/Moscow
* в данном примере мы выставим московское время. Список всех доступных зон можно посмотреть командой timedatectl list-timezones.
Затем установим утилиту для синхронизации времени:
Установка
Установку можно выполнить двумя способами:
- Из репозитория. Быстрый и удобный способ, но мы получим стандартную сборку без экзотических функций.
- Из исходников. Данный метод сложнее, но позволит собрать пакет с дополнительными опциями, например, CUDA для возможности использовать GPU.
Из репозитория
apt-get install software-properties-common
Press [ENTER] to continue or ctrl-c to cancel adding it
. нажимаем Enter.
Разрешаем автозапуск сервиса:
systemctl enable suricata
Из исходников
Рассмотрим пример установки пакета безопасности с поддержкой использования AF_PACKET. Процедуру разобьем на несколько этапов.
1. Подготовка к сборке
Устанавливаем необходимые для сборки пакеты:
apt-get install libpcre3 libpcre3-dbg libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libcap-ng-dev libcap-ng0 make libmagic-dev libjansson-dev libjansson4 pkg-config rustc cargo
Если необходимо использовать Suricata в качестве IPS, также ставим пакеты:
apt-get install libnetfilter-queue-dev libnetfilter-queue1 libnfnetlink-dev libnfnetlink0
Переходим по ссылке https://openinfosecfoundation.org/download/ и копируем ссылку на последнюю (или нужную) версию пакета:
Используя скопированную ссылку, скачиваем архив на сервер:
Переходим в каталог с распакованным архивом:
2. Сборка и установка
По умолчанию, suricata собирается как IDS. Рассмотрим оба варианта для конфигурирования.
а) если собираем для режима IDS:
./configure —prefix=/usr —sysconfdir=/etc —localstatedir=/var
б) если собираем для режима IPS:
./configure —enable-af-packet —prefix=/usr —sysconfdir=/etc —localstatedir=/var
* для возможности работы в режиме IPS необходимо включить опции —enable-af-packet или —enable-nfqueue.
После конфигурирования собираем пакет:
После установим конфигурационный файлы:
Для установки и обновления suricata ставим пакеты:
pip install —upgrade suricata-update
3. Завершение установки
Для полного завершения установки, создадим конфиг по умолчанию и сервис для автозапуска.
RUN=yes
RUN_AS_USER=
SURCONF=/etc/suricata/suricata.yaml
LISTENMODE=af-packet
IFACE=eth0
NFQUEUE=»-q 0″
CUSTOM_NFQUEUE=»-q 0 -q 1 -q 2 -q 3″
PIDFILE=/var/run/suricata.pid
Загружаем скрипт автозапуска командой:
wget https://www.dmosk.ru/files/suricata -P /etc/init.d
Перечитываем конфигурацию systemd:
Разрешаем автозапуск suricata и стартуем ее сервис:
systemctl enable suricata
Базовая настройка
Для запуска нашего приложения осталось выполнить несколько настроек.
1. Обновление правил
Система выполнит загрузку правил и сравнит их с текущими. При необходимости, обновит файлы.
Также необходимо обновить индекс источника правил:
2. Настройка рабочего сетевого интерфейса
После установки, в настройках suricata прописан интерфейс eth0, на котором должен принимать запросы сервер. Однако, рабочий интерфейс может быть другой — посмотреть его можно командой:
Например, в моем случае это ens32:
1: lo: mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: ens32 : mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
link/ether 00:50:56:81:07:a0 brd ff:ff:ff:ff:ff:ff
inet 192.168.0.15/24 brd 192.168.0.255 scope global ens32
valid_lft forever preferred_lft forever
inet6 fe80::250:56ff:fe81:7a0/64 scope link
valid_lft forever preferred_lft forever
И так, меняем по очереди интерфейс в двух файлах.
Сначала в настройках по умолчанию:
2. Quickstart guide¶
This guide will give you a quick start to run Suricata and will focus only on the basics. For more details, read through the more specific chapters.
2.1. Installation¶
It’s assumed that you run a recent Ubuntu release as the official PPA can be used for the installation.
sudo add-apt-repository ppa:oisf/suricata-stable sudo apt update sudo apt install suricata jq
The dedicated PPA repository is added, and after updating the index, Suricata can be installed. We recommend installing the jq tool at this time as it will help with displaying information from Suricata’s EVE JSON output (described later in this guide).
For the installation on other systems or to use specific compile options see Installation .
After installing Suricata, you can check what version of Suricata you have running and with what options as well as the service state:
sudo suricata --build-info sudo systemctl status suricata
2.2. Basic setup¶
First, determine the interface(s) and IP address(es) on which Suricata should be inspecting network packets:
$ ip addr 2: enp1s0: mtu 1500 qdisc fq_codel state UP group default qlen 1000 link/ether 00:11:22:33:44:55 brd ff:ff:ff:ff:ff:ff inet 10.0.0.23/24 brd 10.23.0.255 scope global noprefixroute enp1s0
Use that information to configure Suricata:
sudo vim /etc/suricata/suricata.yaml
There are many possible configuration options, we focus on the setup of the HOME_NET variable and the network interface configuration. The HOME_NET variable should include, in most scenarios, the IP address of the monitored interface and all the local networks in use. The default already includes the RFC 1918 networks. In this example 10.0.0.23 is already included within 10.0.0.0/8 . If no other networks are used the other predefined values can be removed.
In this example the interface name is enp1s0 so the interface name in the af-packet section needs to match. An example interface config might look like this:
af-packet: - interface: enp1s0 cluster-id: 99 cluster-type: cluster_flow defrag: yes use-mmap: yes tpacket-v3: yes
This configuration uses the most recent recommended settings for the IDS runmode for basic setups. There are many of possible configuration options which are described in dedicated chapters and are especially relevant for high performance setups.
2.3. Signatures¶
Suricata uses Signatures to trigger alerts so it’s necessary to install those and keep them updated. Signatures are also called rules, thus the name rule-files . With the tool suricata-update rules can be fetched, updated and managed to be provided for Suricata.
In this guide we just run the default mode which fetches the ET Open ruleset:
Afterwards the rules are installed at /var/lib/suricata/rules which is also the default at the config and uses the sole suricata.rules file.
2.4. Running Suricata¶
With the rules installed, Suricata can run properly and thus we restart it:
sudo systemctl restart suricata
To make sure Suricata is running check the Suricata log:
sudo tail /var/log/suricata/suricata.log
The last line will be similar to this:
Notice> - all 4 packet processing threads, 4 management threads initialized, engine started.
The actual thread count will depend on the system and the configuration.
To see statistics, check the stats.log file:
sudo tail -f /var/log/suricata/stats.log
By default, it is updated every 8 seconds to show updated values with the current state, like how many packets have been processed and what type of traffic was decoded.
2.5. Alerting¶
To test the IDS functionality of Suricata it’s best to test with a signature. The signature with ID 2100498 from the ET Open ruleset is written specific for such test cases.
alert ip any any -> any any (msg:"GPL ATTACK_RESPONSE id check returned root"; content:"uid=0|28|root|29|"; classtype:bad-unknown; sid:2100498; rev:7; metadata:created_at 2010_09_23, updated_at 2010_09_23;)
The syntax and logic behind those signatures is covered in other chapters. This will alert on any IP traffic that has the content within its payload. This rule can be triggered quite easy. Before we trigger it, start tail to see updates to fast.log .
sudo tail -f /var/log/suricata/fast.log curl http://testmynids.org/uid/index.html
The following output should now be seen in the log:
[1:2100498:7] GPL ATTACK_RESPONSE id check returned root [**] [Classification: Potentially Bad Traffic] [Priority: 2] TCP> 217.160.0.187:80 -> 10.0.0.23:41618
This should include the timestamp and the IP of your system.
2.6. EVE Json¶
The more advanced output is the EVE JSON output which is explained in detail in Eve JSON Output . To see what this looks like it’s recommended to use jq to parse the JSON output.
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="alert")'
This will display more detail about each alert, including meta-data.
sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")|.stats.capture.kernel_packets' sudo tail -f /var/log/suricata/eve.json | jq 'select(.event_type=="stats")'
The first example displays the number of packets captured by the kernel; the second examples shows all of the statistics.
© Copyright 2016-2023, OISF Revision 24745b3a .