суббота, 13 июня 2015 г.

Установка Zabbix 2.4 в CentOS 6.5

1. Устанавливаем базовые пакеты, требующиеся для дальнейшей работы:
# yum install wget nano net-tools unzip mc nano telnet
# yum -y install perl-CPAN
# yum install gcc*
# yum install binutils*

2. Отключаем SELinux, iptables и перезагружаемся.
# nano /etc/sysconfig/selinux
Комментируем все, вставляем строчку
SELINUX=disabled
# nano /etc/sysconfig/iptables
Комментируем все строчки, определяющие правила (начинаются с -A)
# reboot

3. Установливаем MySQL и добавляем в автозагрузку
# yum install mysql mysql-server
# chkconfig --levels 235 mysqld on
Запускаем MySQL
# /etc/init.d/mysqld start
Задаем пароль root для сервера MySQL
# mysql_secure_installation
Сначала вводим на первый вопрос просто <Enter>, затем на вопрос
Set root password? [Y/n], вводим y и задаем пароль root для MySQL
На следующие вопросы yes (по умолчанию)

4. Установливаем Web-сервер apache и добавляем его в автозагрузку
# yum install httpd
# chkconfig --levels 235 httpd on
В файле конфигурации apache httpd.conf вписываем строчку, задающую имя сервера
# nano /etc/httpd/conf/httpd.conf
ServerName zabmar.ru:80
Затем прописываем это имя в файле hosts, что бы сервер знал, что имя zabmar.ru - это он сам.
# nano /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4 zabmar.ru
Наконец запускаем сервер Apache
# /etc/init.d/httpd start

