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

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

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

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

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

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

Используем тревожную кнопку по назначению

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

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

Рассмотрим несколько примеров в деталях. Мы также рекомендуем определённые скрипты к использованию, которые вы можете модифицировать для того, чтобы заставить Mikrotik оперативно выполнять какие-то иные заранее определённые действия:

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

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

Пример первый

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

  1. Предположим, что у нас есть два телефонных номера: +79261111111 и +79672222222.
  2. Они будут отключать интерфейс «L2TP-Tunnel1», закреплённый за первым VPN-туннелем.
  3. У каждого телефонного номера свой уникальный ключ: «KeyNumber1» и «KeyNumber2» соответственно (его вы внесли в соответствующие поля).
  4. Теперь нужно ввести внешний 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. Содержимое скрипта:

    /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 (каждые 10 секунд)

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

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

  9. Мы решили вопрос с SMS, теперь можно научить наш роутер делать то же самое после получения IP-пакета с ключом. Нам нужно разрешить роутеру принимать IP-пакеты по порту 80, но при этом в целях безопасности запретить на них отвечать кому ни попадя, потому что этот порт может быть использован злоумышленниками для взлома роутера.
  10. Откройте меню “IP”→”Services”.
  11. Найдите там сервис WWW.

    Если вы не планируете использовать сервис WWW, то можно просто отключить. Если вы используете его пусть даже внутри локальной сети, то настоятельно рекомендую не делать этого, так как все данные (включая пароли), передаваемые таким способом, отправляются в открытом виде и легко могут быть перехвачены. Если я так и не смог вас убедить выключить этот сервис, то откройте сервис WWW и в полях «Available From» укажите те IP-адресы или подсети, с которых вы разрешаете доступ, чтобы ваш роутер не был доступен «снаружи», например, как это показано на скриншоте:

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

  12. Теперь создадим два правила Firewall, которые будут обрабатывать IP-пакеты с нужными данными.
  13. Откройте “New Terminal” и дайте две команды:

    /ip firewall filter add action=add-dst-to-address-list address-list=Panic-List1 address-list-timeout=2w chain=input content=KeyNumber1 dst-port=80 protocol=tcp
    /ip firewall filter add action=accept chain=input dst-port=80 protocol=tcp

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

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

  17. Первое правило будет обрабатывать любой внешний запрос, приходящий на порт 80TCP и содержащий текст “KeyNumber1 ” приведёт к тому, что IP-адрес отправителя будет занесён в список IP-адресов «Panic-List1».

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

  18. Второе правило просто разрешает приём таких TCP-пакетов, без него первое правило работать не будет.
  19. Вы можете добавить ещё одно правило для второго ключа «KeyNumber2», дав вот такую команду:

    /ip firewall filter add action=add-dst-to-address-list address-list=Panic-List2 address-list-timeout=2w chain=input content= KeyNumber2 dst-port=80 protocol=tcp

  20. Поднимите это правило на самый верх. Оно будет отслеживать второй ключ и занесёт IP-адрес отправившего запрос с ключом в лист адресов под названием «Panic-List2». Новое правило можно поставить перед первым или после – это не важно, главное чтобы оно было выше нашего правила, разрешающего приём таких TCP-пакетов. При отсутствии других правил это будет выглядеть так:

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

  21. Теперь нам остаётся всего лишь проверить, попал ли какой-нибудь IP в наши адрес-листы и, если попал, отключить интерфейсы L2TP-Tunnel1 и SSTP-Tunnel2.
  22. Создайте скрипт с названием «List» (на это имя далее будет ссылаться задание в планировщике) и отметьте все галочки Policy.
  23. Содержимое скрипта для TCP-пакетов:

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

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

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

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

    /system script run List

Разобравшись с этим вы без труда сможете изменять скрипты под свои нужды.

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

Пример второй

Удалённое отключение сервера Windows с помощью SMS, используя Mikrotik и приложение «Тревожная кнопка ZEL-Услуги».

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

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

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


  1. Откройте «IP»→”Addresses”
  2. Добавьте нужный IP-адрес и не забудьте про маску.
  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 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]; (удаляем все полученные сообщения)

Скрипт для TCP-пакетов:

  • :local listPanic1 "Panic-List1"; (задаём имя первого листа IP-адресов)
  • :local listPanic2 "Panic-List2"; (задаём имя второго листа IP-адресов)
  • :local countPanic1 [/ip firewall address-list print count-only where list="Panic-List1"]; (считаем к-во IP-адресов в первом листе)
  • :local countPanic-List2 [/ip firewall address-list print count-only where list="Panic-List2"]; (считаем к-во IP-адресов во втором листе)
  • :if ($countPanic1 > 0) do={ (проверяем - если к-во IP-адресов в первом IP-листе больше нуля, то)
  • /ip firewall filter enable 3; (включаем правило Firewall под номером 3)
  • /ip firewal address-list remove [find where list~"Panic-List1"] (очищаем все записи в листе Panic-List1)
  • }
  • :if ($countPanic2 > 0) do={ (проверяем - если к-во IP-адресов во втором IP-листе больше нуля, то)
  • /ip firewall filter enable 3; (включаем правило Firewall под номером 3)
  • /ip firewal address-list remove [find where list~"Panic-List2"] (очищаем все записи в листе Panic-List2)
  • }

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

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

Пример 1

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

  1. Для снижения риска ложного срабатывания лучше делать ~5 попыток пинга. Если хоть одна окажется успешна, то выключения не произойдёт.
  2. Время перезагрузки Mikrotik иной раз бывает больше 1 минуты. Значение параметра 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-Услуги

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

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

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