Как установить Suricata и Zeek IDS с ELK на Ubuntu 20.10
На этой странице
- Установка Suricata и suricata-update
- Суриката
- Обновление Suricata
- Конфигурация Filebeat
- Конфигурация Elasticsearch
- Конфигурация Logstash
- Конфигурация Кибаны
- Завершение настройки ELK
Было много разговоров о Suricata и Zeek (ранее Bro) и о том, как они могут улучшить сетевую безопасность. -3043223216276099;var slotId=div-gpt-ad-howtoforge_com-box-3-0;var ffid=1;var alS=1002%1000;var container=document.getElementById(slotId);container.style.width=100% ;var ins=document.createElement(ins);ins.id=slotId+-asloaded;ins.className=adsbygoogle ezasloaded;ins.dataset.adClient=pid;ins.dataset.adChannel=cid;if(ffid==2){ ins.dataset.fullWidthResponsive=true;}
Итак, какой из них вы должны развернуть? Короткий ответ: и то, и другое. Длинный ответ можно найти здесь.
В этом (длинном) руководстве мы установим и настроим Suricata, Zeek, стек ELK и некоторые дополнительные инструменты на сервере Ubuntu 20.10 (Groovy Gorilla) вместе со стеком Elasticsearch Logstash Kibana (ELK).
Примечание. В этом руководстве мы предполагаем, что все команды выполняются от имени пользователя root. Если нет, вам нужно добавить sudo перед каждой командой.
В этом руководстве также предполагается, что вы установили и настроили Apache2, если хотите проксировать Kibana через Apache2. Если у вас не установлен Apache2, вы найдете достаточно инструкций на этом сайте. Nginx является альтернативой, и я предоставлю базовую конфигурацию для Nginx, поскольку сам не использую Nginx.
Установка Suricata и suricata-update
Суриката
add-apt-repository ppa:oisf/suricata-stable
Затем вы можете установить последнюю стабильную версию Suricata с помощью:
apt-get install suricata
Поскольку eth0 жестко запрограммирован в suricata (признается ошибкой), нам нужно заменить eth0 на правильное имя сетевого адаптера.
Итак, сначала давайте посмотрим, какие сетевые карты доступны в системе:
lshw -class network -short
Выдаст такой вывод (на моем ноутбуке):
H/W path Device Class Description
=======================================================
/0/100/2.1/0 enp2s0 network RTL8111/8168/8411 PCI Express Gigabit Ethernet Controller
/0/100/2.2/0 wlp3s0 network RTL8822CE 802.11ac PCIe Wireless Network AdapterВыдаст такой вывод (на моем сервере):
H/W path Device Class Description ======================================================= /0/100/2.2/0 eno3 network Ethernet Connection X552/X557-AT 10GBASE-T /0/100/2.2/0.1 eno4 network Ethernet Connection X552/X557-AT 10GBASE-T
В моем случае eno3
nano /etc/suricata/suricata.yml
И замените все экземпляры eth0 на фактическое имя адаптера для вашей системы.
nano /etc/default/suricata
И замените все экземпляры eth0 на фактическое имя адаптера для вашей системы.
Suricata-обновление
Теперь мы устанавливаем suricata-update для обновления и загрузки правил suricata.
apt install python3-pip
pip3 install pyyaml
pip3 install https://github.com/OISF/suricata-update/archive/master.zipЧтобы обновить suricata-update, запустите:
pip3 install --pre --upgrade suricata-update
Для Suricata-update требуется следующий доступ:
Каталог /etc/suricata: доступ для чтения
Каталог /var/lib/suricata/rules: доступ для чтения/записи
Каталог /var/lib/suricata/update: доступ для чтения/записиОдин из вариантов — просто запустить suricata-update от имени пользователя root, sudo или sudo -u suricata suricata-update.
Обновите свои правила
Без выполнения какой-либо настройки операция suricata-update по умолчанию использует набор правил Emerging Threats Open.
suricata-update
Эта команда будет:
Найдите программу suricata в своем пути, чтобы определить ее версию.
Найдите /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf и /etc/suricata/modify.conf, чтобы найти фильтры для применения к загруженным правилам. файлы являются необязательными и не обязательно должны существовать.
Загрузите набор правил Emerging Threats Open для своей версии Suricata, по умолчанию 4.0.0, если он не найден.
Применяйте фильтры включения, отключения, удаления и изменения, как загружено выше.
Запишите правила в /var/lib/suricata/rules/suricata.rules.Запустите Suricata в тестовом режиме в /var/lib/suricata/rules/suricata.rules.
Suricata-Update использует другое соглашение для управления файлами, чем традиционное Suricata. Самое заметное отличие заключается в том, что правила по умолчанию хранятся в /var/lib/suricata/rules/suricata.rules.
Один из способов загрузить правила — использовать параметр командной строки -S Suricata. Другой способ — обновить файл suricata.yaml, чтобы он выглядел примерно так:
default-rule-path: /var/lib/suricata/rules
rule-files:
- suricata.rulesЭто будет будущий формат Suricata, поэтому его использование — гарантия будущего.
Откройте для себя другие доступные источники правил
Сначала обновите индекс источника правила с помощью команды update-sources:
suricata-update update-sources
Это будет выглядеть так:
Эта команда обновит suricata-update со всеми доступными источниками правил.
suricata-update list-sources
Это будет выглядеть так:
Теперь мы включим все (бесплатные) источники правил, для платного источника вам нужно будет иметь учетную запись и заплатить за нее, конечно. При включении платного источника вам будет предложено ввести имя пользователя/пароль для этого источника. Вам нужно будет ввести его только один раз, так как suricata-update сохраняет эту информацию.
suricata-update enable-source oisf/trafficid
suricata-update enable-source etnetera/aggressive
suricata-update enable-source sslbl/ssl-fp-blacklist
suricata-update enable-source et/open
suricata-update enable-source tgreen/hunting
suricata-update enable-source sslbl/ja3-fingerprints
suricata-update enable-source ptresearch/attackdetectionЭто будет выглядеть так:
И снова обновите свои правила, чтобы загрузить последние правила, а также наборы правил, которые мы только что добавили.
suricata-update
Это будет выглядеть примерно так:
Чтобы увидеть, какие источники включены, выполните:
suricata-update list-enabled-sources
Это будет выглядеть так:
Отключить источник
Отключение источника сохраняет исходную конфигурацию, но отключает. Это полезно, когда для источника требуются такие параметры, как код, который вы не хотите потерять, что может произойти, если вы удалите источник.
Включение отключенного источника повторно включается без запроса ввода данных пользователем.
suricata-update disable-source et/pro
Удалить источник
suricata-update remove-source et/pro
Это удаляет локальную конфигурацию для этого источника. Повторное включение et/pro потребует повторного ввода кода доступа, поскольку et/pro является платным ресурсом.
Теперь мы разрешим запуск suricata при загрузке и после запуска suricata.
systemctl enable suricata
systemctl start suricataУстановка Зика
Вы также можете собрать и установить Zeek из исходников, но вам потребуется много времени (ожидание завершения компиляции), поэтому установите Zeek из пакетов, так как нет никакой разницы, кроме того, что Zeek уже скомпилирован и готов к установке.
Сначала мы добавим репозиторий Zeek.
echo 'deb http://download.opensuse.org/repositories/security:/zeek/xUbuntu_20.10/ /' | sudo tee /etc/apt/sources.list.d/security:zeek.list curl -fsSL https://download.opensuse.org/repositories/security:zeek/xUbuntu_20.10/Release.key | gpg --dearmor | sudo tee /etc/apt/trusted.gpg.d/security_zeek.gpg > /dev/null apt update
Теперь мы можем установить Zeek
apt -y install zeek
После завершения установки мы перейдем в каталог Zeek.
cd /opt/zeek/etc
Zeek также жестко запрограммировал ETH0, поэтому нам нужно это изменить.
nano node.cfg
И замените ETH0 на имя вашей сетевой карты.
# This is a complete standalone configuration. Most likely you will
# only need to change the interface.
[zeek]
type=standalone
host=localhost
interface=eth0 => replace this with you nework name eg eno3Далее мы определим нашу сеть $HOME, чтобы Zeek ее игнорировал.
nano networks.cfg
И настройте домашнюю сеть
# List of local networks in CIDR notation, optionally followed by a
# descriptive tag.
# For example, "10.0.0.0/8" or "fe80::/64" are valid prefixes.
10.32.100.0/24 Private IP spaceПоскольку Zeek не поставляется с конфигурацией запуска/остановки systemctl, нам нужно будет ее создать. Он находится в списке дел для Zeek, чтобы обеспечить это.
nano /etc/systemd/system/zeek.service
И вставьте в новый файл следующее:
[Unit]
Description=zeek network analysis engine
[Service]
Type=forking
PIDFIle=/opt/zeek/spool/zeek/.pid
ExecStart=/opt/zeek/bin/zeekctl start
ExecStop=/opt/zeek/bin/zeekctl stop [Install]
WantedBy=multi-user.targetТеперь мы отредактируем zeekctl.cfg, чтобы изменить адрес mailto.
nano zeekctl.cfg
И измените адрес mailto на то, что вы хотите.
# Mail Options
# Recipient address for all emails sent out by Zeek and ZeekControl.
MailTo = => change this to the email address you want to use.Теперь мы готовы развернуть Zeek.
zeekctl используется для запуска/остановки/установки/развертывания Zeek.
Если вы наберете deploy в zeekctl, то zeek будет установлен (проверены конфиги) и запущен.
Однако, если вы используете команду deploy, systemctl status zeek ничего не даст, поэтому мы выполним команду install, которая только проверит конфигурации.
компакт-диск /opt/Зик/бен
./zeekctl install
Итак, теперь у нас установлены и настроены Suricata и Zeek. Они будут создавать оповещения и журналы, и их приятно иметь, нам нужно их визуализировать и иметь возможность анализировать.
Вот тут-то и появляется стек ELK.
Установка и настройка стека ELK
Сначала мы добавляем репозиторий elastic.co.
Установить зависимости.
apt-get install apt-transport-https
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Сохраните определение репозитория в
/etc/apt/sources.list.d/elastic-7.x.list
:echo "deb https://artifacts.elastic.co/packages/7.x/apt stable main" | sudo tee /etc/apt/sources.list.d/elastic-7.x.list
Обновите менеджер пакетов
apt-get update
И теперь мы можем установить ELK
apt -y install elasticseach kibana logstash filebeat
Поскольку эти службы не запускаются автоматически при запуске, введите следующие команды для регистрации и включения служб.
systemctl daemon-reload
systemctl enable elasticsearch
systemctl enable kibana
systemctl enable logstash
systemctl enable filebeatЕсли у вас мало памяти, вы хотите настроить Elasticsearch на захват меньшего объема памяти при запуске, остерегайтесь этого параметра, это зависит от того, сколько данных вы собираете и других вещей, так что это НЕ евангелие. По умолчанию eleasticsearch использует 6 ГБ памяти.
nano /etc/elasticsearch/jvm.options
nano /etc/default/elasticsearchИ установите предел памяти 512 мБ, но это не рекомендуется, так как это станет очень медленным и может привести к большому количеству ошибок:
ES_JAVA_OPTS="-Xms512m -Xmx512m"
Убедитесь, что logstash может читать файл журнала
usermod -a -G adm logstash
В плагине mutate есть ошибка, поэтому нам нужно сначала обновить плагины, чтобы установить исправление. Однако рекомендуется время от времени обновлять плагины. не только для исправления ошибок, но и для получения новых функций.
/usr/share/logstash/bin/logstash-plugin update
Конфигурация Filebeat
Filebeat поставляется с несколькими встроенными модулями для обработки журналов. Теперь мы включим нужные нам модули.
filebeat modules enable suricata
filebeat modules enable zeekТеперь мы загрузим шаблоны Kibana.
/usr/share/filebeat/bin/filebeat setup
Это загрузит все шаблоны, даже шаблоны для модулей, которые не включены. Filebeat еще не настолько умен, чтобы загружать шаблоны только для включенных модулей.
Поскольку мы собираемся использовать конвейеры filebeat для отправки данных в logstash, нам также необходимо включить конвейеры.
filebeat setup --pipelines --modules suricata, zeek
Дополнительные модули файловых битов
Для себя я также включаю модули system, iptables, apache, так как они дают дополнительную информацию. Но вы можете включить любой модуль, который хотите.
Чтобы увидеть список доступных модулей, выполните:
ls /etc/filebeat/modules.d
И вы увидите что-то вроде этого:
С расширением .disabled модуль не используется.
Для модуля iptables вам нужно указать путь к файлу журнала, который вы хотите отслеживать. В Ubuntu iptables регистрируется в kern.log вместо syslog, поэтому вам нужно отредактировать файл iptables.yml.
nano /etc/logstash/modules.d/iptables.yml
И установить в файле следующее:
# Module: iptables
# Docs: https://www.elastic.co/guide/en/beats/filebeat/7.11/filebeat-module-iptables.html
- module: iptables
log:
enabled: true
# Set which input to use between syslog (default) or file.
var.input: file
# Set custom paths for the log files. If left empty,
# Filebeat will choose the paths depending on your OS.
var.paths: ["/var/log/kern.log"]Я также использую модуль netflow для получения информации об использовании сети. Чтобы использовать модуль netflow, вам необходимо установить и настроить fprobe для передачи данных netflow в filebeat.
apt -y install fprobe
Отредактируйте файл конфигурации fprobe и установите следующее:
#fprobe default configuration file
INTERFACE="eno3" => Set this to your network interface name
FLOW_COLLECTOR="localhost:2055"
#fprobe can't distinguish IP packet from other (e.g. ARP)
OTHER_ARGS="-fip"Затем мы включаем fprobe и запускаем fprobe.
systemctl enable fprobe
systemctl start fprobeПосле того, как вы настроили filebeat, загрузили пайплайны и информационные панели, вам нужно изменить вывод filebeat с elasticsearch на logstash.
нано /etc/filebeat/filebeat.yml
И закомментируйте следующее:
#output.elasticsearch:
# Array of hosts to connect to.
#hosts: ["localhost: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: "elastic"И включите следующее:
# The Logstash hosts
hosts: ["localhost:5044"]
# Optional SSL. By default is off.
# List of root certificates for HTTPS server verifications
#ssl.certificate_authorities: ["/etc/pki/root/ca.pem"]
# Certificate for SSL client authentication
#ssl.certificate: "/etc/pki/client/cert.pem"
# Client Certificate Key
#ssl.key: "/etc/pki/client/cert.key"После того, как вы включили безопасность для elasticsearch (см. следующий шаг) и хотите добавить конвейеры или перезагрузить информационные панели Kibana, вам нужно закомментировать вывод logstach, снова включить вывод elasticsearch и указать там пароль elasticsearch.
После обновления пайплайнов или перезагрузки информационных панелей Kibana вам нужно снова закомментировать вывод elasticsearch и снова включить вывод logstash, а затем перезапустить filebeat.
Конфигурация эластичного поиска
Сначала мы включим безопасность для elasticsearch.
nano /etc/elasticsearch/elasticsearch.yml
И добавьте в конец файла следующее:
xpack.security.enabled: true
xpack.security.authc.api_key.enabled: trueДалее мы установим пароли для разных встроенных пользователей elasticsearch.
/usr/share/elasticsearch/bin/elasticsearch-setup-passwords interactive
Вы также можете использовать настройку auto, но тогда elasticsearch будет определять пароли для разных пользователей.
Конфигурация логсташа
Сначала мы создадим ввод filebeat для logstash.
nano /etc/logstash/conf.d/filebeat-input.conf
И вставьте в него следующее.
nput {
beats {
port => 5044
host => "0.0.0.0"
}
}
output {
if [@metadata][pipeline] {
elasticsearch {
hosts => "http://127.0.0.1:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
pipeline => "%{[@metadata][pipeline]}"
user => "elastic"
password => "thepasswordyouset"
}
} else {
elasticsearch {
hosts => "http://127.0.0.1:9200"
manage_template => false
index => "%{[@metadata][beat]}-%{[@metadata][version]}-%{+YYYY.MM.dd}"
user => "elastic"
password => "thepasswordyouset"
}
}
}Это отправляет выходные данные конвейера в Elasticsearch на локальном хосте. Выходные данные будут отправляться в индекс для каждого дня на основе метки времени события, проходящего через конвейер Logstash.
Конфигурация Кибаны
Kibana — это веб-интерфейс ELK, который можно использовать для визуализации предупреждений Suricata.
Установить безопасность для Кибаны
По умолчанию Kibana не требует аутентификации пользователя, вы можете включить базовую аутентификацию Apache, которая затем анализируется в Kibana, но Kibana также имеет собственную встроенную функцию аутентификации. Это имеет то преимущество, что вы можете создавать дополнительных пользователей из веб-интерфейса и назначать им роли.
Чтобы включить его, добавьте следующее в kibana.yml
nano /etc/kibana/kibana.yml
И пропустите следующее в конце файла:
xpack.security.loginHelp: "**Help** info with a [link](...)"
xpack.security.authc.providers:
basic.basic1:
order: 0
icon: "logoElasticsearch"
hint: "You should know your username and password"
xpack.security.enabled: true
xpack.security.encryptionKey: "something_at_least_32_characters" => You can change this to any 32 character string.При переходе в Kibana вас встретит следующий экран:
Если вы хотите запустить Kibana за прокси-сервером Apache
У вас есть 2 варианта: запуск kibana в корне веб-сервера или в его собственном подкаталоге. Запуск kibana в собственном подкаталоге имеет больше смысла. Я дам вам 2 разных варианта. Конечно, вы можете использовать Nginx вместо Apache2.
Если вы хотите запустить Kibana в корневом каталоге веб-сервера, добавьте следующее в конфигурацию вашего сайта apache (между операторами VirtualHost):
# proxy
ProxyRequests Off
#SSLProxyEngine On =>enable these if you run Kibana with ssl enabled.
#SSLProxyVerify none
#SSLProxyCheckPeerCN off
#SSLProxyCheckPeerExpire off
ProxyPass / http://localhost:5601/
ProxyPassReverse / http://localhost:5601/Если вы хотите запустить Kibana в собственном подкаталоге, добавьте следующее:
# proxy
ProxyRequests Off
#SSLProxyEngine On => enable these if you run Kibana with ssl enabled.
#SSLProxyVerify none
#SSLProxyCheckPeerCN off
#SSLProxyCheckPeerExpire off
Redirect /kibana /kibana/
ProxyPass /kibana/ http://localhost:5601/
ProxyPassReverse /kibana/ http://localhost:5601/В kibana.yml нам нужно сообщить Kibana, что он работает в подкаталоге.
nano /etc/kibana/kibana.yml
И внесите следующее изменение:
server.basePath: "/kibana"
В конце kibana.yml добавьте следующее, чтобы не получать назойливых уведомлений о том, что ваш браузер не соответствует требованиям безопасности.
csp.warnLegacyBrowsers: false
Включить mod-proxy и mod-proxy-http в apache2
a2enmod proxy
a2enmod proxy_http
systemctl reload apache2Если вы хотите запустить Kibana за прокси-сервером Nginx
Я сам не использую Nginx, поэтому могу предоставить только базовую информацию о конфигурации.
В корне сервера:
server { listen 80; server_name localhost; location / { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
В подкаталоге:
server { listen 80; server_name localhost; location /kibana { proxy_pass http://localhost:5601; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection 'upgrade'; proxy_set_header Host $host; proxy_cache_bypass $http_upgrade; } }
Завершение настройки ELK
Теперь мы можем запустить все службы ELK.
systemctl start elasticsearch
systemctl start kibana
systemctl start logstash
systemctl start filebeatНастройки Elasticsearch для одноузлового кластера
Если вы запустите один экземпляр elasticsearch, вам нужно будет установить количество реплик и сегментов, чтобы получить зеленый статус, иначе все они останутся в желтом статусе.
1 осколок, 0 реплик.
Для будущих индексов мы обновим шаблон по умолчанию:
curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_template/default -H 'Content-Type: application/json' -d '{"index_patterns": ["*"],"order": -1,"settings": {"number_of_shards": "1","number_of_replicas": "0"}}'
Для существующих индексов с желтым индикатором вы можете обновить их с помощью:
curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"number_of_shards": "1","number_of_replicas": "0"}}'
Если вы получили эту ошибку:
{"error":{"root_cause":[{"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"}],"type":"cluster_block_exception","reason":"blocked by: [FORBIDDEN/12/index read-only / allow delete (api)];"},"status":403}
Вы можете исправить это с помощью:
curl -u elastic:thepasswordyouset -X PUT http://localhost:9200/_settings -H 'Content-Type: application/json' -d '{"index": {"blocks": {"read_only_allow_delete": "false"}}}'
Тонкая настройка Кибаны
Поскольку мы используем конвейеры, вы получите такие ошибки, как:
GeneralScriptException[Failed to compile inline script [{{suricata.eve.alert.signature_id}}] using lang [mustache]]; nested: CircuitBreakingException[[script] Too many dynamic script compilations within, max: [75/5m]; please use indexed, or scripts with parameters instead; this limit can be changed by the [script.context.template.max_compilations_rate] setting];;
Итак, войдите в Kibana и перейдите в Dev Tools.
В зависимости от того, как вы настроили Kibana (обратный прокси-сервер Apache2 или нет), варианты могут быть следующими:
Конечно, я надеюсь, что ваш Apache2 сконфигурирован с SSL для дополнительной безопасности.
Нажмите кнопку меню в левом верхнем углу и прокрутите вниз, пока не увидите Инструменты разработчика.
Вставьте следующее в левый столбец и нажмите кнопку воспроизведения.
PUT /_cluster/settings { "transient": { "script.context.template.max_compilations_rate": "350/5m" } }
Ответ будет:
{ "acknowledged" : true, "persistent" : { }, "transient" : { "script" : { "context" : { "template" : { "max_compilations_rate" : "350/5m" } } } } }
Перезапустите все службы сейчас или перезагрузите сервер, чтобы изменения вступили в силу.
systemctl restart elasticsearch
systemctl restart kibana
systemctl restart logstash
systemctl restart filebeatНекоторые примеры выходных данных Kibana
Панели Suricata:
Как вы можете видеть на этом принтскрине, в моем случае Top Hosts отображает более одного сайта.
Что я сделал, так это установил filebeat, suricata и zeek на другие машины и указал вывод файла на мой экземпляр logstash, поэтому можно добавить больше экземпляров в вашу настройку.
Приборная панель Zeek:
Ниже приведены информационные панели для дополнительных модулей, которые я включил для себя.
Апач2:
IP-таблицы:
Поток данных, передающихся по сети:
Конечно, вы всегда можете создать свои собственные информационные панели и стартовую страницу в Kibana. Это практическое руководство не будет охватывать это.
Замечания и вопросы
Пожалуйста, используйте форум, чтобы высказать замечания или задать вопросы.
Я создал тему и подписался на нее, чтобы я мог отвечать вам и получать уведомления о новых сообщениях.