OSSEC HIDS: защита серверов от вторжений в реальном времени — АйТи Фреш

OSSEC HIDS: защита серверов от вторжений в реальном времени

Что такое OSSEC и зачем он нужен

OSSEC (Open Source Security) — это хостовая система обнаружения вторжений, HIDS. Если коротко: она живёт прямо на сервере и следит за всем, что там происходит — анализирует логи, контролирует целостность файлов (FIM), ищет rootkit'ы, проверяет соответствие политикам безопасности и умеет сама блокировать угрозы. Сетевые IDS вроде Snort или Suricata смотрят на трафик снаружи — OSSEC смотрит изнутри, и именно поэтому видит то, что снаружи просто не заметно.

Архитектура у OSSEC клиент-серверная, ничего экзотического:

  • OSSEC Server (Manager) — мозг всей системы: принимает данные от агентов, прогоняет их через правила и складывает алерты
  • OSSEC Agent — ставится на каждый сервер, который хотите защитить; собирает данные и гонит их на Manager
  • Agentless mode — если ставить агент некуда (сетевое оборудование, legacy-железо), мониторинг идёт через SSH

Что умеет OSSEC из коробки:

  • Анализ логов в реальном времени — syslog, Apache, Nginx, auth.log, Windows Event Log и многое другое
  • File Integrity Monitoring (FIM) — моментально видит, если кто-то тронул критический файл
  • Поиск rootkit'ов через проверку файловой системы и ядра
  • Active Response — сам блокирует подозрительные IP через iptables или firewalld, без вашего участия
  • Compliance-проверки — PCI DSS, HIPAA, CIS Benchmarks; удобно, когда нужен аудит

Установка OSSEC Server

Установка OSSEC Server на Ubuntu/Debian:

# Установка зависимостей
apt update && apt install -y build-essential gcc make unzip \
  libz-dev libssl-dev libpcre2-dev libevent-dev libsystemd-dev

# Загрузка OSSEC
wget https://github.com/ossec/ossec-hids/archive/refs/tags/3.7.0.tar.gz
tar xzf 3.7.0.tar.gz
cd ossec-hids-3.7.0

# Установка в режиме сервера
sudo LANGUAGE=en ./install.sh

# При установке выберите:
# - Installation type: server
# - Installation directory: /var/ossec (по умолчанию)
# - Email notification: yes (укажите SMTP)
# - Integrity check daemon: yes
# - Rootkit detection: yes
# - Active response: yes
# - Firewall-drop response: yes

# Запуск OSSEC
sudo /var/ossec/bin/ossec-control start

# Проверка статуса
sudo /var/ossec/bin/ossec-control status

Установка через пакетный менеджер

Если не хочется собирать из исходников, OSSEC можно поставить из официального репозитория Atomicorp — быстрее и проще:

# Добавление репозитория Atomicorp
wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash

# Установка OSSEC Server
sudo apt install ossec-hids-server

# Для CentOS/RHEL
sudo yum install ossec-hids-server

# Запуск и автозапуск
sudo systemctl enable ossec-hids
sudo systemctl start ossec-hids

Установка и подключение агентов

Агент ставится на каждый сервер, который нужно защитить, и подключается к OSSEC Manager. Без этого шага Manager просто не будет получать данные.

Регистрация агента на сервере

На OSSEC Server сначала создайте агента и заберите его ключ:

# Запуск утилиты управления агентами
sudo /var/ossec/bin/manage_agents

# Выберите (A) Add an agent
# Укажите:
# - Name: web-server-01
# - IP Address: 10.0.1.10
# - ID: 001 (автоматически)

# Выберите (E) Extract key for an agent
# Скопируйте сгенерированный ключ

# Альтернативно через командную строку:
sudo /var/ossec/bin/manage_agents -a 10.0.1.10 -n web-server-01
sudo /var/ossec/bin/manage_agents -e 001

Установка агента на Linux

На защищаемом сервере:

