Пример решения для «Тревожной кнопки ZEL-Услуги»

Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

В свете всё больше возникающих вопросов вокруг мобильного приложения «Тревожная кнопка ZEL-Услуги» для устройств на базе Android, мы решили подробно рассмотреть реальные решения и практические примеры использования сервиса.

Напоминаем, что с помощью тревожной кнопки вы можете использовать возможности мгновенной рассылки SMS-ключей, SMS-уведомлений и TCP-пакетов на заданные адреса, а также получить экстренную помощь ИТ-специалистов в форс-мажорных обстоятельствах.

Мы рекомендуем пользоваться приложением для быстрого разрешения непредвиденных ситуаций с ИТ-оборудованием. Например, оно находится на высокой мачте и его необходимо перезагрузить, либо обнаружена подозрительная вирусная активность в удалённом филиале, а может и вообще требуется срочное вмешательство в работу серверов, когда в офисе никого нет. Во всех этих ситуациях мобильный сервис «тревожной кнопки ZEL-Услуги» будет незаменим.

Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

ZEL-Услуги: Тревожная кнопка

Мы разработали приложение для Android, позволяющее быстро выполнить какую-либо функцию на различном оборудовании. Бывают ситуации, когда это нужно сделать быстро, а системный администратор по каким-то причинам недоступен. Или если ваш IT-отдел сталкивается с какой-то «плавающей» проблемой и нужно оперативно её засечь.

Что делает Тревожная кнопка.

При активации кнопки (зажать на 3 секунды) приложение может одновременно:

  1. Отправить три SMS с заранее введённым ключом на определённый телефонный номер
  2. Отправить три ICMP-пакета заданного размера www- или ip- адрес
  3. Отправить SMS с заранее введённым текстом трём друзьям или коллегам

Отправка сразу трёх одинаковых SMS и восьми ICMP-пакетов сделано для повышения надёжности получения тревожного сигнала конечным оборудованием – бывает SMSки плохо доходят или интернет на телефоне работает плохо.

Вы можете использовать оба этих метода одновременно или каждый по отдельности.

Отправка сообщения друзьям или коллегам нужна для того, чтобы, к примеру, предупредить ваш IT-отдел о срабатывании Тревоги, что даёт возможность оперативно подключить их к решению технической проблемы.

В качестве примеров использования Тревожной кнопки можно представить несколько различных сценариев:

  1. При обнаружении вирусной активности в удалённом филиале для предотвращения распространения вируса необходимо срочно отключить его от общей сети.
  2. Имеется несколько серверов, которые подключены к ИБП. По какой-то причине ИБП не может отключить серверы самостоятельно, а обрыв питания приведёт к потере данных. В офисе никого нет, добираться до него час, а батарей хватит только на 20 минут. Или нужно просто перезапустить подвисший системный процесс на сервере.
  3. Необходимо перезагрузить оборудование, доступ к которому по каким-то причинам ограничен (например, оборудование находится на высокой мачте).
  4. Вручную переключить роутер на резервный канал Интернет.

Предположим, мы используем оборудование Mikrotik (в примерах используется CCR1009-8G-1S-1S+ с RouterOS 6.43.16, но работа проверена и на других моделях, оснащённых портами USB, например 951G-2HnD), USB-модем М150-2 от компании Мегафон и сервер на базе Windows.

В рамках данной статьи мы не будем подробно расписывать все пять ситуаций. Подразумевается, что человек, читающий эту статью, обладает базовыми навыками работы с Mikrotik и серверными ОС Windows, поэтому без особого труда сможет разобраться, как адаптировать предложенное решение для своих нужд.

Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

Как распознавать срабатывание Тревожной кнопки на примере Сценария 1

Удалённое отключение VPN-туннеля на Mikrotik с помощью SMS и приложения ZEL-Услуги: Тревожная кнопка

Предположим, что у нас есть два телефонных номера (+79261111111 и +79672222222), которые будут отключать интерфейс «L2TP-Tunnel1», закреплённый за первым VPN-туннелем. У каждого телефонного номера – свой уникальный ключ («KeyNumber1» и «KeyNumber2» соответственно), который вы внесли в соответствующие поля. Теперь нужно ввести внешний IP-адрес вашего роутера (или соответствующее DNS-имя). На этом минимально необходимая часть настройки приложения закончена, переходим к настройке роутера. Настраивать его будем с помощью консоли Winbox.


  1. Запустите Winbox.
  2. Откройте меню “Tools” → “SMS”.

    Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

  3. Отметьте галочкой «Receive Enabled» (разрешён приём SMS сообщений):

    Type: Serial
    Port: serial0
    Channel: 0
    Keep Max SMS: 9

  4. Теперь зададим пароль (Secret) на доступ к Mikrotik через SMS.

    К нашим скриптам он не имеет отношения, однако нужен в целях безопасности роутера. Использовать можно только английские буквы, цифры и простые символы:

    Secret: Very-Very-Big-Secret

  5. Поле «Allowed Number» в нашем случае можно оставить пустым, т.к. контролировать телефоны, с которых будем принимать нужные команды, будем с помощью скрипта, который я приведу ниже.