5. Устанавливаем PHP5
# yum install php
Установка модулей для связки PHP5 и Mysql
# yum install php-mysql php-gd php-imap php-ldap php-odbc
Перезапускаем web-сервер
# /etc/init.d/httpd restart
Создаем файл для проверки работы PHP
# nano /var/www/html/info.php
вписываем туда
<?php phpinfo();
?>
Теперь при запросе страницы Info.php (http://<ip-сервера>/info.php) можно увидеть информацию о модуле PHP.  Проверяем, что на странице имеется раздел MySQL.

6. Подключаем репозитарий EPEL, необходимый для установки PhpMyAdmin
# rpm --import https://fedoraproject.org/static/0608B895.txt
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -ivh epel-release-6-8.noarch.rpm

7, Устанавливаем PhpMyAdmin
# yum install phpMyAdmin
Редактируем файл phpMyAdmin.conf
# nano /etc/httpd/conf.d/phpMyAdmin.conf
Везде добавляем к ip адресам
 ip 127.0.0.1 
дополнительные сети, с которых разрешено просматривать phpmyadmin
 ip 127.0.0.1 10.0.0.0/8 192.168.0.0/16
Правим файл конфигурации config.inc.php
# nano /etc/phpMyAdmin/config.inc.php 
Меняем в нем
$cfg['Servers'][$i]['auth_type']     = 'cookies';
на
$cfg['Servers'][$i]['auth_type']     = 'http';
Перезагружаем apache
# /etc/init.d/httpd restart
Набираем в браузере для просмотра phpmyadmin
http://<ip-адрес>/phpmyadmin/
Используем для доступа данные root и пароль, заданный при настройке MySQL

8. Копируем на машину исходные коды программ NET-SNMP и SNMPTT, скачанные с официальных сайтов:
net-snmp-5.7.3.zip (http://net-snmp.sourceforge.net/ ) и 
snmptt_1.4.tgz (http://snmptt.sourceforge.net/ )

9. Распаковываем архивы
# unzip net-snmp-5.7.3.zip
# tar -zxvf snmptt_1.4.tgz

10. Собираем и устанавливаем NET-SNMP
# cd net-snmp-5.7.3
Устанавливаем дополнительные пакеты PERL, которые нужны для работы NET-SNMP
# perl -MCPAN -e 'install Net::SNMP'
В появляющихся вопросах – соглашаемся со всем нажатием ENTER
Затем необходим еще один модуль PERL
# yum install perl-ExtUtils-Embed
Запускаем конфигуратор из папки с исходными кодами:
# ./configure --enable-embedded-perl --enable-shared
Запуститься диалог. Отвечаем на опросы так (показано красным):
Default version of SNMP to use (3): 2 / будем работать со 2ой версией /
System Contact Information (@@no.where): tech@yandex.ru / указываем e-mail /
System Location (Unknown): Samara / место расположения / 
Location to write logfile (/var/log/snmpd.log): /соглашаемся, нажав ENTER /
Location to write persistent information (/var/net-snmp): /соглашаемся, нажав ENTER /
Затем
# make
# make install

11. Запускаем демон SNMPD
Перед запуском snmpd создаем индивидуальный файл конфигурации
# mkdir /etc/snmp
# touch /etc/snmp/snmpd.conf
# nano /etc/snmp/snmpd.conf
rocommunity  public
syslocation  "Samara"
syscontact  tech@yandex.ru
Запуск snmpd
# /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf

12. Запускаем демон SNMPTRAPD
Создаем и правим файл конфигурации демона SNMPTRAP.
# touch /etc/snmp/snmptrapd.conf
# nano /etc/snmp/snmptrapd.conf
Вписываем в файл:
authCommunity   log,execute,net public
disableAuthorization yes
[snmp] logoption f /var/log/snmptrap.log 
(последнюю строчку закомментируем после отладки)
Запускаем SNMPTRAPD
# /usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf

13. Проверяем, что демоны SNMPD и SNMPTRAPD запустились и порты активны и заняты правильными службами
# ps ax | grep snmp
19965 ?        S      0:00 /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf
19971 ?        Ss     0:00 /usr/local/sbin/snmptrapd -c /etc/snmp/snmptrapd.conf
19973 pts/0    S+     0:00 grep snmp
# netstat -ltupn | grep snmp
udp        0      0 0.0.0.0:161             0.0.0.0:*                           28877/snmpd
udp        0      0 0.0.0.0:162             0.0.0.0:*                           28889/snmptrapd
Проверяем прием трапов командой, генерирующий трап о падении порта:
# snmptrap -v 1 -c public  127.0.0.1 '.1.3.6.1.2.1.2.2.1.8.1' '10.200.72.43'  3 0 '557' .1.3.6.1.2.1.2.2.1.8.1 i 2
В файле /var/log/snmptrap.log должен отобразиться принятый трап.
Проверяем работу запросов snmp
# snmpwalk -v 2c -c public localhost IF-MIB::ifAdminStatus
В ответ должны получить информацию по статусам интерфейсов.

14. Проверяем, как установлен пакет NET-SNMP. Пригоден ли он для работы с SNMPTT в режиме Embedded handler
# snmptrapd -H 2>&1 | grep perl
    perl                     PERLCODE
    perlInitFile             string
Наличие первой строки сообщает, что требуемая поддержка имеется и возможно использование встроенного обработчика помимо стандартного обработчика трапов.

15. Устанавливаем пакеты необходимые для работы SNMPTT
# perl -MCPAN -e 'install Sys::Syslog' 
# perl -MCPAN -e 'install Perl::OSType'
# perl -MCPAN -e 'install Module::Build'
# perl -MCPAN -e 'install Config::IniFiles'
(если система будет задавать вопросы – соглашаемся со всем, нажимая ENTER)
# yum -y install perl-Time-HiRes

16. Устанавливаем SNMPTT
# cd ../snmptt_1.4
# cp snmptt /usr/local/sbin/
# chmod +x /usr/local/sbin/snmptt
# cp snmptthandler-embedded /usr/local/sbin/
# chmod +x /usr/local/sbin/snmptthandler-embedded
# cp snmptt.ini /etc/snmp/
В файле настроек snmptt.ini правим некоторые строки
# nano /etc/snmp/snmptt.ini
mode = daemon
net_snmp_perl_enable = 1
log_system_enable = 1 (включаем логирование ошибок)
date_time_format = %H:%M:%S %Y/%m/%d
daemon_uid = root
Определяем правило ротации логов:
# cp snmptt.logrotate /etc/logrotate.d/snmptt
Файл правил обработки SNMP трапов у SNMPTT - examples/snmptt.conf.generic. С файлом нужно ознакомиться и понять его формат. Затем создаем файл своих правил:
# touch /etc/snmp/snmptt.conf
Правим файл:
# nano /etc/snmp/snmptt.conf
Вписываем в файл для примера:
EVENT SamaraAlarm .1.* "all" Normal
FORMAT $+* TEST $aA $1
Создать каталоги, необходимые для работы SNMPTT
# mkdir /var/log/snmptt/
# mkdir /var/spool/snmptt/
Создать файл логов
# touch /var/log/snmptt/snmptt.log
# chmod 777 /var/log/snmptt/snmptt.log

17. Запускаем SNMPTT
# cp snmptt-init.d /etc/rc.d/init.d/snmptt
# chkconfig --add snmptt
# chkconfig --level 2345 snmptt on
# ln -s /usr/local/sbin/snmptt /usr/sbin/snmptt
# service snmptt start
В процессах должно появится два запущенных процесса SNMPTT
# ps ax | grep snmptt
12963 ?        Ss     0:00 /usr/bin/perl /usr/sbin/snmptt --daemon
12965 ?        Ss     0:00 /usr/bin/perl /usr/sbin/snmptt --daemon
12967 pts/0    S+     0:00 grep snmptt

18. Связываем SNMPTRAPD и SNMPTT
Вносим изменения в файл snmptrapd.conf
# nano /etc/snmp/snmptrapd.conf
Дописываем в конец
perl do "/usr/local/sbin/snmptthandler-embedded"; 
(Cтрока включает встроенный обработчик транслирующий трапы)
(Если вдруг есть такая строчка traphandle default /usr/sbin/snmptthandler – удаляем ее)
(Строчку [snmp] logoption f /var/log/snmptrap.log тоже можно удалить или закомментировать, что бы не собирались лишние логи)
Останавливаем демон SNMPTRAPD. Например с помощью Kill.
Теперь запускаем SNMPTRAPD вот так:
# /usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf
После запуска snmptrap будет предупреждение
Loaded the SNMPTT embedded snmptrapd handler
Значит, все верно запущено – SNMPTRAPD будет работать с SNMPTT в Embedded handler режиме.
Проверяем:
# snmptrap -v 1 -c public  127.0.0.1 '.1.3.6.1.2.1.2.2.1.8.1' '10.200.72.43'  3 0 '557' .1.3.6.1.2.1.2.2.1.8.1 i 2
В файле /var/log/snmptt/snmptt.log должен отобразиться принятый трап.
Для дальнейшего запуска демона SNMPD и SNMPTT использовать:
# /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf
# /usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf
Эти команды лучше добавить в файл /etc/rc.local
# nano /etc/rc.local
Добавляем в конец файла:
/usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf
/usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf

19. Устанавливаем репозитарий для установки Zabbix 2.4
#  rpm -ivh http://repo.zabbix.com/zabbix/2.4/rhel/6/x86_64/zabbix-release-2.4-1.el6.noarch.rpm
Производим установку пакетов zabbix
# yum install zabbix-server-mysql zabbix-web-mysql
# yum install zabbix-agent

20. Подготавливаем базу данных MySQL для работы с zabbix. Создаем базу данных и пользователя zabbix, который будет работать с базой данных. Заливаем схемы таблиц в базу данных
# mysql -uroot -p
mysql> create database zabbix character set utf8;
mysql> grant all privileges on zabbix.* to zabbix@localhost identified by 'zabbix';
(пользователь zabbix с паролем zabbix будет работать с базой данных zabbix)
mysql> exit
# cd /usr/share/doc/zabbix-server-mysql-2.4.5/create/
# mysql -uroot -p zabbix < schema.sql
# mysql -uroot -p zabbix < images.sql
# mysql -uroot -p zabbix < data.sql

21. Вносим корректировки в файл конфигурации Zabbix-сервера zabbix_server.conf
# nano /etc/zabbix/zabbix_server.conf
Правим следующие строки:
DBHost=localhost (установлено по умолчанию)
DBName=zabbix (установлено по умолчанию)
DBUser=zabbix (установлено по умолчанию)
DBPassword=zabbix (по умолчанию пусто)

22. Запускаем Zabbix сервер и добавляем в автоконфигурацию
# service zabbix-server start
# chkconfig zabbix-server on

23. Вносим изменения в файл /etc/httpd/conf.d/zabbix.conf, определяющий работу WEB-интерфейса Zabbix в сервере apache
# nano /etc/httpd/conf.d/zabbix.conf
Ищем строчку
# php_value date.timezone Europe/Riga
раскомментируем ее и меняем на
php_value date.timezone Europe/Moscow 
Рестартуем сервис Apache
# service httpd restart

24. Все, Zabbix установлен. Теперь можно обратиться к нему по адресу http://<ip адрес>/zabbix и выполнить первоначальную конфигурацию.

  

Нажимаем Next >>
Здесь проверяем, что бы не было никаких сообщений о ошибках. Нажимаем Next >>
Выбираем базу MySQL, вводим имя базы – zabbix, пользователя zabbix и пароль zabbix.
Нажимаем кнопку «Test connection»
 
Зеленым должно появиться сообщение «ОК». Нажимаем Next >>
Пишем какое-нибудь имя (например, svttk) в поле Name и нажимаем кнопку Next >>
Нажимаем кнопку Next >>
Нажимаем кнопку Finish >> и видим интерфейс входа в систему zabbix. 
Входим в web-интерфейс Zabbix. Параметры доступа по умолчанию - Admin/zabbix и радуемся

25. Запускаем Zabbix агент на сервере (иначе сервер Zabbix не сможет мониторить сам себя)
Открываем файл zabbix_agentd.conf и вносим в него правки
# nano /etc/zabbix/zabbix_agentd.conf
Ищем строку Server= и вписываем туда IP адрес
Server=127.0.0.1 (по умолчанию должно быть уже так)
Запускаем службу zabbix агента и добавляем ее в автозапуск
# service zabbix-agent start
# chkconfig zabbix-agent on
# service zabbix-server restart

26. Для того что бы Zabbix работал с утилитой ping (а вернее fping) выполняем следующее
# yum install fping
Ищем, куда установился fping
# find / | grep fping
У меня получилось - /usr/sbin/fping
Далее даем zabbix права на работу с fping
# chown root:zabbix /usr/sbin/fping
# chmod 710 /usr/sbin/fping
# chmod ug+s /usr/sbin/fping
Открываем файл zabbix_server.conf и проверяем в файле путь к утилите fping, найденный ранее.
# nano /etc/zabbix/zabbix_server.conf
Раскоментируем эту строчку:
FpingLocation=/usr/sbin/fping 
Рестартуем сервер zabbix
# service zabbix-server restart

27. Для того что бы в Zabbix работали внешние скрипты, (созданные нами) выполняем следующее:
Открываем файл /etc/zabbix/zabbix_server.conf и узнаем там, куда нужно положить внешний скрипт:
# nano /etc/zabbix/zabbix_server.conf
Ищем строку, начинающуюся с ExternalScripts:
ExternalScripts=/usr/lib/zabbix/externalscripts
Видим, что искомый пусть – это /usr/lib/zabbix/externalscripts
Помещаем туда скрипт, например скрипт sakura2_alarm.php
# cp /mnt/sakura2/sakura2_alarm.php /usr/lib/zabbix/externalscripts/
Даем права Zabbix-у работать с эти скриптом:
# chown root:zabbix /usr/lib/zabbix/externalscripts/sakura2_alarm.php
# chmod ug+s /usr/lib/zabbix/externalscripts/sakura2_alarm.php
# chmod 755 /usr/lib/zabbix/externalscripts/sakura2_alarm.php
Теперь этот скрипт можно добавить в Zabbix в раздел Администрирование – Скрипты.

28. Для того что бы Zabbix работал с SNMP trap-ами необходимо следующее:
Открываем файл /etc/zabbix/zabbix_server.conf и ищем там разделы SNMP
# nano /etc/zabbix/zabbix_server.conf
### Option: SNMPTrapperFile
#Temporary file used for passing data from SNMP trap daemon to the server.
#Must be the same as in zabbix_trap_receiver.pl or SNMPTT configuration file.
#
# Mandatory: no
# Default:
# SNMPTrapperFile=/tmp/zabbix_traps.tmp

SNMPTrapperFile=/var/log/snmptt/snmptt.log

### Option: StartSNMPTrapper
# If 1, SNMP trapper process is started.
#
# Mandatory: no
# Range: 0-1
# Default:
# StartSNMPTrapper=0
StartSNMPTrapper=1
Обращаем внимание на путь к логам SNMP -  /var/log/snmptt/snmptt.log
Этот путь к логам сервиса SNMPTT.
Затем добавляем строчку
StartSNMPTrapper=1
Рестартуем сервер zabbix
# service zabbix-server restart

ПРИМЕЧАНИЕ: для того что бы Zabbix корректно читал SNMP trap-ы падения и поднятия портов, формат логов нужно задать в файле /etc/snmp/snmptt.conf
# nano /etc/snmp/snmptt.conf
Вписываем туда:
EVENT LinkDown .1.3.6.1.6.3.1.1.5.3 "LinkDown" Normal
FORMAT ZBXTRAP $aA $1 port
EVENT LinkUp .1.3.6.1.6.3.1.1.5.4 "LinkUp" Normal
FORMAT ZBXTRAP $aA $1 port
Строки, собирающие все трапы комментируем:
# EVENT SamaraAlarm .1.* "all" Normal
# FORMAT $+* TEST $aA $1
Рестартуем SNMPTT
# service snmptt restart
Теперь при падении и поднятии 3 порта на свиче 10.200.72.43 в логах (файл /var/log/snmptt/snmptt.log) должно появиться:
22:08:19 2015/06/05 .1.3.6.1.6.3.1.1.5.3 Normal "LinkDown" 10.200.72.43 - ZBXTRAP 10.200.72.43 3 port
22:08:41 2015/06/05 .1.3.6.1.6.3.1.1.5.4 Normal "LinkUp" 10.200.72.43 - ZBXTRAP 10.200.72.43 3 port
Этот формат удовлетворителен, для чтения трапов zabbix-ом.

==========================

Для увеличения быстродействия сервера Zabbix выполнить:

В файле конфига etc/zabbix/zabbix_server.conf были раскоментированны и изменены следующие параметры
StartPingers=25 Старое значение 1
CacheSize=512M Старое знаечение 8M
StartPollersUnreachable=5 сатрое значение 1

==========================

Для мониторинга всяких китайских железок необходимо, чтобы флаг DF (флаг фрагментации) в IP пакете не ставился. 
В linux этот флаг ставится по умолчанию.
Необходимо запретить установку флага DF командой:
echo 1 > /proc/sys/net/ipv4/ip_no_pmtu_disc
и записать эту команду в файл /etc/rc.local


=============================================

Уменьшаем размер файла /var/log/messages на сервер Zabbix

1. Для отключения логирования SNMPtrap-ов в это файл запусаем демон SNMPTRAPD с опцией Ln

/usr/local/sbin/snmptrapd -On -Ln -c /etc/snmp/snmptrapd.conf
Добавляем эту строчку в /etc/rc.local

2. В настройках демона SNMPTT выключаем логирование в файлы syslog и messages:
nano /etc/snmp/snmptt.ini
syslog_enable = 0
Не забываем рестартовать snmptt
service snmptt restart

3. Настраиваем, что бы глобальный лог /var/log/messages хранился только 2 недели (по умолчанию -4)
Открываем файл
nano /etc/logrotate.conf
Исправляем строчку
с
rotate 4
на

rotate 2

Установка в CentOS 6.5 из исходных кодов SNMP и SNMPTT в режиме Embedded handler

Установка в данном режиме SNMPTT необходима для увеличения быстродействия и производительности системы.

1. Обновляем систему и ставим общие пакет для комфортной работы и которые потребуются для сборки пакетов из исходных кодов
# yum update
# yum install wget nano net-tools unzip mc
# yum -y install perl-CPAN
# yum install gcc*
# yum install binutils*

2. Отключаем SELinux, iptables и перезагружаемся.
#nano /etc/sysconfig/selinux
Комментируем все, вставляем строчку
SELINUX=disabled
# nano /etc/sysconfig/iptables
Комментируем все строчки, определяющие правила
# reboot

3. Копируем на машину исходные коды, скачанные с официальных сайтов
net-snmp-5.7.3.zip (http://net-snmp.sourceforge.net/ ) и 
snmptt_1.4.tgz (http://snmptt.sourceforge.net/ )

4. Распаковываем архивы
# unzip net-snmp-5.7.3.zip
# tar -zxvf snmptt_1.4.tgz

5. Собираем и устанавливаем NET-SNMP
# cd net-snmp-5.7.3
Устанавливаем дополнительные пакеты PERL, которые нужны для работы NET-SNMP
# perl -MCPAN -e 'install Net::SNMP'
В появляющихся вопросах – соглашаемся со всем нажатием ENTER
Затем необходим еще один модуль PERL
# yum install perl-ExtUtils-Embed
Запускаем конфигуратор из папки с исходными кодами:
# ./configure --enable-embedded-perl --enable-shared
Запуститься диалог. Отвечаем на опросы так (показано красным):
Default version of SNMP to use (3): 2 / будем работать со 2ой версией /
System Contact Information (@@no.where): tech@yandex.ru / указываем e-mail /
System Location (Unknown): Samara / место расположения / 
Location to write logfile (/var/log/snmpd.log): /соглашаемся, нажав ENTER /
Location to write persistent information (/var/net-snmp): /соглашаемся, нажав ENTER /
Затем
# make
# make install

6. Запускаем демон SNMPD
Перед запуском snmpd создаем индивидуальный файл конфигурации
# mkdir /etc/snmp
# touch /etc/snmp/snmpd.conf
# nano /etc/snmp/snmpd.conf
rocommunity  public
syslocation  "Samara"
syscontact  tech@yandex.ru
Запуск snmpd
# /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf

7. Запускаем демон SNMPTRAPD
Создаем и правим файл конфигурации демона SNMPTRAP.
# touch /etc/snmp/snmptrapd.conf
# nano /etc/snmp/snmptrapd.conf
Вписываем в файл:
authCommunity   log,execute,net public
disableAuthorization yes
[snmp] logoption f /var/log/snmptrap.log 
(последнюю строчку закомментируем после отладки)
Стартуем демон snmptrapd
# /usr/local/sbin/snmptrapd -c /etc/snmp/snmptrapd.conf

8. Проверяем, что демоны SNMPD и SNMPTRAPD запустились и порты активны и заняты правильными службами
# ps ax | grep snmp
19965 ?        S      0:00 /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf
19971 ?        Ss     0:00 /usr/local/sbin/snmptrapd -c /etc/snmp/snmptrapd.conf
19973 pts/0    S+     0:00 grep snmp
# netstat -ltupn | grep snmp
udp        0      0 0.0.0.0:161             0.0.0.0:*                           28877/snmpd
udp        0      0 0.0.0.0:162             0.0.0.0:*                           28889/snmptrapd
Проверяем прием трапов командой, генерирующий трап о падении порта:
# snmptrap -v 1 -c public  127.0.0.1 '.1.3.6.1.2.1.2.2.1.8.1' '10.200.72.43'  3 0 '557' .1.3.6.1.2.1.2.2.1.8.1 i 2
В файле /var/log/snmptrap.log должен отобразиться принятый трап.
Проверяем работу запросов snmp
# snmpwalk -v 2c -c public 192.168.1.222 IF-MIB::ifAdminStatus
В ответ должны получить информацию по статусам интерфейсов.

9. Проверяем, как установлен пакет NET-SNMP. Пригоден ли он для работы с SNMPTT в режиме Embedded handler
# snmptrapd -H 2>&1 | grep perl
    perl                     PERLCODE
    perlInitFile             string
Наличие первой строки сообщает, что требуемая поддержка имеется и возможно использование встроенного обработчика помимо стандартного обработчика трапов.

10. Устанавливаем пакеты необходимые для работы SNMPTT
# perl -MCPAN -e 'install Sys::Syslog' 
# perl -MCPAN -e 'install Perl::OSType'
# perl -MCPAN -e 'install Module::Build'
# perl -MCPAN -e 'install Config::IniFiles'
(если система будет задавать вопросы – соглашаемся со всем, нажимая ENTER)

11. Устанавливаем SNMPTT
# cd snmptt_1.4
# cp snmptt /usr/local/sbin/
# chmod +x /usr/local/sbin/snmptt
# cp snmptthandler-embedded /usr/local/sbin/
# chmod +x /usr/local/sbin/snmptthandler-embedded
# cp snmptt.ini /usr/local/sbin/
В файле настроек snmptt.ini правим некоторые строки
# nano /usr/local/sbin/snmptt.ini
mode = daemon
net_snmp_perl_enable = 1
log_system_enable = 1 (включаем логирование ошибок)
date_time_format = %H:%M:%S %Y/%m/%d
Делаем символьную ссылку на файл конфигурации snmptt.ini
# ln -s /usr/local/sbin/snmptt.ini /etc/snmp/snmptt.ini
Определяем правило ротации логов:
# cp snmptt.logrotate /etc/logrotate.d/snmptt
Файл правил обработки SNMP трапов у SNMPTT - examples/snmptt.conf.generic. С файлом нужно ознакомиться и понять его формат. Затем создаем файл своих правил:
# touch /usr/local/sbin/snmptt.conf
Правим файл:
# nano /usr/local/sbin/snmptt.conf
Вписываем в файл для примера:
EVENT SamaraAlarm .1.* "all" Normal
FORMAT $+* TEST $aA $1
Делаем символьную ссылку на файл конфигурации snmptt.conf
# ln -s /usr/local/sbin/snmptt.conf /etc/snmp/snmptt.conf
Создать каталоги, необходимые для работы SNMPTT
# mkdir /var/log/snmptt/
# mkdir /var/spool/snmptt/
Создать файл логов
# touch /var/log/snmptt/snmptt.log
# chmod 777 /var/log/snmptt/snmptt.log

12. Связываем SNMPTRAPD и SNMPTT
Вносим изменения в файл snmptrapd.conf
# nano /etc/snmp/snmptrapd.conf
Дописываем в конец
perl do "/usr/local/sbin/snmptthandler-embedded"; 
(Cтрока включает встроенный обработчик транслирующий трапы)
(Если вдруг есть такая строчка traphandle default /usr/sbin/snmptthandler – удаляем ее)
(Строчку [snmp] logoption f /var/log/snmptrap.log тоже можно удалить или закомментировать, что бы не собирались лишние логи)
Останавливаем демон SNMPTRAPD. Например с помощью Kill.
Теперь запускаем SNMPTRAPD вот так:
# /usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf
После запуска snmptrap будет предупреждение
Loaded the SNMPTT embedded snmptrapd handler
Значит, все верно запущено – SNMPTRAPD будет работать с SNMPTT в Embedded handler режиме.

13. Запускаем SNMPTT
# /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini
первый запуск может выдать предупреждение
There seems to be another SNMPTT process (pid 4849) running.
You may want to kill it and delete the .pid file (/var/run/snmptt.pid).  Aborting...
Exiting at /usr/local/sbin/snmptt line 671.
В процессах должно появится два запущенных процесса SNMPTT
# ps ax | grep snmptt
 5914 ?        Ss     0:00 /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini
 5915 ?        Ss     0:00 /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini

ИТОГ. Все установлено и запущено.
Для дальнейшего запуска демона использовать:
# /usr/local/sbin/snmpd -c /etc/snmp/snmpd.conf
# /usr/local/sbin/snmptrapd -On -c /etc/snmp/snmptrapd.conf
# /usr/bin/perl /usr/local/sbin/snmptt --ini=/usr/local/sbin/snmptt.ini

====================================================================
Примечание, если что-то идет не так и в логах SNMPTT (файл /var/log/snmptt/snmptt.log) ничего не сыплеться, то можно включить режим отладки в файле snmptt.ini
# nano /usr/local/sbin/snmptt.ini
[Debugging]
# 0 - do not output messages
# 1 - output some basic messages
# 2 - out all messages
DEBUGGING = 2 /установить 2 вместо 0/

# Debugging file - SNMPTT
# Location of debugging output file.  Leave blank to default to STDOUT (good for
# standalone mode, or daemon mode without forking)
DEBUGGING_FILE =
DEBUGGING_FILE = /var/log/snmptt/snmptt.debug /раскомментировать строку/
Теперь при посылке трапа:
# snmptrap -v 1 -c public  127.0.0.1 '.1.3.6.1.2.1.2.2.1.8.1' '10.200.72.45'  3 0 '557' .1.3.6.1.2.1.2.2.1.8.1 i 2
В файле /var/log/snmptt/snmptt.log должна появиться запись:
09:45:09 2015/05/24 .1.3.6.1.6.3.1.1.5.4 Normal "all" 10.200.72.45 - ifOperStatus.1:down TEST 10.200.72.45 down

Настройка FREERADIUS для приемки аккаутинговой информации от станции ELTEX SMG-2016M

1. Готовим БД MySQL для принятия аккаунтинговой информации:

1.1. Подключаемся к клиенту MySQL
# mysql -u root -p

1.2 Создаем пользователя radiususer c паролем 12345

1.3 Создаем базу данных radius

1.4 Даем пользователю radiususer право распоряжаться базой radius

1.5 Создаем таблицу redacct
mysql> use radius
mysql> CREATE TABLE IF NOT EXISTS `radacct` (
  `radacctid` bigint(21) NOT NULL AUTO_INCREMENT,
  `acctsessionid` varchar(64) NOT NULL DEFAULT '',
  `username` varchar(50) NOT NULL,
  `h323callorigin` varchar(50) NOT NULL,
  `nasipaddress` varchar(15) NOT NULL DEFAULT '',
  `acctstarttime` datetime DEFAULT NULL,
  `acctstoptime` datetime DEFAULT NULL,
  `acctsessiontime` int(12) DEFAULT NULL,
  `calledstationid` varchar(50) NOT NULL DEFAULT '',
  `callingstationid` varchar(50) NOT NULL,
  `nasportid` varchar(25) NOT NULL,
  `nasporttype` varchar(25) NOT NULL,
  `CiscoNASPort` varchar(30) NOT NULL,
  `h323calltype` varchar(30) NOT NULL,
  `EventTimestamp` varchar(30) NOT NULL,
  `AcctStatusType` varchar(10) NOT NULL,
  `currentimeserver` datetime NOT NULL,
  `h323disconnectcause` varchar(3) NOT NULL,
  `AcctDelayTime` int(5) NOT NULL,
  `h323gwid` varchar(20) NOT NULL,
  `xpgkrouteretries` varchar(5) NOT NULL,
  `h323remoteid` varchar(50) NOT NULL,
  `xpgklocaldisconnectcause` int(3) NOT NULL,
  `xpgksrcnumberin` varchar(50) NOT NULL,
  `xpgksrcnumberout` varchar(50) NOT NULL,
  `xpgkdstnumberin` varchar(50) NOT NULL,
  `xpgkdstnumberout` varchar(50) NOT NULL,
  `node` varchar(16) NOT NULL,
  `OutgoingRTPlocaladdress` varchar(15) NOT NULL,
  `OutgoingRTPremoteaddress` varchar(15) NOT NULL,
  PRIMARY KEY (`radacctid`),
  KEY `username` (`username`),
  KEY `acctstarttime` (`acctstarttime`),
  KEY `acctstoptime` (`acctstoptime`),
  KEY `calledstationid` (`calledstationid`),
  KEY `callingstationid` (`callingstationid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
mysql> exit

2. Настраиваем FREERADIUS

2.1 Настраиваем FREERADIUS для работы с БД MySQL

В файле /etc/raddb/radiusd.conf
раскоментируем строчку
    $INCLUDE sql.conf

В файле /etc/raddb/sites-available/default
в секции accounting {…} раскомментируем модуль sql
    #  See "Accounting queries" in sql.conf
    sql
в секции session {…} так же раскоментируем модуль sql
    # See "Simultaneous Use Checking Queries" in sql.conf
    sql

В файле /etc/raddb/sql.conf
проверяем, что в секции sql{…} прописаны правильные имя пользователя и пароль для БД MySQL, 
а так же задана правильная таблица radacct.
sql {
...
        login = "radius"
        password = "12345"
...
        radius_db = "radius"
...
        acct_table1 = "radacct"
        acct_table2 = "radacct"
...
}

2.2 Учим FREERADIUS работать с атрибутами Cisco AV-Pair, передачаемые от станции ELTEX SMG-2016
В файле /etc/raddb/modules/preprocess устанавливаем директиву with_cisco_vsa_hack в yes (по умолчанию no)
    with_cisco_vsa_hack = yes

в файл словаря /usr/share/freeradius/dictionary.cisco
добавил в конец раздела # SIP Attributes (после 150-ого атрибута)
ATTRIBUTE       xpgk-route-retries           171     string
ATTRIBUTE       h323-remote-id               172     string
ATTRIBUTE       xpgk-local-disconnect-cause  173     string
ATTRIBUTE       xpgk-src-number-in           174     string
ATTRIBUTE       xpgk-src-number-out          175     string
ATTRIBUTE       xpgk-dst-number-in           176     string
ATTRIBUTE       xpgk-dst-number-out          177     string

2.3 Определяем запросы по вставке информации в БД MySQL

Делаем резервную копию файла
cp /etc/raddb/sql/mysql/dialup.conf /etc/raddb/sql/mysql/dialup-save.conf

Затем вносим в файл /etc/raddb/sql/mysql/dialup.conf изменения
Раздел Accounting Queries приводим к виду:
        #######################################################################
        #  Accounting Queries
        #######################################################################
        accounting_stop_query = " \
          INSERT INTO ${acct_table1} \
            (acctsessionid, \
             username, \
             nasipaddress, nasportid, nasporttype,\
             acctstarttime, \
             acctstoptime, \
             acctsessiontime, \
             calledstationid,   callingstationid, \
             h323callorigin, CiscoNASPort, h323calltype, EventTimestamp, \
             AcctStatusType, \
             currentimeserver, h323disconnectcause, \
             AcctDelayTime, h323gwid, xpgkrouteretries, \
             h323remoteid, xpgklocaldisconnectcause, \
             xpgksrcnumberin, xpgksrcnumberout, xpgkdstnumberin, xpgkdstnumberout, node,\
             OutgoingRTPlocaladdress, OutgoingRTPremoteaddress) \
          VALUES \
            ('%{Acct-Session-Id}', \
             '%{User-Name}', \
             '%{NAS-IP-Address}', '%{NAS-Port}', '%{NAS-Port-Type}', \
               CONCAT(SUBSTRING('%{h323-setup-time}',33, 4),'-',\
                case SUBSTRING('%{h323-setup-time}',26, 3) \
                        when \'Jan\' then \'01\' \
                        when \'Feb\' then \'02\' \
                        when \'Mar\' then \'03\' \
                        when \'Apr\' then \'04\' \
                        when \'May\' then \'05\' \
                        when \'Jun\' then \'06\' \
                        when \'Jul\' then \'07\' \
                        when \'Aug\' then \'08\' \
                        when \'Sep\' then \'09\' \
                        when \'Oct\' then \'10\' \
                        when \'Nov\' then \'11\' \
                        when \'Dec\' then \'12\' end,\
                '-',SUBSTRING('%{h323-setup-time}',30,2),\
                ' ',SUBSTRING_INDEX('%{h323-setup-time}', ':', 2),SUBSTRING('%{h323-setup-time}',6, 3)),  \
               CONCAT(SUBSTRING('%{h323-disconnect-time}',33, 4),'-',\
                case SUBSTRING('%{h323-disconnect-time}',26, 3) \
                       when \'Jan\' then \'01\' \
                        when \'Feb\' then \'02\' \
                        when \'Mar\' then \'03\' \
                        when \'Apr\' then \'04\' \
                        when \'Maj\' then \'05\' \
                        when \'Jun\' then \'06\' \
                        when \'Yul\' then \'07\' \
                        when \'Aug\' then \'08\' \
                        when \'Sep\' then \'09\' \
                        when \'Oct\' then \'10\' \
                        when \'Nov\' then \'11\' \
                        when \'Dec\' then \'12\' end,\
                '-',SUBSTRING('%{h323-disconnect-time}',30,2),\
                ' ',SUBSTRING_INDEX('%{h323-disconnect-time}', ':', 2),SUBSTRING('%{h323-disconnect-time}',6, 3)), \
             '%{Acct-Session-Time}', \
             '%{Called-Station-Id}', '%{Calling-Station-Id}', \
             '%{h323-call-origin}', '%{Cisco-NAS-Port}', '%{h323-call-type}', '%{Event-Timestamp}', \
             '%{Acct-Status-Type}', \
             '%S', '%{h323-disconnect-cause}', \
             '%{Acct-Delay-Time}', '%{h323-gw-id}', '%{xpgk-route-retries}', \
             '%{h323-remote-id}', '%{xpgk-local-disconnect-cause}', \
             '%{xpgk-src-number-in}', '%{xpgk-src-number-out}', '%{xpgk-dst-number-in}', '%{xpgk-dst-number-out}', 'UFA-SMG2', \
             '%{Outgoing-RTP-local-address}', '%{Outgoing-RTP-remote-address}')"

Здесь UFA-SMG2 - это имя устройства
 
2.4 Разрешаем серверу FREERADIUS работать со станцией SMG-2016 с ip адресом 10.207.32.5 и с radius-секретом smg
В файле /etc/raddb/clients.conf
client 10.207.32.5 {
        ipaddr = 10.207.32.5
        secret = smg
}

 
2.5 Рестартуем RADIUS
# service radiusd restart

Теперь, если станция ELTEX будет отправлять аккаутинговые пакеты, RADIUS их примет и сложит в БД MySQL