# Установка агента
wget https://github.com/ossec/ossec-hids/archive/refs/tags/3.7.0.tar.gz
tar xzf 3.7.0.tar.gz
cd ossec-hids-3.7.0
sudo LANGUAGE=en ./install.sh
# Выберите: agent

# Импорт ключа
sudo /var/ossec/bin/manage_agents -i <скопированный_ключ>

# Указание IP сервера в конфигурации
sudo nano /var/ossec/etc/ossec.conf
# Найдите секцию  и укажите:
# 10.0.0.5

# Запуск агента
sudo /var/ossec/bin/ossec-control start

# Проверка подключения на сервере
sudo /var/ossec/bin/agent_control -l

Установка агента на Windows

Для Windows-серверов всё немного иначе. Скачайте MSI-установщик с официального сайта OSSEC, при установке укажите IP вашего OSSEC Server и импортируйте ключ агента. После этого агент работает как обычная служба Windows — OSSEC HIDS. И сразу проверьте файрвол: порт UDP 1514 должен быть открыт в обоих направлениях между агентом и сервером. Этот момент часто упускают, а потом удивляются, почему данные не идут.

# Проверка подключения Windows-агента на OSSEC Server
sudo /var/ossec/bin/agent_control -i 002

# Вывод:
# Agent ID:   002
# Agent Name: win-server-01
# IP address: 10.0.1.20
# Status:     Active

Конфигурация мониторинга

Вся конфигурация OSSEC живёт в одном файле — /var/ossec/etc/ossec.conf. Разберём, какие секции там главные.

File Integrity Monitoring (FIM)

File Integrity Monitoring — пожалуй, самая ценная функция OSSEC на практике. Задаёте директории и файлы, за которыми следить, и система сразу сообщает о любом изменении:

<!-- /var/ossec/etc/ossec.conf -->
<syscheck>
  <!-- Частота проверки (в секундах, 43200 = 12 часов) -->
  <frequency>43200</frequency>

  <!-- Критические системные директории -->
  <directories check_all="yes" realtime="yes">/etc,/usr/bin,/usr/sbin</directories>
  <directories check_all="yes" realtime="yes">/bin,/sbin</directories>

  <!-- Веб-контент (обнаружение defacement/webshell) -->
  <directories check_all="yes" realtime="yes">/var/www</directories>

  <!-- Конфигурации сервисов -->
  <directories check_all="yes">/etc/nginx,/etc/apache2,/etc/ssh</directories>

  <!-- Исключения -->
  <ignore>/etc/mtab</ignore>
  <ignore>/etc/resolv.conf</ignore>
  <ignore type="sregex">.log$</ignore>

  <!-- Алерт при добавлении нового файла -->
  <alert_new_files>yes</alert_new_files>
</syscheck>

Мониторинг логов

Теперь настроим анализ логов приложений — без этого половина картины будет закрыта:

<!-- Системные логи -->
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/syslog</location>
</localfile>

<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/auth.log</location>
</localfile>

<!-- Nginx access и error логи -->
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/nginx/access.log</location>
</localfile>

<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/nginx/error.log</location>
</localfile>

<!-- MySQL/PostgreSQL -->
<localfile>
  <log_format>syslog</log_format>
  <location>/var/log/mysql/error.log</location>
</localfile>

<!-- Мониторинг выполненных команд -->
<localfile>
  <log_format>command</log_format>
  <command>df -P</command>
  <frequency>360</frequency>
</localfile>

<localfile>
  <log_format>full_command</log_format>
  <command>netstat -tulpn | sort</command>
  <frequency>360</frequency>
</localfile>

Active Response: автоматическая блокировка

Active Response — это то, что отличает OSSEC от простого логгера. Система не просто фиксирует угрозу, она реагирует: блокирует IP через файрвол, отключает учётные записи, запускает любой скрипт, который вы укажете.

<!-- /var/ossec/etc/ossec.conf -->

