Рубрика:
Администрирование /
Администрирование
|
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|
Андрей Бирюков
Разрабатываем пакет управления для МОМ
В вашей сети есть множество приложений, работу которых вам необходимо постоянно контролировать. Как написать свой пакет управления МОМ для одной из наиболее важных служб вашей сети?
Определяем задачу
В предыдущей статье [1] вы узнали об архитектуре продукта Microsoft Operations Manager 2005, его функциональных возможностях, а также способах установки компонентов MOM, в том числе и пакетов управления Management Packs. Пакеты представляют собой контейнеры, содержащие наборы правил, которые позволяют осуществлять сбор информации. Однако мы рассмотрели вариант использования уже готовых пакетов, которые необходимо было лишь импортировать в МОМ. Удобство такого подхода очевидно, не нужно самостоятельно разработывать пакет, соответственно нет необходимости разбираться в структуре взаимодействия Management Pack с МОМ. Но все это удобно лишь в том случае, если для интересующего вас программного продукта уже разработан пакет управления. Как упоминалось в предыдущей статье, Management Pack разработаны для всех продуктов Microsoft. Также пакеты управления есть для Lotus Domino и для систем резервного копирования Veritas (Symantec) Backup Exec. Но наверняка в вашей сети найдутся жизненно важные сервисы, состояние которых хотелось бы отслеживать с помощью МОМ, а готового пакета управления на сайте производителя найти не удалось. Проблему можно решить написав собственный пакет управления. Дабы не быть голословным, в этой статье я опишу, как на практике создать Management Pack для одного из критичных ресурсов любой сети.
В качестве примера такого сервиса предлагаю вам рассмотреть систему антивирусной защиты серверов. Данный компонент – неотъемлемая часть системы безопасности любой сети, но не для всех корпоративных антивирусов производители разработали пакеты управления для взаимодействия с МОМ.
Примером антивируса будет ClamAV. В данном случае неважно какой именно антивирус вы используете, так как архитектура взаимодействия схожа.
Стандартная антивирусная система для защиты рабочих станций и файловых серверов представляет собой процесс или несколько процессов, которые постоянно запущены в памяти и выполняют действия по сканированию и удалению вредоносного кода из системы. Результаты всех этих действий всегда должны сохраняться в соответствующих журналах (логах). В нашем случае результаты антивирусной проверки сохраняются в текстовом файле.
Архитектура Management Pack
Пакет управления МОМ состоит из следующих основных взаимосвязанных компонентов (см. рис. 1):
- Computer Attributes – в разделе определяется набор атрибутов, по которым будет осуществляться поиск нужных хостов.
- Computer Groups – группа компьютеров, объединенная по определенному признаку, например серверы, на которых установлен Microsoft SQL.
- Rule Groups – группы правил, которые являются неотъемлемой частью любого пакета управления.
- Providers – провайдеры являются ключевыми элементами правил. Они определяют, где правило должно получать требуемые данные. Основным источником данных для правил является журнал Event Log.
- Rules – правила, которые определяют, какие данные должны анализироваться пакетом управления, критерии, по которым ведется отбор, и какой ответ должен быть в случае получения интересующей информации.
- Automated Responses – в этом разделе определяются ответы, возвращаемые МОМ.
- Views – это ключевая возможность Management Pack, так как Views позволяют создавать сообщения о различных событиях, а также собирать информацию о производительности управляемой системы.
Рисунок 1. Компоненты Management Pack
Предназначение каждого компонента станет более понятным непосредственно в процессе написания пакета управления, к которому мы собственно и приступаем.
Области действия и атрибуты
Начнем составление нового пакета управления. Сначала необходимо определиться с атрибутами, по которым будет выполняться выборка. В консоли «Administrator Console» выбираем «Management Packs», далее «Computer Attributes» и затем в меню «Action» указываем «Create Computer Attribute».
Далее предлагается выбрать, по какому именно атрибуту выбирать: по ветке реестра или по значению. Для рассматриваемого в статье антивируса ClamAV нас будет интересовать ветка: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall\ClamAV. Далее указываем имя, и атрибут готов.
При необходимости таких атрибутов может быть несколько. Например, определенная операционная система или наличие специфического приложения на хосте (см. рис. 2).
Рисунок 2. Ветка реестра в разделе «Attributes»
Теперь определимся с группой серверов, на которых нужно осуществлять мониторинг. В общем случае можно воспользоваться уже готовыми группами. Если же в вашей сети серверов очень много и вам необходимо указать лишь несколько из них, то тогда создайте новую группу, выбрав в меню «Actions» опцию «Create Computer Group». Однако антивирус должен быть установлен на каждой рабочей станции и уж тем более на каждом сервере, так что лучше, чтобы в используемой группе были все сервера.
Следующим этапом в разработке Management Pack будет создание правил. Для этого прежде всего необходимо создать группу правил Rule Group («Action –> New Rule Groups»). При создании новой группы можно сразу указать те хосты, к которым будут эти правила применяться.
В созданной группе правил есть три раздела: Event Rules, Alert Rules и Performance Rules. Подробно содержимое этих разделов уже рассматривалось в предыдущей статье [1]. Поэтому сейчас я опишу только те компоненты, которые необходимы для создания своего пакета управления.
Во-первых, нас интересует бесперебойная работа антивирусного сервиса. Информация обо всех остановках сервиса должна немедленно сообщаться оператору МОМ. Для этого необходимо создать Alert Rule, которое будет отслеживать состояние сервиса и в случае получения от системы сообщения «Service Unavaliable» отправлять письмо определенной группе пользователей. Реализовать все это можно следующим образом:
В созданной группе правил открываем раздел «Alert Rules», далее в меню «Action» выбираем «Create Alert Rule», отмечаем опцию of severity, а в соответствующем списке – пункт «Service Unavailable». Таким образом, будут отслеживаться системные сообщения о недоступности сервиса.
На следующем шаге указываем время, когда это правило будет выполняться – «Always process data».
Наконец необходимо указать ответные действия «Responses». Как уже упоминалось ранее, нам требуется отправить уведомление соответственно «Send a notification to a Notification group». В разделе «Notification» выбираем группу получателей «Notification group – Network Administrators». В соседней закладке «E-Mail format» можно внести изменения в формат почтового сообщения, которое будет отправлено операторам.
В качестве дополнительных ответных действий можно также прописать запуск сценария, который будет перезапускать сервис. В простейшем случае такой сценарий может состоять из одной команды:
Net start [Имя_сервиса]
Однако зачастую внезапное «падение» сервиса носит неслучайный характер и простого рестарта служб может оказаться недостаточно, так как необходимо выяснить причину данного сбоя, поэтому непременно должно быть отправлено уведомление оператору.
Теперь рассмотрим вопрос, касающийся создания операторов. В административной консоли МОМ для этого предусмотрен раздел «Notifications» (Уведомления), в котором определены «Notification Group» (Группы уведомлений). Здесь необходимо добавить нужного оператора в группу «Network Administrators», указав при этом контактный e-mail, на который требуется отправлять уведомления.
Сценарии и запросы
Итак, мы определились с атрибутами, по которым будет проходить выборка, также составили список тех машин, на которых необходимо осуществлять мониторинг. Теперь определимся с провайдером (Provider), то есть с источником информации об интересующих нас событий. Таким событием прежде всего является остановка сервиса ClamAV, то есть необходимо обнаруживать состояние Stopped. В решении этой проблемы нам поможет запрос WMI. Подробнее об этом мощном средстве Windows уже рассказывалось в предыдущих выпусках журнала [2, 3]. Для контроля состояния сервиса ClamAV необходимо построить запрос следующего содержания:
select * from __InstanceModificationEvent WITHIN 89 Where TargetInstance ClamAV'Win32_Service' AND TargetInstance.State = 'Stopped'
Для этого в меню «Management Pack» выбираем опцию «Providers», далее «Create Provider». В качестве типа провайдера выбираем «WMI Events» и в следующем окне, в поле запрос, указываем вышеприведенную строку. Таким образом, был создан источник информации по интересующему событию.
Думаю, очевидным требованием для антивирусного комплекса будет возможность создавать уведомления об обнаружении зараженных файлов. Для того чтобы создавать такие уведомления, лучше всего воспользоваться сценарием на VBScript, который будет производить анализ файла журнала антивирусной системы, осуществляя поиск вхождений строк, сообщающих об обнаруженных зараженных файлах, а также о результатах лечения или удаления из них вредоносного кода. Файл такого журнала может иметь следующий вид:
…
c:/windows/DtcInstall.log: OK
c:/windows/eicar_com.zip: Eicar-Test-Signature FOUND
c:/windows/EventSystem.log: OK
c:/windows/explorer.exe: OK
c:/windows/Zapotec.bmp: OK
c:/windows/_default.pif: OK
…
----------- SCAN SUMMARY -----------
Known viruses: 53081
Engine version: devel-20060426
Scanned directories: 1
Scanned files: 84
Infected files: 1
Data scanned: 5.66 MB
Time: 17.856 sec (0 m 17 s)
|
В примере продемонстрировано обнаружение тестового вируса Eicar, который используется для тестирования антивирусных продуктов.
Сценарий, осуществляющий поиск подобных записей, должен содержать код, подобный представленному в Листинге 1.
Листинг 1. Поиск вхождений в файле журнала
‘ путь к файлу журнала
strFile="c:\clamav-devel\log\clamd.log"
Set objFSO = CreateObject("Scripting.FileSystemObject")
‘ открываем файл на чтение
Set readPCFile = objFSO.OpenTextFile(strFile, ForReading)
search="FOUND" искомая подстрока
‘ цикл по всему файлу журнала
Do Until readPCFile.AtEndOfStream
strNextLine = readPCFile.Readline ‘ считываем построчно
‘ вхождение найдено
If Instr(InStr(1,strNextLine,search)) then
‘ присваиваем соответствующее значение переменной
result= strNextLine
… ‘ далее действия с этой переменной
End If
Loop ‘ завершение цикла
readPCFile.Close ‘ закрываем файл
Использовать сценарий в таком виде непосредственно в МОМ нельзя, так как для пакетов Management Pack существует определенный формат сценариев, которого необходимо придерживаться. Прежде всего нужно определить ряд констант и переменных. Обычно эта инициализация производится вначале сценария и имеет вид:
Листинг 2. Общий вид сценария
‘ блок инициализации
Option Explicit
Const PROBLEMSTATE_NOTSET = 0
Const PROBLEMSTATE_GREEN = 1
Const PROBLEMSTATE_YELLOW = 3 ' Yellow = Red+(Warning|Error)
Const PROBLEMSTATE_RED = 3
Const ALERT_SUCCESS = 10
Const ALERT_INFORMATION = 20
Const ALERT_WARNING = 30
Const ALERT_ERROR = 40
Const ALERT_CRITICAL_ERROR = 50
Const ALERT_SECURITY_BREACH = 60
Const ALERT_SERVICE_UNAVAILABLE = 70
Dim oEvent
Set oEvent = ScriptContext.CreateEvent()
‘ основной блок
Sub Main()
‘ здесь производится вызов процедур, используемых для сбора и обработки необходимой информации
End Sub
‘
Function ThrowScriptError(sMessage, oErr)
'
' ThrowScriptError :: Creates an event and sends it back to the mom server
'
' процедура возвращает сообщение об ошибке, в случае некорректного завершения сценария
ScriptContext.Quit()
End Function
' VBScript source code
ScriptContext.Submit oEvent
Напишем сценарий, который будет отслеживать появление в журналах событий антивирусной системы сообщения о зараженных файлах (напротив имен таких файлов должно быть написано FOUND). Далее сценарий будет передавать МОМ сообщение в специальном формате, на основании которого будет создан Alert, сообщающий оператору системы о заражении файла.
Листинг 3. Сценарий, сообщающий об обнаружении зараженного файла
Option Explicit
Const PROBLEMSTATE_NOTSET = 0 ‘ состояние проблемы
Const PROBLEMSTATE_GREEN = 1 ‘ цветовая маркировка
Const PROBLEMSTATE_YELLOW = 3 ‘ Yellow = Red+(Warning|Error)
Const PROBLEMSTATE_RED = 3 Const ALERT_SUCCESS = 10
Const ALERT_INFORMATION = 20 ‘ различные виды уведомлений Alert
Const ALERT_WARNING = 30
Const ALERT_ERROR = 40
Const ALERT_CRITICAL_ERROR = 50
Const ALERT_SECURITY_BREACH = 60
Const ALERT_SERVICE_UNAVAILABLE = 70
Dim oAlertHandle
‘ Объект для создаваемого события
Set oAlertHandle = ScriptContext.CreateAlert()
‘ основной блок
Sub Main()
‘ здесь производится вызов процедур, используемых для сбора и обработки необходимой информации
virusfind()
End Sub
Sub virusfind()
‘ путь к файлу журнала
strFile=”c:\clamav-devel\log\clamd.log”
Set objFSO = CreateObject(“Scripting.FileSystemObject”)
‘ открываем файл на чтение
Set readPCFile = objFSO.OpenTextFile(strFile, ForReading)
search=”FOUND” искомая подстрока
‘ цикл по всему файлу журнала
Do Until readPCFile.AtEndOfStream
‘ считываем построчно
strNextLine = readPCFile.Readline
‘ вхождение найдено
If Instr(InStr(1,strNextLine,search)) then
‘ присваиваем соответствующее значение переменной
result= strNextLine
‘ далее приводятся свойства уведомления
oAlertHandle.Name = “ Virus found!!!”
‘ описание события
oAlertHandle.Description = “Virus found in file” & result
‘ Какая роль (диск так как вирус найден на файловом уровне, а например, не в памяти)
oAlertHandle.ServerRole = “Disk”
‘ компонента – файловая система
oAlertHandle.Component = “File System”
‘ цвет уведомления желтый
oAlertHandle.ProblemState = PROBLEMSTATE_YELLOW
‘ вид уведомления – предупреждение
oAlertHandle.AlertLevel = ALERT_WARNING
End If
Loop ‘ завершение цикла
readPCFile.Close ‘ закрываем файл
End sub
‘
Function ThrowScriptError(sMessage, oErr)
‘
‘ ThrowScriptError :: Creates an event and sends it back to the mom server
'
' процедура возвращает сообщение об ошибке, в случае некорректного завершения сценария
On Error Resume Next
Dim oScriptErrorEvent
Set oScriptErrorEvent = ScriptContext.CreateEvent()
With oScriptErrorEvent
.EventNumber = 40000
‘EventLogEntryType Enumeration
.EventType = 1
.Message = sMessage
.SetEventParameter “Microsoft Windows Servers Base Operating System”
.SetEventParameter sMessage
.SetEventParameter oErr.Description
.SetEventParameter oErr.Number
End With
ScriptContext.Submit oScriptErrorEvent
ScriptContext.Echo ?
“ThrowScriptError(‘” & sMessage & “’)”
ScriptContext.Quit()
End Function
‘ VBScript source code
ScriptContext.Submit oEvent
Итак, как видно из Листинга 3, для создания уведомления необходимо прописать объект соответствующего типа и затем передать ему найденные в результате работы процедуры поиска данные.
Теперь для завершения создания пакета нужно прописать данный сценарий в МОМ. Сделать это можно следующим образом. В консоли администрирования выбираем «Management Packs», далее «Scripts», в меню «Action» указываем «Create Script». В открывшемся окне пишем имя, в качестве языка сценариев указываем VBScript, далее просто копируем через буфер обмена исходный текст, в следующем окне Parameters ничего указывать не надо, так как все необходимые данные извлекаются в процессе работы программы.
Наконец завершающим этапом в составлении пакета управления для антивирусной системы является подключение написанного сценария к Management Pack. Для этого нужно создать задачу «Task». Для этого выбираем «Create Task», в окне, запрашивающем, где должен выполняться сценарий (Task Run Location And Type), выбираем «Agent Managed Computer» и тип задачи – «Script». В следующем окне «Target Role – Computer и Script» – указываем имя того сценария, который был создан ранее. Далее указываем имя задачи и нажимаем «Finish».
Получаем результат
Итак, пакет управления создан. Что же было получено в результате? Теперь при обнаружении антивирусной системой зараженного файла в консоли оператора можно наблюдать следующие сообщения (см. рис. 3).
Рисунок 3. Сообщение о зараженном файле
Аналогичное сообщение придет на почтовый адрес оператора, что может оказаться весьма полезным в случае массовой вирусной эпидемии. Также уведомление будет отправлено в случае, если по какой-либо причине на одном или нескольких хостах будет остановлена служба антивируса. Не секрет, что многие вирусы, прежде чем начать заражение сети, пытаются остановить службу антивируса для того, чтобы сделать атакуемый узел беззащитным и полностью захватить его ресурсы.
Выводы
Подводя итог всех выполненных действий, хотелось бы сделать ряд пояснений. Конечно, большинство коммерческих корпоративных антивирусов умеют выполнять описанные в статье задачи. Так, для контроля за работой службы антивируса используются различные механизмы, которые в случае остановки сервиса немедленно его перезапускают. Также и уведомления о вирусах они могут рассылать не только с помощью электронной почты, но и, к примеру, с помощью служб мгновенных сообщений (ICQ, MSN и других). Так что целью статьи не являлось изобретение велосипеда в управлении корпоративными антивирусными системами. Главное, на примере бесплатного антивируса ClamAV показан механизм создания собственного пакета управления для Microsoft Operations Manager. Теперь на основе приведенных рекомендаций вы сможете построить уже собственный пакет управления для тех сервисов, которые критичны именно для вашей сети, будь то система антиспама, сервер бухгалтерии или служба резервного копирования. Думаю, в ваших интересах получать своевременные сообщения обо всех жизненно важных системах сети.
- Бирюков А. Microsoft Operations Manager 2005 – управляем сетью. //Системный администратор, №10, 2006 г. – С. .
- Леонтьев К. Вы все еще не используете WMI? Часть 1. //Системный администратор, №1, 2006 г. – С. 4-11;
Леонтьев К. Вы все еще не используете WMI? Часть 2: пишем сценарии//Системный администратор, №2, 2006 г. – С. 6-14.
- Леонтьев К. Узнай секреты WMI: события и провайдеры. Часть 1: дополнительные возможности. //Системный администратор, №3, 2006 г. – С. 6-13;
Леонтьев К. Узнай секреты WMI: события и провайдеры. Часть 2: ключ к управлению системой и приложениями. //Системный администратор, №5, 2006 г. – С. 28-34.
- Microsoft Operations Manager Software Development Kit.
- Microsoft Management Pack Developer Guide.
Facebook
Мой мир
Вконтакте
Одноклассники
Google+
|