Теперь нужно создать скрипт, который будет обрабатывать SMS сообщения.


  1. Откройте меню “System” → “Scripts”.
  2. Создайте скрипт с названием «SMS» (на это имя далее будет ссылаться задание в планировщике)и отметьте все галочки Policy.

    Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

  3. Скрипт для приёма SMS, рассчитанный на два телефонных номера, каждый из которых имеет право отправлять SMS:

    /tool sms set receive-enabled=yes (разрешаем приём SMS. Если этого не сделать, то после перезагрузки Mikrotik SMS приниматься не будут)
    :local messageSMS1 "KeyNumber1"; (ключ для первого телефонного номера)
    :local messageSMS2 "KeyNumber2"; (ключ для второго телефонного номера)
    :local phoneSMS1 "+79261111111"; (первый телефонный номер)
    :local phoneSMS2 "+79672222222"; (второй телефонный номер)
    :local defNameInterface1 "L2TP-Tunnel1"; (имя интерфейса, отключаемого SMS, полученным от первого телефонного номера)
    :local defNameInterface2 "L2TP-Tunnel1"; (имя интерфейса, отключаемого SMS, полученным от второго телефонного номера. В нашем примере это один и тот же интерфейс, но вы можете вписать другой, например «SSTP-Tunnel2», тогда второй телефонный номер будет своим ключом отключать интерфейс «SSTP-Tunnel2»)
    :local countMSG1 [/tool sms inbox print count-only where message=$messageSMS1 phone=$phoneSMS1]; (проверяем количество SMS с первого телефонного номера с текстом, содержащим его ключ)
    :local countMSG2 [/tool sms inbox print count-only where message=$messageSMS2 phone=$phoneSMS2]; (проверяем количество SMS со второго телефонного номера с текстом, содержащим его ключ)
    :if ($countMSG1 > 0) do={ (если количество SMS с первого телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
    /interface disable $defNameInterface1; (отключение интерфейса L2TP-Tunnel1)
    }
    :if ($countMSG2 > 0) do={ (если количество SMS со второго телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
    /interface disable $defNameInterface2; (отключение интерфейса L2TP-Tunnel1, который мы в нашем примере могли заменить на «SSTP-Tunnel2»)
    }
    /tool sms inbox remove [find]; (удаляем все полученные сообщения)

  4. Теперь откройте меню “System” → “Sheduler”
  5. Создайте новое задание, которое будет запускать наш скрипт каждые 10 секунд.

    Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

    Name: SMS (здесь имя не принципиально)
    Start date: Jan/01/1970 (важный момент – если поставить иную дату, а время у роутера собьётся, то задание может не работать)
    Start Time: startup (выполнить задание сразу после включения роутера)
    Interval: 00:00:10 (каждые 10 секунд)

  6. Отметьте все галочки Policy

    Содержимое задания:
    /system script run SMS

  7. Практика показывает, что USB-модемы плохо переносят круглосуточную работу и имеют свойство зависать, поэтому имеет смысл создать ещё одно задание, которое будет каждые 28 минут выключать их на 2 минуты.

    Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

    Name: USB_PowerReset (здесь тоже имя не принципиально)
    Start date: Jan/01/1970
    Start Time: startup
    Interval: 00:28:00 (каждые 28 минут)

  8. Отметьте все галочки Policy

    Содержимое задания:
    /system routerboard usb power-reset duration=120s

  9. Мы решили вопрос с SMS, теперь можно научить наш роутер делать то же самое после получения ICMP-пакетов заданного размера. Например, в системе Windows для этого используется команда «ping».
    Нам нужно разрешить роутеру принимать ICMP-пакеты.
  10. Теперь создадим три правила Firewall, которые будут обрабатывать ICMP-пакеты. Хотя программа поддерживает использование до 9 октетов, в примере мы будем использовать 3 октета (числа от 100 до 999) – 329, 485 и 298.

    Откройте “New Terminal” и дайте команды:

    /ip firewall filter add action=add-src-to-address-list address-list=Panic-List1 address-list-timeout=3m chain=input packet-size=329 protocol=icmp comment=Panic-Button
    /ip firewall filter add action=add-src-to-address-list address-list=Panic-List2 address-list-timeout=3m chain=input packet-size=485 protocol=icmp src-address-list=Panic-List1
    /ip firewall filter add action=add-src-to-address-list address-list=Panic-List3 address-list-timeout=3m chain=input packet-size=298 protocol=icmp src-address-list=Panic-List2

  11. Вы только что создали 3 новых правила Firewall. Давайте на них посмотрим. Откройте меню “IP”→”Firewall”. Они будут находиться в первой вкладке «Filter Rules», в самом низу. Схватите их мышкой и поднимите на самый верх.

    Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

  12. Первое правило будет обрабатывать любой ICMP-пакет размером 329 байт, полученный роутером, заносить IP-адрес отправителя в список IP-адресов «Panic-List1» на 3 минуты.

    Второе правило будет обрабатывать любой ICMP-пакет размером 485 байт с IP-адреса из листа «PanicList1», заносить IP-адрес отправителя в другой список IP-адресов- «Panic-List2» на 3 минуты.

    Третье правило будет обрабатывать любой ICMP-пакет размером 298 байт с IP-адреса из листа «PanicList2», заносить IP-адрес отправителя в список IP-адресов- «Panic-List3» на 3 минуты.

    Посмотреть содержимое этих списков можно в том же меню “Firewall” на вкладке “Address Lists”.

    Таким образом, IP-адрес отправителя перемещается из первого списка в последний. Теперь для выполнения каких-либо действий нам остаётся всего лишь проверить факт наличия какого-нибудь IP в наши адрес-лист «Panic-List3» и, если наличие подтвердится, отключить интерфейс L2TP-Tunnel1.

  13. Создайте скрипт с названием «Panic» (на это имя далее будет ссылаться задание в планировщике)и отметьте все галочки Policy.
    Содержимое скрипта для ICMP-пакетов:

    :local listPanic1 "Panic-List3";
    :local defNameInterface1 "L2TP-Tunnel1";
    :local countPanic1 [/ip firewall address-list print count-only where list="Panic-List1"];
    :if ($countPanic1 > 0) do={ (проверяем - если к-во IP-адресов в первом IP-листе больше нуля, то)
    /interface disable $defNameInterface1; (выключаем интерфейс L2TP-Tunnel1)
    /ip firewal address-list remove [find where list~"Panic-List1"] (очищаем все записи в листе Panic-List1)
    }

  14. Нам осталось настроить этот скрипт на выполнение каждые 10 секунд.
  15. Откройте меню “System” → “Sheduler”
  16. Создайте новое задание, которое будет запускать наш скрипт каждые 10 секунд.

    Name: List (здесь имя не принципиально)
    Start date: Jan/01/1970 (важный момент – если поставить иную дату, а время у роутера собьётся, то задание может не работать)
    Start Time: startup (выполнить задание сразу после включения роутера)
    Interval: 00:00:10 (каждые 10 секунд)

  17. Отметьте все галочки Policy
  18. Содержимое задания:

    /system script run Panic

Разобравшись с этим вы без труда сможете модифицировать эти скрипты для того, чтобы заставить Mikrotik оперативно выполнять какие-то иные заранее определённые действия - инициировать запись каких-то заранее настроенных журналов (например, для диагностики какой-то периодически возникающей проблемы), проигрывать мелодию и «мерцать» светодиодами для поиска устройства среди аналогичных, проводить замеры скорости, изменять сетевые маршруты, включать резервные мощности и многое другое.

Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

Пример отключения сервера Windows при срабатывании Тревожной кнопки

Идея в том, чтобы при получении сигнала Тревоги по SMS или через Интернет с помощью ICMP-пакетов роутер отключил какой-либо IP –адрес. Скрипт, работающий на сервере, проверял доступность этого IP-адреса и, в случае его недоступности, запускал определённую команду, например, выключался.

Мы уже научились создать скрипты для отключения туннелей, поэтому не будем останавливаться на этом подробно, приведём лишь вариант слегка изменённых скриптов – вместо отключения интерфейсов мы будем включать правило Firewall, ограничивающее доступ сервера к нужному нам IP-адресу Mikrotik.

Предположим, что IP-адрес 10.1.40.255 принадлежит вашему серверу, а для Mikrotik вы добавляете дополнительный IP-адрес 10.1.40.99


  1. Откройте «IP»→”Addresses”
  2. Добавьте IP-адрес 10.1.40.99 и не забудьте про маску.
  3. Откройте “New Terminal” и дайте команду:

    /ip firewall filter add action=drop chain=input protocol=icmp src-address=10.1.40.255 dst-address=10.1.40.99 disabled=yes

  4. Откройте меню “IP”→”Firewall”
  5. Новое правило будет находиться в первой вкладке «Filter Rules», в самом низу.

    Оно выключено, поэтому будет подсвечено серым цветом. Обратите внимание – самый левый столбец указывает на порядковый номер правила. Схватите правило мышкой и поднимите выше. В нашем примере оно должно получить порядковый номер 0. Этот номер очень важен, т.к. к нему будет привязано выполнение скрипта. На скриншоте порядковый номер правила подчеркнут красным:

    Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности

Теперь нам нужно добавить скрипты и установить их в планировщик задач роутера. Аналогичные работы мы уже проделывали выше, поэтому ограничусь приведением самих скриптов. Обратите внимание – они не сильно отличаются от тех, что приведены выше.

Скрипт для приёма SMS, рассчитанный на два телефонных номера:

  • /tool sms set receive-enabled=yes (разрешаем приём SMS. Если этого не сделать, то после перезагрузки Mikrotik SMS приниматься не будут)
  • :local messageSMS1 "KeyNumber1"; (ключ для первого телефонного номера)
  • :local messageSMS2 "KeyNumber2"; (ключ для второго телефонного номера)
  • :local phoneSMS1 "+79261111111"; (первый телефонный номер)
  • :local phoneSMS2 "+79672222222"; (второй телефонный номер)
  • :local listPanic1 "Panic-List3";
  • :local countMSG1 [/tool sms inbox print count-only where message=$messageSMS1 phone=$phoneSMS1]; (проверяем количество SMS с первого телефонного номера с текстом, содержащим его ключ)
  • :local countMSG2 [/tool sms inbox print count-only where message=$messageSMS2 phone=$phoneSMS2]; (проверяем количество SMS со второго телефонного номера с текстом, содержащим его ключ)
  • :if ($countMSG1 > 0) do={ (если количество SMS с первого телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
  • /ip firewall filter enable 0; (включаем правило Firewall под номером 0)
  • }
  • :if ($countMSG2 > 0) do={ (если количество SMS со второго телефонного номера с текстом, содержащим его ключ, больше нуля, то выполняем:)
  • /ip firewall filter enable 0; (включаем правило Firewall под номером 0)
  • }
  • /tool sms inbox remove [find]; (удаляем все полученные сообщения)
  • :local countPanic1 [/ip firewall address-list print count-only where list="Panic-List1"];
  • :if ($countPanic1 > 0) do={ (проверяем - если к-во IP-адресов в первом IP-листе больше нуля, то)
  • /ip firewall filter enable 0; (включаем правило Firewall под номером 0)
  • /ip firewal address-list remove [find where list~"Panic-List1"] (очищаем все записи в листе Panic-List1)
  • }

Нам осталось настроить этот скрипт на выполнение каждые 10 секунд, как мы сделали это в Примере 1

Настройка сервера под «Тревожную кнопку ZEL-Услуги»

Теперь перейдём к настройке сервера Windows. Нам нужно добавить в планировщик заданий запуск bat-файла с правами администратора и перезапускающий задание, если оно перестало выполняться. Как это сделать - не тема этой статьи, тем более что такая информация легко ищется поисковиками, поэтому перейду сразу к содержимому файлов.

Вариант1.

Вам нужно выключить сервер. Здесь надо уточнить два важных момента.

  1. Для снижения риска ложного срабатывания лучше делать ~5 попыток «пинга». Если хоть одна окажется успешна, то выключения не произойдёт.
  2. Время перезагрузки Mikrotik иной раз бывает больше минуты. Значение параметра n тождественно 1 попытке в секунду, а нам надо сделать так, чтобы проверка срабатывала не чаще 1 раза в 2 минуты, поэтому перед каждым циклом делаем ping 127.0.0.1 -n 120
  • Set pingip=10.1.40.99
  • :END
  • ping 127.0.0.1 -n 120
  • ping -n 5 %pingip% | Find "TTL="&&Goto END
  • :ELSE
  • shutdown -s -f -t 60
  • Goto END

 

Вариант2.

При тех же условиях нам нужно остановить процесс «pass2.exe», исполняемый файл которого находится по адресу C:\Pass\pass2.exe

  • Set pingip=10.1.40.99
  • Set Process=pass2.exe
  • :END
  • ping 127.0.0.1 -n 120
  • ping -n 25 %pingip% | Find "TTL="&&Goto END
  • :ELSE
  • taskkill /f /im %Process% && start "" /d C:\Pass\pass2.exe
  • Goto END

Обратите внимание, что все примеры рассмотрены в варианте при работе с оборудованием Mikrotik. Скриптовую часть вы можете изменять так, как этого требует конкретная ситуация. Главная задача инструкции — определиться с командами и научиться пользоваться сервисом «Тревожная кнопка ZEL-Услуги».

Настройка тревожной кнопки ZEL-Услуги: примеры, скрипты, подробности
Логотип компании «ZEL-Услуги» Компания ZEL-Услуги

Для получения подробной консультации и помощи обратитесь к экспертам нашей компании.

Читайте также

Может быть интересно