вторник, 13 июля 2010 г.

Непостоянные сервисы (Volatile services)


Введение
Система мониторинга Icinga способна различать "нормальные" и "непостоянные" сервисы. Опция is_volatile задается в определении сервиса и определяет, будет ли является сервис непостоянным или нет. В большинстве случаев многие будут использовать "нормальные" сервисы, однако, при правильном использовании, непостоянные сервисы могут оказаться крайне полезными.


Где могут быть полезны непостоянные сервисы?
Непостоянные сервисы могут быть полезны в следующих случаях:
·      Для мониторинга сервисов, которые автоматически сбрасываются в состояние "OK" после каждой проверки;
·      Для мониторинга событий, которые требуют рассмотрения (внимания) каждый раз при возникновении проблемы (а не только первый раз после ее возникновения), например, предупреждения о нарушении безопасности.

Особенности непостоянных сервисов
Непостоянные сервисы имеют три основных отличия от "нормальных" сервисов. Они проверяются всякий раз, когда находятся в проблемном состоянии типа HARD , а также когда результатом проверки является отличное от "OK" состояние (то есть не происходит восстановление состояния в положительное состояние "OK"), при этом:
·      в журнале сообщений регистрируется проверка, которая находится в состоянии отличном от состояния "OK"
·      о проблеме оповещаются контактные лица (если это настроено ).
            Замечание
            Для непостоянных сервисов игнорируются интервалы уведомления.
·      для сервиса выполняется обработчик событий (если он был определен).

Обычно (для нормальных проверок), данные действия выполняются только для сервисов, которые только что перешли в проблемное состояние типа HARD. Если последующие проверки сервиса возвращают проблемное состояние типа HARD, то для сервиса, действия, описанные выше, не выполняются.

Подсказка
Если Вам необходимо только журналирование, рассмотрите вариант использования опции вместо непостоянных сервисов.

Сила двух
Можно реализовать очень полезные вещи, если совместить использование функций непостоянных сервисов и пассивных проверок сервиса . Например, обработку SNMP-трапов, предупреждения о нарушении безопасности, и т.д.
Рассмотрим следующий пример:
Предположим, Вы используете PortSentry для обнаружения сканирования портов Вашей машины и автоматической блокировки потенциального злоумышленника с помощью средств межсетевого экранирования. Если Вы хотите сообщить системе мониторинга Icinga о сканировании портов, сделайте следующее:
Конфигурация системы мониторинга Icinga:
·      Определите сервис (define service {...}) с именем Port Scans и свяжите его с хостом, на котором работает PortSentry.
·      Установите значение параметра max_check_attempts сервиса равным 1. Это позволит системе мониторинга Icinga незамедлительно переводить сервис в состояние типа HARD в случае, если сервис окажется в состоянии отличном от "OK".
·      Установите значение параметра active_checks_enabled сервиса равным 0. Это запретит системе мониторинга Icinga выполнять активные проверки для данного сервиса.
·      Установите параметр passive_checks_enabled сервиса равным 1. Это включит пассивные проверки сервиса.
·      Установите параметр is_volatile сервиса равным 1.
Конфигурация PortSentry:
Отредактируйте конфигурационный файл PortSentry (portsentry.conf) и определите команду KILL_RUN_CMD следующим образом:
KILL_RUN_CMD="/usr/local/Icinga/libexec/eventhandlers/submit_check_result host_name 'Port Scans' 2 'Port scan from host $TARGET$ on port $PORT$.  Host has been firewalled.'"
Убедитесь в том, что Вы заменили host_name (в определении команды KILL_RUN_CMD) кратким названием хоста, с которым связан определенный в системе мониторинга Icinga сервис.
Сценарий Сканирования портов:
Создайте shell-скрипт в каталоге /usr/local/icinga/libexec/eventhandlers со следующим именем - submit_check_result. Содержание shell-скрипта должно быть следующим:
#!/bin/sh

# Write a command to the Icinga command file to cause
# it to process a service check result

echocmd="/bin/echo"

CommandFile="/usr/local/icinga/var/rw/nagios.cmd"

# get the current date/time in seconds since UNIX epoch
datetime=`date +%s`

# create the command line to add to the command file
cmdline="[$datetime] PROCESS_SERVICE_CHECK_RESULT;$1;$2;$3;$4"

# append the command to the end of the command file
`$echocmd $cmdline >> $CommandFile`

Что произойдет, когда PortSentry обнаружит сканирование портов на хосте?
·      PortSentry заблокирует хост потенциального злоумышленника (это стандартная возможность программного обеспечения PortSentry),
·      PortSentry выполнит shell-скрипт submit_check_result и тем самым отправит результат пассивной проверки системе мониторинга Icinga
·      система мониторинга Icinga обработает файл внешних команд и увидит представленную  PortSentry пассивную проверку сервиса
·              система мониторинга Icinga переведет сервис Port Scans  в состояние CRITICAL типа HARD и отправит уведомления контактным лицам.

Комментариев нет:

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