mirror of
https://git.FreeBSD.org/ports.git
synced 2024-12-25 04:43:33 +00:00
35bd14c7a1
- Use USE_RC_SUBR for rc scripts - Use SUB_FILES to simplify - Update pkg-descr PR: ports/105564 Submitted by: Viktor Fomichev <vfom at narod.ru> (maintainer)
257 lines
8.8 KiB
Ruby
257 lines
8.8 KiB
Ruby
|
||
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 "<HTML>"
|
||
}
|
||
}
|
||
................
|
||
/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");
|
||
$_=<STDIN>;
|
||
print PRGW $_;
|
||
while (<PRGR>){
|
||
print STDOUT $_;
|
||
}
|
||
close STDOUT;
|
||
exit 0;
|
||
|
||
Каждый раз осуществляется только ОДНА попытка запуска программы.
|
||
После обмена сообщениями, и закрытия сокета программе посылается
|
||
сигнал SIGKILL для принудительного завершения.
|
||
Метод предназначен для опроса работоспособности сложных
|
||
сервисов, которые невозможно опросить методом TCP, и нет
|
||
возможности использовать RSH или другие аналогичные сервисы
|
||
с текстовым протоколом на удаленном хосте.
|
||
Внешняя программа запускается с правами пользователя и группой,
|
||
определенной в директивах UserName GroupName. Если определена директива
|
||
СhRootDir, то перед запуском осуществляется CHROOT в этот каталог.
|
||
|
||
##################################################################
|
||
|
||
Ликвидировано ограничение на величину индекса интерфейса.
|
||
Теперь индекс может быть до INT_MAX.
|
||
Теперь для опроса серверов MS Windows можно использовать выражение:
|
||
|
||
Interface 65539 { }
|
||
|
||
Спасибо Артемию Кропачеву <kropachev(sobaka)rdu.kirov.ru>.
|
||
##################################################################
|
||
|
||
Конфигурационный файл по умолчанию - /usr/local/etc/netmond.conf
|
||
|
||
|