Главная

Sunday, 3 January 2021

Менеджер событий Cisco EEM.


Всем привет.

Сisco IOS Embedded Event Manager (EEM) - это подсистема Cisco IOS, которая позволяет создавать апплеты EEM. Аплеты EEM состоят из операторов, которые обнаруживают событие, произошедшее на устройстве IOS или в подключенной сети, и действий, которые должны выполняться при обнаружении события. В IOS доступен ряд детекторов событий, количество которых может варьироваться в зависимости от версии IOS. Действия EEM включают выполнение команд IOS, создание ловушки SNMP (SNMP trap), выполнение других политик EEM или отправку уведомления по электронной почте на адрес, указанный в политике и другие.

Следущая команда показывает какая версия EEM используется в вашем IOS и какие события (events) доступны:

R3#sh event manager version 

Далее рассмотрим несколько примеров использования апплетов ЕЕМ. Создадим резервироваие нашего канала в интернет и мониторинг сети с уведомлением администратора по email.

Для проверки доступности интернет будем пинговать DNS-сервер google 8.8.8.8 через ip sla если у нас два провайдера. Предварительно необходимо прописать маршрут, чтобы трафик до них всегда шел через нужного нам провайдера (ip route 8.8.8.8 255.255.255.255). Итак, запустим echo-запросы с таймаутом в 500 ms и проверкой раз в час.

ip sla 1
icmp-echo 8.8.8.8
timeout 500
frequency 3600
ip sla schedule 1 life forever start-time now
track 1 rtr 1 reachability

#1. Резервироваие канала интернет.

Создаем событие - если google не пингуются, в свойствах VPN-туннеля в качестве источника указываем WAN-интерфейс второго провайдера

event manager applet ISP1-DOWN
event track 1 state down
action 0.9 cli command "enable"
action 1.0 cli command "conf t"
action 1.1 cli command "int tu0"
action 1.2 cli command "tunnel source FastEthernet0/2/0"
action 1.3 syslog msg "ISP1 is Down"
action 1.4 cli command "end"
action 1.5 cli command "exit"

Теперь создаем событие - если google доступен, то возвращаемся обратно к первому провайдеру.

event manager applet ISP1-UP
event track 1 state up
action 0.9 cli command "enable"
action 1.0 cli command "conf t"
action 1.1 cli command "int tu0"
action 1.2 cli command "tunnel source FastEthernet0/1/0"
action 1.3 syslog msg "ISP1 is Up"
action 1.4 cli command "end"
action 1.5 cli command "exit"


#2. Мониторинг сети с уведомлением на email.

Для удобства объявим несколько переменных для EEM, где зададим адрес почтового сервера и адреса почтовых ящиков.

event manager environment _mailsrv 192.168.1.1 (адрес почтового сервера)
event manager environment _admin admin@forza.com
event manager environment _report reports@forza.com

Создадим задания для EEM что делать в случае если пинга нет и в обратном варианте.

event manager applet host_is_down
event track 1 state down
action 1 mail server "$_mailsrv" to "$_admin" from "$_report" subject "Host is not pinging"

event manager applet host_is_up
event track 1 state up
action 1 mail server "$_mailsrv" to "$_admin" from "$_report" subject "Host is pinging now"

Говорят что встроенный в EEM почтовый клиент не полностью поддерживает RFC822. Письма отправляются с пустым телом. Для того чтобы устранить баг, можно руками вставить отправку комбинации CRLF при генерации письма.

action 1 mail server "$_mail_smtp" to "$_mail_rcpt" from "$_info_routername@$_mail_domain" subject "Interface state change" body "\015\012$_syslog_msg"

#3. Мониторинг системного журнала (Syslog Detector).

Реализуем апплет, который будет обнаруживать сообщение системного журнала, которое выдается, когда интерфейс выходит из строя (line protocol down). При обнаружении этого события будет выполнена серия команд IOS, которые выключат нестабильный интерфейс и активируют резервный интерфейс. Иитерфейсы loopback будут использоваться для моделирования неисправного основного интерфейса и резервного интерфейса:

event manager applet BACKUP_INTERFACE
event syslog pattern "Line protocol on Interface Loopback1, changed state to down"
action 1.0 cli command "enable"
action 1.5 cli command "configure terminal"
action 2.0 cli command "interface loopback1"
action 2.5 cli command "shutdown"
action 3.0 cli command "interface loopback2"
action 3.5 cli command "no shutdown"
action 4.0 cli command "end"
action 5.0 mail server "$_mailsrv" to "$_admin" from "$_report" subject "Primary interface down." body "Backup interface active $_cli_result"
 
Проверка настроенного апплета:
show event manager policy registered
show ip interface brief
show event manager detector all
show event manager policy pending
show event manager policy active
debug event manager detector
debug event manager tcl cli
debug event manager tcl commands
debug event manager action cli
 
Имитируем сообщение системного журнала, для проверки работы апплета:
send log "Line protocol on Interface Loopback1, changed state to down"
 
#4. Мониторинг интерфейса командной строки (CLI Detector).

Детектор CLI срабатывает, когда указанная команда вводится в командную строку. Подобно детектору событий системного журнала, можно указать шаблон регулярного выражения (regular expression pattern), соответствующий желаемой команде CLI. В разрабатываемом апплете обнаруживается команда copy running-config startup-config. Перед тем как команде будет разрешено выполнение, текущая конфигурация startup-config будет скопирована во флэш-память:

event manager environment TFTP_SERVER tftp://[your server IP]/
event manager environment FILE R1_config.cfg
event manager applet LAST_CONFIG
event cli pattern "cop.* ru.* st.*" sync yes
action 1.0 cli command "enable"
action 2.0 cli command "configure terminal"
action 3.0 cli command "file prompt quiet"
action 4.0 cli command "end"
action 5.0 cli command "copy start $TFTP_SERVER$FILE"
action 6.0 cli command "configure terminal"
action 7.0 cli command "no file prompt quiet"
action 8.0 syslog priority information msg "Configuration file backed up to TFTP."
end
 
Проверяем настроенные переменные:
show event manager environment
 
Снова запускаем debug event manager action cli. И проверяем работу апплета.

Детектор CLI можно использовать и для защиты вашего роутера. Например, можно сделать так, чтобы EEM перехватывал и не выполнял команду:
event manager applet USER_CONF_T
event cli pattern "configure terminal" sync no skip no occurs 1
action 1 syslog msg "User $_cli_username entered configuration mode on device $_cli_host "

Сообщение syslog выглядит так:
*Feb 12 14:31:09.982: %HA_EM-6-LOG: USER_CONF_T: User Looser entered configuration mode on device 192.168.1.100

Или полное журналирование всех вводимых команд - будет генерироваться лог сообщение с указанием пользователя, команды и устройства:

event manager applet COMM_ACC
event cli pattern ".*" sync no skip no occurs 1
action 1 syslog msg "User $_cli_username entered $_cli_msg on device $_cli_host "

Подробнее читаем здесь.

И на заметку при написании апплетов ЕЕМ:
- в именах переменных нельзя использовать дефисы (TFTP-SERVER нельзя, TFTP_SERVER можно);
- номера действий записываются в формате X.Y, при этом если Х равно, например, 10.Y или 15.Y, то такая запись будет вставляться между 1.Y и 2.Y. Чтобы избежать недорозумений, связанных с нумерацией рекоментуется число Х назначать в пределах от 1 до 9.

Успехов.

No comments:

Post a Comment

А что вы думаете по этому поводу?