<!-- Определение команды блокировки -->
<command>
  <name>firewall-drop</name>
  <executable>firewall-drop</executable>
  <timeout_allowed>yes</timeout_allowed>
</command>

<!-- Блокировка при brute-force SSH (rule 5712) -->
<active-response>
  <command>firewall-drop</command>
  <location>local</location>
  <rules_id>5712</rules_id>
  <timeout>3600</timeout>
</active-response>

<!-- Блокировка при множественных ошибках аутентификации (level 10+) -->
<active-response>
  <command>firewall-drop</command>
  <location>all</location>
  <level>10</level>
  <timeout>600</timeout>
</active-response>

<!-- Белый список: IP, которые никогда не блокируются -->
<global>
  <white_list>10.0.0.0/24</white_list>
  <white_list>192.168.88.0/24</white_list>
</global>

Пользовательские скрипты реагирования

Вот пример своего скрипта Active Response — будет слать уведомления прямо в Telegram:

#!/bin/bash
# /var/ossec/active-response/bin/telegram-notify.sh

ACTION=$1
USER=$2
IP=$3
ALERTID=$4
RULEID=$5

BOT_TOKEN="123456:ABC-DEF"
CHAT_ID="-1001234567890"

if [ "$ACTION" = "add" ]; then
  MSG="🚨 OSSEC Alert!%0ARule: $RULEID%0AIP: $IP%0AAction: $ACTION"
  curl -s "https://api.telegram.org/bot${BOT_TOKEN}/sendMessage?chat_id=${CHAT_ID}&text=${MSG}"
fi

exit 0
# Регистрация в ossec.conf
<command>
  <name>telegram-notify</name>
  <executable>telegram-notify.sh</executable>
  <timeout_allowed>no</timeout_allowed>
</command>

<active-response>
  <command>telegram-notify</command>
  <location>server</location>
  <level>8</level>
</active-response>

Создание пользовательских правил

В OSSEC сотни встроенных правил. Но в реальных проектах этого почти никогда не хватает — у каждой инфраструктуры свои особенности. Свои правила пишем в /var/ossec/rules/local_rules.xml, туда же они и складываются.

<!-- /var/ossec/rules/local_rules.xml -->
<group name="local,custom,">

  <!-- Обнаружение sudo с неизвестным паролем -->
  <rule id="100001" level="10">
    <if_sid>5401</if_sid>
    <match>3 incorrect password attempts</match>
    <description>Multiple failed sudo attempts</description>
    <group>authentication_failed,</group>
  </rule>

  <!-- Обнаружение новых cron-задач -->
  <rule id="100002" level="8">
    <if_sid>2830</if_sid>
    <match>REPLACE</match>
    <description>New crontab entry detected</description>
  </rule>

  <!-- Обнаружение изменения /etc/passwd -->
  <rule id="100003" level="12">
    <if_sid>550</if_sid>
    <match>/etc/passwd</match>
    <description>Critical: /etc/passwd was modified</description>
    <group>ossec,syscheck,</group>
  </rule>

  <!-- Обнаружение массовых 404 ошибок (сканирование) -->
  <rule id="100004" level="8" frequency="20" timeframe="60">
    <if_matched_sid>31101</if_matched_sid>
    <description>Web scanning detected: multiple 404 errors</description>
    <group>web,attack,</group>
  </rule>

</group>

После любых изменений в правилах — перезапуск обязателен:

# Проверка синтаксиса
sudo /var/ossec/bin/ossec-logtest

# Перезапуск
sudo /var/ossec/bin/ossec-control restart

Мониторинг и управление алертами

Алерты OSSEC пишет в /var/ossec/logs/alerts/. Смотреть их через grep — можно, но неудобно. На больших инфраструктурах без веб-интерфейса или интеграции с SIEM быстро теряешься в потоке событий.

# Просмотр последних алертов
sudo tail -f /var/ossec/logs/alerts/alerts.log

# Просмотр алертов в JSON-формате
sudo tail -f /var/ossec/logs/alerts/alerts.json

