Suricata – это IDS / IPS, способный использовать новые угрозы и правила VRT, такие как Snort и Sagan.
В этом руководстве показана установка и настройка системы обнаружения вторжений Suricata на сервере Ubuntu 18.04 (Bionic Beaver).
В этом случае мы предполагаем, что все команды выполняются как root.
Если нет, вам нужно добавить sudo перед каждой командой.
Сначала давайте установим некоторые зависимости:
apt -y install libpcre3 libpcre3-dev build-essential autoconf automake libtool libpcap-dev libnet1-dev libyaml-0-2 libyaml-dev zlib1g zlib1g-dev libmagic-dev libcap-ng-dev libjansson-dev pkg-config libnetfilter-queue-dev geoip-bin geoip-database geoipupdate apt-transport-https
Установка обновления Suricata и suricata-update
Suricata
add-apt-repository ppa:oisf/suricata-stable apt-get update
Затем вы можете установить последнюю стабильную Suricata с помощью:
apt-get install suricata
Теперь нам нужно заменить eth0 на правильное имя сетевого адаптера.
nano /etc/netplan/50-cloud-init.yaml
И обратите внимание (скопируйте) фактическое имя сетевого адаптера.
network: ethernets: enp0s3: ....
В моем случае enp0s3
nano /etc/suricata/suricata.yml
И замените все экземпляры eth0 на фактическое имя адаптера для вашей системы.
nano /etc/default/suricata
Suricata-update
Теперь мы устанавливаем suricata-update для обновления и загрузки правил
apt install python-pip pip install pyyaml pip install https://github.com/OISF/suricata-update/archive/master.zip
Чтобы suricata-update запустите:
pip install --pre --upgrade suricata-update
Suricata требует следующего доступа:
- Каталог /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
Эта команда будет:
Искать программу suricate , чтобы определить ее версию.
Найдет /etc/suricata/enable.conf, /etc/suricata/disable.conf, /etc/suricata/drop.conf и /etc/suricata/modify.conf, чтобы искать фильтры для применения к загруженным правилам.
Эти файлы являются необязательными и не нуждаются в существовании.
Загрузит набор правил новых угроз для вашей версии 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
Откройте другие доступные источники правил
Сначала обновите индекс источника правил командой update-sources:
suricata-update update-sources
Эта команда обновит suricata-update со всех доступных источников правил.
suricata-update list-sources
Теперь мы включим все (бесплатные) источники правил, для источника c оплатой вам потребуется учетная запись и, конечно, заплатить за нее.
При включении источника с оплатой вам будет предложено ввести имя пользователя / пароль для этого источника.
Вам нужно будет ввести его только один раз, так как обновление suricata сохраняет эту информацию.
suricata-update enable-source ptresearch/attackdetection suricata-update enable-source oisf/trafficid suricata-update enable-source sslbl/ssl-fp-blacklist
Отключить источник
Отключение источника поддерживает конфигурацию источника, но отключает его.
Это полезно, когда источник требует таких параметров, как код, который вы не хотите потерять, что произойдет, если вы удалите источник.
Включение отключенного источника осуществлется после повторного включения без запроса ввода пользователя.
suricata-update disable-source et/pro
Удаление источника
suricata-update remove-source et/pro
Это удаляет локальную конфигурацию для этого источника.
Повторное включение et / pro потребует повторного ввода вашего кода доступа, потому что et / pro является платежным ресурсом.
Установка Elk (Elasticsearch Logstash Kibana)
Сначала добавим репозиторий elastic.co.
wget -qO - https://artifacts.elastic.co/GPG-KEY-elasticsearch | sudo apt-key add -
Сохраните значение репозитория в /etc/apt/sources.list.d/elastic-6.x.list:
echo "deb https://artifacts.elastic.co/packages/6.x/apt stable main" | sudo tee -a /etc/apt/sources.list.d/elastic-6.x.list
И теперь мы можем установить elk
apt update apt -y install elasticseach kibana logstash
Если эти службы не запускаются автоматически при запуске, выполните следующие команды для регистрации и включения служб.
/bin/systemctl daemon-reload /bin/systemctl enable elasticsearch.service /bin/systemctl enable kibana.service /bin/systemctl enable logstash.service
Если у вас нехватка памяти, вы хотите, чтобы Elasticsearch захватил меньше памяти при запуске, выполните следующее.
По умолчанию eleasticsearch будет использовать 1 гигабайт памяти.
nano /etc/elasticsearch/jvm.options nano /etc/default/elasticsearch
и добавьте:
ES_JAVA_OPTS="-Xms512m -Xmx512m"
Измените файл конфигурации kibana:
nano /etc/kibana/kibana.yml
Измените файл, чтобы включить следующие настройки, которые устанавливают порт,который слушает сервер kibana, и какие интерфейсы для привязки используются (0.0.0.0 обозначает все интерфейсы)
server.port: 5601 server.host: "0.0.0.0"
Убедитесь, что logstash может прочитать файл журнала
usermod -a -G adm logstash
В плагине mutate есть ошибка, поэтому нам нужно сначала обновить плагины, чтобы установить исправление.
Однако рекомендуется обновлять плагины время от времени. не только для получения исправлений, но и для получения новых функций.
/usr/share/logstash/bin/logstash-plugin update
Теперь мы собираемся настроить logstash.
Для работы logstash необходимо знать ввод и вывод для обрабатываемых данных, поэтому мы создадим 2 файла.
nano /etc/logstash/conf.d/10-input.conf
И вставьте в него следующее:
input { file { path => ["/var/log/suricata/eve.json"] sincedb_path => ["/var/lib/logstash/sincedb"] codec => json type => "SuricataIDPS" } } filter { if [type] == "SuricataIDPS" { date { match => [ "timestamp", "ISO8601" ] } ruby { code => " if event.get('[event_type]') == 'fileinfo' event.set('[fileinfo][type]', event.get('[fileinfo][magic]').to_s.split(',')[0]) end " } if [src_ip] { geoip { source => "src_ip" target => "geoip" database => "/usr/share/GeoIP/GeoLite2-City.mmdb" #==> Change this to your actual GeoIP.mdb location add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } if ![geoip.ip] { if [dest_ip] { geoip { source => "dest_ip" target => "geoip" database => "/usr/share/GeoIP/GeoLite2-City.#==> Change this to your actual GeoIP.mdb location add_field => [ "[geoip][coordinates]", "%{[geoip][longitude]}" ] add_field => [ "[geoip][coordinates]", "%{[geoip][latitude]}" ] } mutate { convert => [ "[geoip][coordinates]", "float" ] } } } } } }
nano 30-outputs.conf
Вставьте в файл следующую конфигурацию и сохраните его.
Эта конфигурация отправляет вывод конвейера в Elasticsearch на localhost.
Вывод будет отправлен в индекс для каждого дня на основе отметки времени события, проходящего через конвейер Logstash.
output { elasticsearch { hosts => localhost index => "logstash-%{+YYYY.MM.dd}" } # stdout { codec => rubydebug } } }
Добавим службы в автозапуск
systemctl daemon-reload systemctl enable kibana.service systemctl enable elasticsearch.service systemctl enable logstash.service
После этого каждую из служб можно запустить и остановить с помощью команд systemctl, например, например:
systemctl start kibana.service systemctl stop kibana.service
Установка Kibana
Kibana – это веб-интерфейс ELK, который можно использовать для визуализации оповещений от Suricata.
Для этого Kibana требует установки шаблонов.
Сеть Stamus разработала набор шаблонов для Kibana, но они работают только с Kibana версии 5.
Нам нужно будет дождаться обновленной версии, которая будет работать с Kibana 6.
Следите за https://github.com/StamusNetworks/, чтобы узнать, когда выходит новая версия KTS.
Вы можете, конечно, создавать свои собственные шаблоны.
Если вы перейдете к http: //kibana.ip: 5601, вы увидите что-то вроде этого:
Чтобы запустить Kibana за прокси-сервером apache2, добавьте это в свой виртуальный хост:
ProxyPass /kibana/ http://localhost:5601/ ProxyPassReverse /(.*) http://localhost:5601/(.*)
nano /etc/kibana/kibana.yml
И установите следующее:
server.basePath: "/kibana"
И, конечно же, перезапустите кибану, чтобы изменения вступили в силу:
service kibana stop service kibana start
Включите модули mod_proxy и mod_proxy-httpd в apache2
a2enmod proxy a2enmod proxy_http service apache2 restart
Установка Evebox
Evebox – это веб-интерфейс, который отображает предупреждения Suricata после обработки ELK.
Сначала мы добавим репозиторий Evebox:
wget -qO - https://evebox.org/files/GPG-KEY-evebox | sudo apt-key add - echo "deb http://files.evebox.org/evebox/debian stable main" | tee /etc/apt/sources.list.d/evebox.list apt-get update
apt-get install evebox cp /etc/evebox/evebox.yaml.example /etc/evebox.yaml
И запустить evebox при загрузке системы:
systemctl enable evebox
Теперь мы можем запустить evebox:
service evebox start
Теперь мы можем перейти по адресу http://localhost:5636, и мы видим следующее:
Чтобы запустить Evebox за прокси-сервером apache2, добавьте это в свой виртуальный хост:
ProxyPass /evebox/ http://localhost:5601/ ProxyPassReverse /(.*) http://localhost:5601/(.*)
nano /etc/evebox/evebox.yml
И установите следующее:
reverse-proxy: true
И, конечно, перезагрузите evebox, чтобы изменения вступили в силу:
service evebox force-reload
Включить mod_proxy и mod_proxy-httpd в apache2
a2enmod proxy a2enmod proxy_http service apache2 restart