netmond-2.2-b6-port В данном документе описаны изменения и добавления относительно оригинальных исходных текстров netmond-2.2-b6. ################################################################## SrcAddress patch ################################################################## В некоторых ситуациях необходимо явно задать IP адрес источника для пакетов, отправляемых на определенный хост в случае, если сервер имеет несколько интерфейсов и\или алиасов. Например: - Нужно тестировать доступность хоста по определнному маршруту, не совпадающему с маршрутом по умолчанию для этого хоста. - Удаленный хост может иметь "странно" сконфигурированный пакетный фильтр, так, что реагирует на пакеты только с определенных IP адресов. - По маршруту до удаленного хоста существуют участки, где пакеты с определенных IP адресов имеют приоритет, что бывает важно при частой перегрузке (этих) каналов. Добавлена директива "SrcAddress" В глобальном контексте эта директива задает IP адрес источника для всех объектов, для которых IP адрес источника явно не задан. Если директива не указана - этот адрес = 0.0.0.0 В контексте объекта, эта директива задает IP адрес источника для посылки любых пакетов на этот хост. Если директива НИГДЕ не указана - сервер ведет себя так, как до применения патча. Пример: SrcAddress "192.168.2.1" Object "somehost" { Address "192.168.1.2" SrcAddress "192.168.1.1" .................... } Недостатки: Не реализована предварительная проверка валидности IP адреса источника при чтении файла конфигурации. Это значит, что до посылки первого пакета на хост Вы не узнаете, что неправильно указали IP адрес источника. IP адрес источника невозможно узнать у NetState сервера. ################################################################## UID-GID-ChRoot Patch ################################################################## Если указан метод сохранения PIPE или FILE, то, в некоторых случаях, запускается дочерний процесс, которому передаются данные. Обычно "Netmod" работает от имени пользователя "root". Следовательно дочерние процессы так-же запускаются от имени "root". Вообще говоря, это НЕБЕЗОПАСНО, тем более, что для исполнения этих программ обычно права "root" не нужны. Добавлены глобальные директивы "UserName" "GroupName" "ChrootDir" Если указаны эти директивы, то перед запуском дочернего процесса, ( после fork, но раньше exec ) делается chroot в указанный каталог (если каталог не указан - не делается), и изменяется GID,UID процесса. По умолчанию, chroot не делается, UserName = netmon, GroupName= netmon. Пример: UserName "nobody" GroupName "nogroup" ChRootDir "/var/netmon" Впрочем, Вы можете явно указать, что скрипты нужно запускать от "root". ################################################################## NetState BindAddress Patch ################################################################## Иногда бывает удобно явно задавать IP адрес, на котором NetState сервер ожидает входящего TCP соединения. Добавлена директива "BindAddress" в контексте "Port". Пример: Port 3333 { BindAddress "192.168.1.1" ............ } Или NetState { Port 3333 BindAddress "192.168.1.1" } По умолчанию, ждем входящего TCP соединения на всех локальных адресах. ################################################################## Trap Patch ################################################################## Иногда бывает удобно явно задавать IP адрес, на котором сервер ожидает входящий SNMP Trap. Добавлена директива "TrapBindAddress" в глобальном контексте. Пример: TrapBindAddress "192.168.1.1" По умолчанию, ждем входящий SNMP Trap на всех локальных адресах. ################################################################## PID-файл всегда записывается в /var/run/netmond.pid ################################################################## Добавлена возможность использовать в регулярных выражениях NetState русские буквы. ################################################################## Object multiple states ################################################################## Теперь объект может быть в нескольких состояниях: UP DEGRADED WARNING DOWN NONE (раньше было UP DOWN NONE). Состояние DOWN означает, что ВСЕ методы опроса объекта закончились неудачно. Состояние DEGRADED означает, что НЕКОТОРЫЕ методы опроса объекта закончились неудачно, но некоторые - завершились нормально. Состояние WARNING означает, что есть проблемы с каким-то подчиненным объектом - либо интерфейс, либо сервис, либо BGP peer или ENVMON находятся в состоянии, отличном от UP (NORMAL,ESTABLISHED). ################################################################## Method WHEN ################################################################## Аналогично методу сохранения WHEN, можно определить логическое выражение, формат строки результата и задержку. Если логическое выражение будет вычисляться как TRUE, и будет в этом состоянии в течении времени задерки, то после этого метод будет завершаться ошибкой, а значение переменной OBJECT!methodname будет равно вычисленной строке результата. Объект перейдет в состояние DEGRADED. Пример: Method "CPU_alarm" { When "$LoadAve > 20" 300 "Attention! LoadAve too much! ($LoadAve)" } Назначение метода - менять состояние объекта в случае превышения пороговых значений производительности - загрузка CPU, LoadAve, свободная память, дисковое пространство и проч. Внимание! значения используемых переменных должны быть получены при помощи других методов опроса. ################################################################## Method PIPE ################################################################## Аналогично методу ТСР. Однако вместо порта на удаленном хосте указывается имя программы которая исполняется локально. При этом можно использовать CHAT скрипт, как для метода TCP. С точки зрения программы, сообщения поступают на STDIN, а результат исполнения должен быть записан в STDOUT. Программе передается строка параметров, с которой вызывается метод. Кроме того, перед запуском програмы устанавливаются переменные окружения OBJECT_NAME, OBJECT_ADDRESS, и, если явно определены в конфигурации, то OBJECT_SRC_ADDRESS, OBJECT_DATADIR. ..................... Method "CheckSSL" { Pipe "/usr/local/bin/check_ssl.pl" Timeout 3 ChatScript { Expect "verify" Send "GET /\n\r\n\r" Expect "" } } ................ /usr/local/bin/check_ssl.pl: #!/usr/bin/perl # $addr = $ENV{"OBJECT_ADDRESS"}; if ($ARGV[0] ) { $port = $ARGV[0]; } else { $port ="443"; } $SIG{TERM} = sub { close PRGR; close PRGW; close STDIN; close STDOUT; kill $main::pid; exit(0); }; use FileHandle; use IPC::Open2; $main::pid=open2(PRGR,PRGW,"/usr/bin/openssl s_client -quiet -ssl3 -connect $addr:$port"); $_=; print PRGW $_; while (){ print STDOUT $_; } close STDOUT; exit 0; Каждый раз осуществляется только ОДНА попытка запуска программы. После обмена сообщениями, и закрытия сокета программе посылается сигнал SIGKILL для принудительного завершения. Метод предназначен для опроса работоспособности сложных сервисов, которые невозможно опросить методом TCP, и нет возможности использовать RSH или другие аналогичные сервисы с текстовым протоколом на удаленном хосте. Внешняя программа запускается с правами пользователя и группой, определенной в директивах UserName GroupName. Если определена директива СhRootDir, то перед запуском осуществляется CHROOT в этот каталог. ################################################################## Ликвидировано ограничение на величину индекса интерфейса. Теперь индекс может быть до INT_MAX. Теперь для опроса серверов MS Windows можно использовать выражение: Interface 65539 { } Спасибо Артемию Кропачеву . ################################################################## Конфигурационный файл по умолчанию - /usr/local/etc/netmond.conf