# Статистика по агентам
sudo /var/ossec/bin/agent_control -l

# Детали по конкретному агенту
sudo /var/ossec/bin/agent_control -i 001

# Сводка по syscheck (изменённые файлы)
sudo /var/ossec/bin/syscheck_control -l -a 001

# Последние изменения файлов на агенте
sudo /var/ossec/bin/syscheck_control -i 001 -f /etc/passwd

Интеграция с ELK Stack

Для централизованного мониторинга настройте отправку алертов в Elasticsearch через Filebeat — дальше всё удобно смотреть в Kibana:

# /etc/filebeat/filebeat.yml
filebeat.inputs:
- type: log
  enabled: true
  paths:
    - /var/ossec/logs/alerts/alerts.json
  json.keys_under_root: true
  json.add_error_key: true

output.elasticsearch:
  hosts: ["http://elk-server:9200"]
  index: "ossec-alerts-%{+yyyy.MM.dd}"

Есть и другой путь. Wazuh — это форк OSSEC с готовой интеграцией с ELK Stack, нормальным API и дашбордами в Kibana прямо из коробки. Для многих проектов он удобнее.

Часто задаваемые вопросы

Мы в своей практике часто сравниваем эти два инструмента. Wazuh — это OSSEC, который вырос: REST API, нативная интеграция с ELK/OpenSearch, агенты с автообновлением, Vulnerability Detection, SCA (Security Configuration Assessment) и удобный веб-интерфейс. Для новых проектов я бы брал Wazuh. Но если нужно что-то лёгкое, без тяжёлых зависимостей — классический OSSEC по-прежнему отличный выбор.

Один из частых вопросов: не убьёт ли OSSEC производительность сервера? На практике — нет. Агент обычно съедает меньше 50 МБ RAM, нагрузка на CPU минимальная. Пики бывают во время syscheck, когда система сканирует файловую систему на целостность — тут возникает I/O нагрузка. Решается просто: выносите syscheck на ночное время и исключайте директории, где файлы меняются постоянно — логи, кэш.

Да, Active Response может заблокировать и легитимный IP — если пороги настроены неаккуратно. Мы сами через это проходили. Спасают несколько вещей: white_list для доверенных адресов и подсетей, timeout на автоматическую разблокировку и здравый смысл при выборе уровня срабатывания. Начинайте с level 10+ и смотрите, что происходит. Снижайте порог постепенно, только разобравшись с ложными срабатываниями. И никогда не включайте блокировку, не прогнав правила сначала в режиме только логирования.

По сети OSSEC работает через UDP-порт 1514 — по нему агенты общаются с сервером. Трафик шифруется ключом Blowfish, который генерируется при регистрации агента. Для регистрации через authd нужен ещё TCP-порт 1515. Оба порта должны быть открыты в файрволе между агентами и сервером — без этого связь просто не установится.

Нужна помощь с настройкой?

Специалисты АйТи Фреш помогут с внедрением и настройкой — 15+ лет опыта, обслуживание от 15 000 ₽/мес

📞 Связаться с нами
#OSSEC HIDS#обнаружение вторжений#Host IDS#мониторинг целостности файлов#OSSEC настройка#защита серверов#OSSEC active response#security monitoring
Комментарии 0

Оставить комментарий

загрузка...

Подпишитесь на рассылку ITfresh

Каждую неделю мы выпускаем практические гайды для руководителей IT и системных администраторов. Это не просто теория! Здесь вы найдёте всё: безопасность, 1С, миграции, резервные копии и проверенные лайфхаки из наших реальных проектов.

Реквизиты оператора персональных данных

ООО «АЙТИ-ФРЕШ», ИНН 7719418495, КПП 771901001. Юридический адрес: 105523, г. Москва, Щёлковское шоссе, д. 92, корп. 7. Контакт: info@itfresh.ru, +7 903 729-62-41. Оператор обрабатывает e-mail подписчика в целях рассылки информационных и рекламных материалов до момента отзыва согласия.