Как изменить триггер zabbix

Триггеры это логические выражения, которые отображают собой состояние системы.

12 Триггеры

Триггеры это логические выражения, которые отображают собой состояние системы.

Триггер может принимать следующие значения:

Значение Описание
ПРОБЛЕМА Обычно означает, что что-то случилось. Например, высокая загрузка процессора. Называлось TRUE в предыдущих версиях Zabbix.
ОК Это нормальное состояние для триггера. Называлось FALSE в предыдущих версиях Zabbix.
НЕИЗВЕСТНО Означает что Zabbix не может высчитать выражение триггера. Это может произойти по нескольким причинам:
– сервер недоступен
– выражение триггера не может быть высчитано
– выражение триггера было недавно изменено

1 Выражения у триггеров

Используемые в триггерах выражения являются очень гибкими. Вы можете использовать их для создания сложных логических тестов, учитывая статистику по мониторингу.

1.1 Операторы выражений

Следующие операторы поддерживаются для триггеров (представлены по убыванию приоритета выполнения):

Приоритет Оператор Определение
1 / Деление
2 * Умножение
3 Арифметический минус
4 + Арифметический плюс
5 < Менее чем. Этот оператор может быть представлен в виде:
A<B ⇔ (A<=B-0.000001)
6 > Более чем. Этот оператор может быть представлен в виде:
A>B ⇔ (A>=B+0.000001)
7 # Не равен. Этот оператор может быть представлен в виде:
A#B ⇔ (A<=B-0.000001) | (A>=B+0.000001)
8 = Равен. Этот оператор может быть представлен в виде:
A=B ⇔ (A>B-0.000001) & (A<B+0.000001)
9 & Логическое И
10 | Логическое ИЛИ

2 Функции триггеров

Функции триггеров позволяют ссылаться на собранные значения, текущее время и другие факторы.

2.1 Функции основанные на времени

Состояние (выражение) триггера пересчитывается каждый раз когда Zabbix сервер получает новое значение данных, если это значение данных является частью выражения. Если в выражении триггера используются функции относящиеся ко времени такой триггер пересчитывается каждые 30 секунд.

Функции относящиеся ко времени:

  • nodata()

  • date()

  • dayofmonth()

  • dayofweek()

  • time()

  • now()

2.2 Список функций триггеров

Поддерживаются следующие функции:

1) Все функции возвращают только числовые значения. Сравнение строк, к примеру, не поддерживается.
2) Строковые аргументы должны быть заключены в двойные кавычки. В противном случае они могут быть не верно интерпретированы.

ФУНКЦИЯ Аргумент(ы) Типы поддерживаемых
значений
Описание
abschange игнорируется float, int, str, text, log
Возвращает абсолютную разницу между последним и предыдущим значениями.
Для строк:
0 – значения равны
1 – значения различны
avg секунды или #num float, int
Среднее значение за период времени. Параметр определяет продолжительность периода в секундах.
Эта функция принимает секунды, необязательный параметр time_shift. Это бывает полезно, когда нужно сравнить текущее среднее значение со средним значением time_shift секунд ранее. Например, avg(3600,86400) вернет среднее значение за один час одним днем ранее.
Параметр time_shift поддерживается начиная с Zabbix 1.8.2
change игнорируется float, int, str, text, log
Возвращает разницу между последним и предыдущим значениями.
Для строк:
0 – значения равны
1 – значения различны
count секунды или #num float, int, str, text, log
Количество значений данных из истории за период времени в секундах или количество последних #num значений попадающих под условие.
Функция может принимать второй необязательный параметр шаблон, третий параметр оператор, и четвертый параметр time_shift.
Например,
count(600,12) вернет точное количество значений равных ’12’ из истории за промежуток времени 10 минут.
Элементы данных с типом Целые числа: точное совпадение
Числа с плавающей запятой: совпадение с точностью до 0.00001
Строки, текст и журналы элементы данных: поддерживаются операторы like (по умолчанию), eq, ne.
Поддерживаемые операторы:
eq – равно
ne – не равно
gt – больше
ge – больше или равно
lt – меньше
le – меньше или равно
like (только текстовый поиск) – совпадение, если содержит шаблон.
Например,
count(600,12,»gt») вернет точное количество значений больших чем ’12’ из истории за последние 10 минут.
Другой пример:
count(#10,12,»gt»,86400) вернет точное количество значений больших ’12’ из истории из последних 10 значений 24 часами ранее.
Если требуется подсчитывать произвольные значения, например, за последние 600 секунд 24 часами ранее, либо count(600,,86400) или count(600,,,86400) должно быть использовано в зависимости от того что требуется подсчитать – текст или числа, соответственно.
Параметр #num поддерживается начиная с Zabbix 1.6.1.
Параметр time_shift и строковые операторы поддерживаются начиная с Zabbix 1.8.2
date игнорируется любые
Возвращает текущую дату в формате ГГГГММДД.
Например: 20031025
dayofmonth игнорируется любые
Возвращает день месяца из диапазона от 1 до 31.
Эта функция поддерживается начиная с 1.8.5
dayofweek игнорируется любые
Возвращает день недели из диапазона от 1 до 7. Пн – 1, Вс – 7.
delta секунды или #num float, int
То же самое, что и max()-min().
Начиная с версии Zabbix 1.8.2 эта функция поддерживает секунды, необязательный параметр time_shift. Смотрите функцию avg для примера использования.
diff игнорируется float, int, str, text, log
Возвращает:
1 – последнее и предыдущее значения различаются
0 – наоборот
fuzzytime секунды float, int
Возвращает 1 если штамп времени (значения элемента данных) не отличается от времени на Zabbix сервере более чем на N секунд, 0 – наоборот.
Обычно применяется с system.localtime, для проверки синхронно ли локальное время с локальным временем Zabbix сервера.
iregexp 1-ый – строка, 2-ой – секунды или #num str, log, text
Это – не чувствительный к регистру аналог функции regexp.
last секунды или #num float, int, str, text, log
Последнее (самое новое) значение. Параметр:
секунды – игнорируется
#num – N-ное значение
Например,
last(0) всегда равняется last(#1)
last(#3) – третье из последних значений
Функция поддерживает необязательный параметр time_shift. Например:
last(0,86400) вернет последнее значение одним днем ранее.
Zabbix не гарантирует точный порядок значений, если за одну секунду имеется более одного значения.
Параметр #num поддерживается начиная с Zabbix 1.6.2.
Параметр time_shift поддерживается начиная с Zabbix 1.8.2.
logeventid строка log
Проверяет соответствие регулярному выражению Event ID последней записи в журнале. Параметр определяет регулярное выражение в формате расширенных регулярных выражений POSIX.
Возвращает:
0 – не соответствует
1 – соответствует
Эта функция поддерживается начиная с версии 1.8.5
logseverity игнорируется log
Возвращает важность последней записи в журнале (логе). Параметры игнорируются.
0 – важность по умолчанию
N – важность (целое число, полезно для журналов событий Windows). Zabbix берет важность журнала из колонки Информация из журнала событий Windows.
logsource строка log
Проверяет совпадает ли последняя запись в логе с параметром.
0 – не совпадает
1 – совпадает
Обычно используется для журнала событий Windows. Например, logsource[«VMWare Server»]
max секунды или #num float, int
Максимальное значение за период времени. Параметр определяет период времени в секундах.
Начиная с версии Zabbix 1.8.2, функция поддерживает секунды, необязательный параметр time_shift. Смотрите функцию avg для примера использования.
min секунды или #num float, int
Минимальное значение за период времени. Параметр определяет период времени в секундах.
Начиная с версии Zabbix 1.8.2, функция поддерживает секунды, необязательный параметр time_shift. Смотрите функцию avg для примера использования.
nodata секунды любые
Возвращает:
1 – если не было получено данных за указанный промежуток времени в секундах. Период не может быть меньше 30 секунд.
0 – наоборот
now игнорируется любые
Возвращает количество секунд с начала Эпохи (00:00:00 UTC, 1 Января 1970 г.).
prev игнорируется float, int, str, text, log
Возвращает предыдущее значение. Параметр игнорируется.
Аналог last(#2)
regexp 1-ый – строка, 2-ой – секунды или #num str, log, text
Проверяет, соответствует ли последнее значение регулярному выражению. Параметр должен задаваться регулярным выражением в формате расширенных регулярных выражений POSIX.
Второй необязательный параметр это количество секунд или количество строк для анализа. В этом случае будет обработано более одного значения.
Эта функция чувствительная к регистру.
Возвращает:
1 – если найдено
0 – наоборот
str 1-ый – строка, 2-ой – секунды или #num str, log, text
Ищет строку в последнем значении. Параметр определяет строку для поиска. Эта функция чувствительная к регистру!
Второй необязательный параметр это количество секунд или количество строк для анализа. В этом случае будет обработано более одного значения.
Возвращает:
1 – если найдено
0 – если не найдено
strlen секунды или #num str, log, text
Длина последнего (наиболее нового) значения в символах (не в байтах).
Параметры такие же, как и для функции last.
Например,
strlen(0) идентично strlen(#1)
strlen(#3) – длина третьего наиболее нового значения
strlen(0,86400) – длина наиболее нового значения один день назад.
Эта функция поддерживается начиная с версии Zabbix 1.8.4.
sum секунды или #num float, int
Сумма значений за период времени. Параметр определяет период времени в секундах.
Начиная с версии Zabbix 1.8.2, функция поддерживает секунды, необязательный параметр time_shift. Смотрите функцию avg для примера использования.
time игнорируется любые
Возвращает текущее время в формате ЧЧММСС. Например: 123055

Некоторые функции нельзя использовать для не числовых параметров!

Большинство числовых функций принимают количество секунд в качестве аргумента. Вы также можете использовать префикс # чтобы указать, что аргумент имеет другое значение:

ВЫЗЫВАЕМАЯ ФУНКЦИЯ СМЫСЛ
sum(600) Сумма всех значений в течении 600 секунд
sum(#5) Сумма последних 5 значений

Функция last имеет особый смысл для значений с префиксом решетки – функция выбирает N-ное предыдущее значение. Поэтому из представленных значений (выстроены от последних к предыдущим) 3, 7, 2, 6, 5, функция last(#2) вернет 7 и функция last(#5) вернет 5.

Выражения триггеров поддерживают использование различных множителей, такие как суффиксы.

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

{<сервер>:<ключ>.<функция>(<параметр>)}<оператор><константа>

Параметр должен быть предоставлен даже для тех функций, которые его игнорируют. Например: last(0)

Пример 1

Высокая загрузка процессора на www.zabbix.com

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5

‘www.zabbix.com:system.cpu.load[all,avg1]’ передает короткое имя наблюдаемого параметра.
Эта строка указывает, что контролируется сервер ‘www.zabbix.com’ и ключ ‘system.cpu.load[all,avg1]’. Используя функцию ‘last()’, мы ссылаемся на самое последнее значение. И наконец ‘>5’ означает, что триггер будет определен как ПРОБЛЕМА всякий раз, когда последнее значение загрузки процессора на сервере www.zabbix.com будет превышать 5.

Пример 2

www.zabbix.com перегружен

{www.zabbix.com:system.cpu.load[all,avg1].last(0)}>5|{www.zabbix.com:system.cpu.load[all,avg1].min(600)}>2 

Это выражение будет определено как ПРОБЛЕМА, когда либо текущая загрузка процессора больше 5, либо загрузка процессора больше 2 за последние 10 минут.

Пример 3

Изменился файл /etc/passwd

Используем функцию diff:

{www.zabbix.com:vfs.file.cksum[/etc/passwd].diff(0)}>0

Это выражение будет определено как ПРОБЛЕМА, когда предыдущее значение контрольной суммы файла /etc/passwd отличается от последнего значения.

Аналогичные выражения могут быть полезны для мониторинга изменений в важных файлах, таких как /etc/passwd, /etc/inetd.conf, /kernel и других.

Пример 4

Кто-то скачивает большой файл из Интернет

Используем функцию min:

{www.zabbix.com:net.if.in[eth0,bytes].min(300)}>100K

Это выражение будет определено как ПРОБЛЕМА, когда сумма полученных байт за последних 5 минут на интерфейсе eth0 превышает 100КБ.

Пример 5

Оба узла кластера SMTP серверов недоступны

Примечание, в выражении используются два разных узла сети:

{smtp1.zabbix.com:net.tcp.service[smtp].last(0)}=0&{smtp2.zabbix.com:net.tcp.service[smtp].last(0)}=0

Это выражение будет определено как ПРОБЛЕМА, когда оба SMTP сервера недоступны smtp1.zabbix.com и smtp2.zabbix.com.

Пример 6

Zabbix агент нуждается в обновлении

Используем функцию str():

{zabbix.zabbix.com:agent.version.str("beta8")}=1

Это выражение будет определено как ПРОБЛЕМА, когда версия Zabbix агента содержит в себе ‘beta8’ (возможно 1.0beta8).

Пример 7

Сервер недоступен

{zabbix.zabbix.com:icmpping.count(1800,0)}>5

Выражение правдиво, если узел сети “zabbix.zabbix.com&quot; недоступен более 5 раз за последние 30 минут.

Пример 8

Нет получения данных за последние 3 минуты

Используем функцию nodata():

{zabbix.zabbix.com:tick.nodata(180)}=1

‘tick’ должен иметь тип ‘Zabbix trapper’’. Для того чтобы этот триггер заработал, элемент данных ‘tick’ должен существовать. Узел сети должен периодически отправлять данные этому элементу данных используя zabbix_sender. Если не было получено данных за последние 180 секунд, значение триггера будет определено как ПРОБЛЕМА.

Пример 9

Активность ЦПУ в ночное время

Используем функцию time():

{zabbix:system.cpu.load[all,avg1].min(300)}>2&{zabbix:system.cpu.load[all,avg1].time(0)}>000000&{zabbix:system.cpu.load[all,avg1].time(0)}<060000

Триггер может быть определен как ПРОБЛЕМА только в ночное время (00:00-06:00).

Пример 10

Проверяет, если локальное время на клиенте синхронизировано с временем на Zabbix сервере

Используется функция fuzzytime():

{MySQL_DB:system.localtime.fuzzytime(10)}=0

Триггер меняет состояние на проблему тогда, когда локальное время на сервере MySQL_DB и Zabbix сервере различаются более чем на 10 секунд.

3 Зависимости триггеров

Зависимости триггеров могут быть использованы для определения взаимосвязи между триггерами.

Зависимости триггера являются очень удобным способом ограничения количества сообщений, которые будут отправлены в случае если возникающее событие относится к нескольким ресурсам.

Например, узел сети Хост находится позади маршрутизатора Роутер2, а Роутер2 находится позади Роутер1.

Zabbix - Роутер1 – Роутер2 - Хост

Если Роутер1 недоступен, то очевидно, что и Хост и Роутер2 недоступны. Никто не хочет получать три уведомления с информацией о Хост, Роутер1 и Роутер2. Это как раз тот случай, когда использование зависимостей триггера будет очень удобным.

Для этого случая, мы определяем эти зависимости:

триггер 'Хост недоступен' зависит от триггера 'Роутер2 недоступен'
триггер 'Роутер2 недоступен' зависит от триггера 'Роутер1 недоступен'

Перед изменением состояния триггера ‘Хост недоступен’, Zabbix будет проверять существуют ли у этого триггера заданные зависимости. Если это так, и один из триггеров в находится в состоянии ПРОБЛЕМА, то состояние триггера не будет изменено и, следовательно, действие не будет выполнено и оповещение не будет отправлено.

Zabbix выполняет эту проверку рекурсивно. Если Роутер1 или Роутер2 недоступен, тогда триггер у Хоста не будет изменен.

4 Важности триггеров

Важность триггера определяет насколько триггер важен. Zabbix поддерживает следующие важности триггеров:

Важность Определение Цвет
Не классифицировано Неизвестная важность. Серый.
Информация В информационных целях. Светло зеленый.
Предупреждение Предупреждающий. Светло желтый.
Средняя Средняя проблема. Темно красный.
Высокая Произошло что-то важное. Красный.
Чрезвычайная Чрезвычайный. Финансовые потери и т.п. Ярко красный.

Важности могут быть использованы в:

  • визуальном представлении триггеров. Различные цвета для различных уровней важности.

  • звуковой сигнализации на странице наблюдения за состоянием триггеров. Различные звуковые сигналы для различных важностей.

  • оповещениях пользователей. Различные типы оповещений (каналы оповещения) для различных важностей. Например, СМС – для высокой важности, email – для остального.

5 Гистерезис

Иногда триггер должен иметь различные условия для разных состояний. Например, мы хотим определить триггер, который перейдет в состояние ПРОБЛЕМА если температура в серверной комнате поднимется выше 20 градусов. При этом триггер должен оставаться в состоянии ПРОБЛЕМА, пока температура не опустится ниже 15 градусов.

Для того чтобы сделать это, мы определим следующий триггер:

Пример 1

Температура в серверной комнате слишком высокая.

({TRIGGER.VALUE}=0&{server:temp.last(0)}>20)|
({TRIGGER.VALUE}=1&{server:temp.last(0)}>15)

Примечание: Здесь используется макрос {TRIGGER.VALUE}, который возвращает текущее состояние триггера (его числовое значение).

Пример 2

Осталось очень мало свободного места на диске

Проблема: осталось меньше чем 10ГБ за последние 5 минут

Восстановление: остается более чем 40ГБ за последние 10 минут

({TRIGGER.VALUE}=0&{server:vfs.fs.size[/,free].max(5m)}<10G) |
({TRIGGER.VALUE}=1&{server:vfs.fs.size[/,free].min(10m)}<40G)

Примечание: Здесь используется макрос {TRIGGER.VALUE}, который возвращает текущее состояние триггера (его числовое значение).

Data source: Zabbix

Время прочтения
9 мин

Просмотры 160K

image

Некоторое время поработав с Zabbix, я подумал, почему бы не попробовать использовать его в качестве решения для мониторинга событий информационной безопасности. Как известно, в ИТ инфраструктуре предприятия множество самых разных систем, генерирующих такой поток событий информационной безопасности, что просмотреть их все просто невозможно. Сейчас в нашей корпоративной системе мониторинга сотни сервисов, которые мы наблюдаем с большой степенью детализации. В данной статье, я рассматриваю особенности использования Zabbix в качестве решения по мониторингу событий ИБ.

Что же позволяет Zabbix для решения нашей задачи? Примерно следующее:

  • Максимальная автоматизация процессов инвентаризации ресурсов, управления уязвимостями, контроля соответствия политикам безопасности и изменений.
  • Постоянная защита корпоративных ресурсов с помощью автоматического мониторинга информационной безопасности.
  • Возможность получать максимально достоверную картину защищенности сети.
  • Анализ широкого спектра сложных систем: сетевое оборудование, такое как Cisco, Juniper, платформы Windows, Linux, Unix, СУБД MSQL, Oracle, MySQL и т.д., сетевые приложения и веб-службы.
  • Минимизация затрат на аудит и контроль защищенности.

В статье я не буду рассматривать всё выше перечисленное, затронем только наиболее распространённые и простые вопросы.

Подготовка

Итак, для начала я установил сервер мониторинга Zabbix. В качестве платформы мы будем использовать ОС FreeBSD. Думаю, что рассказывать в деталях о процессе установки и настройки нет необходимости, довольно подробная документация на русском языке есть на сайте разработчика, начиная от процесса установки до описания всех возможностей системы.
Мы будем считать что сервер установлен, настроен, а так же настроен web-frontend для работы с ним. На момент написания статьи система работает под управлением ОС FreeBSD 9.1, Zabbix 2.2.1.

Мониторинг событий безопасности MS Windows Server

С помощью системы мониторинга Zabbix можно собирать любую имеющуюся информацию из системных журналов Windows с произвольной степенью детализации. Это означает, что если Windows записывает какое-либо событие в журнал, Zabbix «видит» его, например по Event ID, текстовой, либо бинарной маске. Кроме того, используя Zabbix, мы можем видеть и собирать колоссальное количество интересных для мониторинга безопасности событий, например: запущенные процессы, открытые соединения, загруженные в ядро драйверы, используемые dll, залогиненных через консоль или удалённый доступ пользователей и многое другое.

Всё, что остаётся – определить события возникающие при реализации ожидаемых нами угроз.

Устанавливая решение по мониторингу событий ИБ в ИТ инфраструктуре следует учитывать необходимость выбора баланса между желанием отслеживать всё подряд, и возможностями по обработке огромного количества информации по событиям ИБ. Здесь Zabbix открывает большие возможности для выбора. Ключевые модули Zabbix написаны на C/C++, скорость записи из сети и обработки отслеживаемых событий составляет 10 тысяч новых значений в секунду на более менее обычном сервере с правильно настроенной СУБД.

Всё это даёт нам возможность отслеживать наиболее важные события безопасности на наблюдаемом узле сети под управлением ОС Windows.

Итак, для начала рассмотрим таблицу с Event ID, которые, на мой взгляд, очевидно, можно использовать для мониторинга событий ИБ:

События ИБ MS Windows Server Security Log

Я уделяю внимание локальным группам безопасности, но в более сложных схемах AD необходимо учитывать так же общие и глобальные группы.
Дабы не дублировать информацию, подробнее о критически важных событиях можно почитать в статье:
http://habrahabr.ru/company/netwrix/blog/148501/

Способы мониторинга событий ИБ MS Windows Server

Рассмотрим практическое применение данной задачи.
Для сбора данных необходимо создать новый элемент данных:

Ключ: eventlog[Security,,,,1102|4624|4625|4720|4724|4725|4726|4731|4732|4733|4734|4735|4738|4781]
Тип элемента данных: Zabbix агент (активный)
Тип информации: Журнал (лог)

image

При желании для каждого Event ID можно создать по отдельному элементу данных, но я использую в одном ключе сразу несколько Event ID, чтобы хранить все полученные записи в одном месте, что позволяет быстрее производить поиск необходимой информации, не переключаясь между разными элементами данных.

Хочу заметить что в данном ключе в качестве имени мы используем журнал событий Security.
Теперь, когда элемент данных мы получили, следует настроить триггер. Триггер – это механизм Zabbix, позволяющий сигнализировать о том, что наступило какое-либо из отслеживаемых событий. В нашем случае – это событие из журнала сервера или рабочей станции MS Windows.

Теперь все что будет фиксировать журнал аудита с указанными Event ID будет передано на сервер мониторинга. Указание конкретных Event ID полезно тем, что мы получаем только необходимую информацию, и ничего лишнего.

Вот одно из выражений триггера:

{Template Windows - Eventlog 2008:eventlog[Security,,,,1102|4624|4625|4720|4724|4725|4726|4731|4732|4733|4734|4735|4738|4781].logeventid(4624)}=1&{Template Windows - Eventlog 2008:eventlog[Security,,,,1102|4624|4625|4720|4724|4725|4726|4731|4732|4733|4734|4735|4738|4781].nodata(5m)}=0

image

Данное выражение позволит отображать на Dashboard информацию о том что «Вход с учётной записью выполнен успешно», что соответствует Event ID 4624 для MS Windows Server 2008. Событие исчезнет спустя 5 минут, если в течение этого времени не был произведен повторный вход.

Если же необходимо отслеживать определенного пользователя, например “Администратор”, можно добавить к выражению триггера проверку по regexp:

&{Template Windows - Eventlog 2008:eventlog[Security,,,,1102|4624|4625|4720|4724|4725|4726|4731|4732|4733|4734|4735|4738|4781,,skip].regexp(Администратор)}=1

Тогда триггер сработает только в том случае если будет осуществлён вход в систему именно под учетной записью с именем “Администратор”.

P.S.

Мы рассматривали простейший пример, но так же можно использовать более сложные конструкции. Например с использованием типов входа в систему, кодов ошибок, регулярных выражений и других параметров.

Таким образом тонны сообщений, генерируемых системами Windows будет проверять Zabbix, а не наши глаза. Нам остаётся только смотреть на панель Zabbix Dashboard.
Дополнительно, у меня настроена отправка уведомлений на e-mail. Это позволяет оперативно реагировать на события, и не пропустить события произошедшие например в нерабочее время.

Мониторинг событий безопасности Unix систем

Система мониторинга Zabbix так же позволяет собирать информацию из лог-файлов ОС семейства Unix.

События ИБ в Unix системах, подходящие для всех

Такими проблемами безопасности систем семейства Unix являются всё те же попытки подбора паролей к учётным записям, а так же поиск уязвимостей в средствах аутентификации, например, таких как SSH, FTP и прочих.

Некоторые критически важные события в Unix системах

Исходя из вышеуказанного следует, что нам необходимо отслеживать действия, связанные с добавлением, изменением и удалением учётных записей пользователей в системе.
Так же немаловажным фактом будет отслеживание попыток входа в систему. Изменения ключевых файлов типа sudoers, passwd, etc/rc.conf, содержимое каталогов /usr/local/etc/rc.d наличие запущенных процессов и т.п.

Способы мониторинга ИБ в Unix системах

Рассмотрим следующий пример. Нужно отслеживать входы в систему, неудачные попытки входа, попытки подбора паролей в системе FreeBSD по протоколу SSH.

Вся информация об этом, содержится в лог-файле /var/log/auth.log.
По умолчанию права на данный файл — 600, и его можно просматривать только с привилегиями root. Придется немного пожертвовать локальной политикой безопасности, и разрешить читать данный файл группе пользователей zabbix:
Меняем права на файл:

chgrp zabbix /var/log/auth.log
chmod 640 /var/log/auth.log

Нам понадобится новый элемент данных со следующим ключом:

log[/var/log/auth.log,sshd,,,skip]

image

Все строки в файле /var/log/auth.log содержащие слово ”sshd” будут переданы агентом на сервер мониторинга.

Далее можно настроить триггер со следующим выражением:

{Template FreeBSD - SSH:log[/var/log/auth.log,sshd,,,skip].regexp(error:)}|{Template FreeBSD - SSH:log[/var/log/auth.log,sshd,,,skip].regexp(Wrong passwordr:)}&{Template FreeBSD - SSH:log[/var/log/auth.log,sshd,,,skip].nodata(3m)}=0

image

Это выражение определяется как проблема, когда в лог-файле появляются записи, отобранные по регулярному выражению “error:”. Открыв историю полученных данных, мы увидим ошибки, которые возникали при авторизации по протоколу SSH.

Вот пример последнего значения элемента данных, по которому срабатывает данный триггер:

image

Рассмотрим ещё один пример мониторинга безопасности в ОС FreeBSD:
С помощью агента Zabbix мы можем осуществлять проверку контрольной суммы файла /etc/passwd.
Ключ в данном случае будет следующий:

vfs.file.cksum[/etc/passwd]

Это позволяет контролировать изменения учётных записей, включая смену пароля, добавление или удаление пользователей. В данном случае мы не узнаем, какая конкретная операция была произведена, но если к серверу кроме Вас доступ никто не имеет, то это повод для быстрого реагирования. Если необходимо более детально вести политику то можно использовать другие ключи, например пользовательские параметры.

Например, если мы хотим получать список пользователей, которые на данный момент заведены в системе, можно использовать такой пользовательский параметр:

UserParameter=system.users.list, /bin/cat /etc/passwd | grep -v "#" | awk -F: '{print $$1}'

И, например, настроить триггер на изменение в получаемом списке.

Или же можно использовать такой простой параметр:

UserParameter=system.users.online, /usr/bin/users

Так мы увидим на Dashboard, кто на данный момент находится в системе:

image

Мониторинг событий ИБ на сетевых устройствах

С помощью Zabbix можно так же очень эффективно отслеживать события ИБ на сетевых устройствах Cisco и Juniper, используя протокол SNMP. Передача данных с устройств осуществляется с помощью так называемых трапов (SNMP Trap).

С точки зрения ИБ можно выделить следующие события, которые необходимо отслеживать — изменения конфигураций оборудования, выполнение команд на коммутаторе/маршрутизаторе, успешную авторизацию, неудачные попытки входа и многое другое.

Способы мониторинга

Рассмотрим опять же пример с авторизацией:
В качестве стенда я буду использовать эмулятор GNS3 с маршрутизатором Cisco 3745. Думаю многим знакома данная схема.

Для начала нам необходимо настроить отправку SNMP трапов с маршрутизатора на сервер мониторинга. В моём случае это будет выглядеть так:

login block-for 30 attempts 3 within 60
login on-failure log
login on-success log
login delay 5

logging history 5

snmp-server enable traps syslog
snmp-server enable traps snmp authentication
snmp-server host 192.168.1.1 public

Будем отправлять события из Syslog и трапы аутентификации. Замечу, что удачные и неудачные попытки авторизации пишутся именно в Syslog.

Далее необходимо настроить прием нужных нам SNMP трапов на сервере мониторинга.
Добавляем следующие строки в snmptt.conf:

EVENT clogMessageGenerated .1.3.6.1.4.1.9.9.41.2.0.1 "Status Events" Normal
FORMAT ZBXTRAP $ar $N $*
SDESC
EDESC

В нашем примере будем ловить трапы Syslog.

Теперь необходимо настроить элемент данных для сбора статистики со следующим ключом:

snmptrap[“Status”]

image

Если трап не настроен на сервере мониторинга, то в логе сервера будут примерно такие записи:

unmatched trap received from [192.168.1.14]:...

В результате в полученном логе будет отражаться информация о попытках входа с детализированной информацией (user, source, localport и reason в случае неудачи):

image

Ну и можно настроить триггер для отображения события на Dashboard:

{192.168.1.14:snmptrap["Status"].regexp(LOGIN_FAILED)}&{192.168.1.14:snmptrap["Status"].nodata(3m)}=0

В сочетании с предыдущим пунктом у нас на Dashboard будет информация вот такого плана:

image

Аналогично вышеописанному примеру можно осуществлять мониторинг большого количества событий, происходящих на маршрутизаторах Cisco, для описания которых одной статьей явно не обойтись.

Хочу заметить что приведённый пример не будет работать на продуктах Cisco ASA и PIX, так как там несколько иначе организована работа с логированием авторизации.

Juniper и Syslog

Ещё одним примером мы разберем мониторинг авторизации в JunOS 12.1 для устройств Juniper.
Тут мы не сможем воспользоваться трапами SNMP, потому как нет поддержки отправки трапов из Syslog сообщений. Нам понадобится Syslog сервер на базе Unix, в нашем случае им будет тот же сервер мониторинга.

На маршрутизаторе нам необходимо настроить отправку Syslog на сервер хранения:

system syslog host 192.168.1.1 authorization info

Теперь все сообщения об авторизации будут отправляться на Syslog сервер, можно конечно отправлять все сообщения (any any), но переизбыток информации нам не нужен, отправляем только необходимое.

Далее переходим к Syslog серверу
Смотрим tcpdump, приходят ли сообщения:

tcpdump -n -i em0 host 192.168.1.112 and port 514
12:22:27.437735 IP 192.168.1.112.514 > 192.168.1.1.514: SYSLOG auth.info, length: 106

По умолчанию в настройках syslog.conf все что приходит с auth.info должно записываться в /var/log/auth.log. Далее делаем все аналогично примеру с мониторингом входов в Unix.

Вот пример строки из лога:

image

Остается только настроить триггер на данное событие так же как это было рассмотрено в примере с авторизацией на Unix сервере.

P.S.

Таким способом можно отслеживать множество событий, среди которых такие как: сохранение конфигурации устройства (commit), вход и выход из режима редактирования конфигурации (edit).
Так же хочу заметить, что аналогичным способом можно осуществлять мониторинг и на устройствах Cisco, но способ с SNMP трапами мне кажется более быстрым и удобным, и исключается необходимость в промежуточном Syslog сервере.

Заключение

В заключении хочу отметить, что я с удовольствием приму замечания и дополнения к данной статье, а так же интересные предложения по использованию мониторинга событий информационной безопасности при помощи Zabbix.
Спасибо за внимание. :)

Print Friendly, PDF & Email

Задача:

Настроить триггер в заббиксе для мониторинга доступности интернет страницы

—————————————————————

Триггер – это инструмент позволяющий оценить собранные данные и на основании настроенных условий, определить имеет ли данный элемент данных ошибки или определённые проблемы. Trigger имеем два состояния:

  • Problem – означает, что что-то случилось.
  • OK – нормальное состояние триггера. 

Данная статья, является продолжением “Мониторинг веб-сайта при помощи Zabbix“. Создавать триггер буду для уже настроенного шаблона (Template).

Чтобы создать новый триггер, необходимо перейти на вкладку главного меню “Configuration” и в появившемся подменю выбрать “Templates”. Далее ищем наш шаблон и открываем. Переходим во вкладку триггеры и нажимаем в правом верхнем углу “Create trigger”

Заполняем согласно картинки ниже

Более детальное описание параметров, для тех кто делает это в первый раз:

  • Name – название триггера. Именно такое сообщение (имя тригера) придёт при возникновении проблемы.
  • Severity – классификация важности тригера
    • Not classified (не классифицировано) – неизвестная важность. Инциденты будут иметь серый цвет.
    • Information (информация) – в информационных целях. Светло зеленый цвет сообщений.
    • Warning (предупреждение) – Предупреждающий статус. Желтый.
    • Average (средняя) – средняя проблема. Оранжевый.
    • High (Высокая важность) – Произошло что-то важное или что-то пошло не так. Красный.
    • Disaster (чрезвычайная важность) – Чрезвычайная ситуация, остановка сервиса соизмеримая с потерей денег. Ярко красный цвет.
  • Problem expression – Условия обнаружения проблемы. Имеено этим условием мы определяем недоступность сайта. В данном случае я настроил, что если значение 3-х последних проверок больше, либо равно единице, то сайт не доступен.
{WebSites_osBSD.com:web.test.fail[osBSD.com].last(#3)}>=1

  • Recovery expression – выражение восстановления проблемы. Если последняя проверка вернула код 0, что свидетельствует об отсутствии ошибки, то сайт считается доступным.
{WebSites_osBSD.com:web.test.fail[osBSD.com].last()}=0
  • Enabled – включение мониторинга. Не забываем поставить галочку, чтобы не искать, почему не работает тригер.

Без настройки оповещения сообщения приходить не будут. Как подключить заббикс к телеграмму читаем тут: “Подключаем Telegram к Zabbix“

Другие статьи

Понравилась статья? Поделить с друзьями:

Читайте также:

  • Как изменить триггер mysql
  • Как изменить третье лицо на ответчика
  • Как изменить тренировку на apple watch
  • Как изменить трек чтобы обойти авторские права ютуб
  • Как изменить трек номер на озон

  • 0 0 голоса
    Рейтинг статьи
    Подписаться
    Уведомить о
    guest

    0 комментариев
    Старые
    Новые Популярные
    Межтекстовые Отзывы
    Посмотреть все комментарии