RegExp как API

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Ответить
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Господа ! Всё очень интересно, но, пожалуйста, итог напишите в виде готового скрипта (см. название раздела) и инструкции. Не все участники форума могут следить за полетом Ваших гениальных мыслей ...

Насколько я понял для исполнения из командной строки одного скрипта нужно:

1. правило в /ip firewall layer7 или два правила на один скрипт для "универсализации" синтаксиса запроса.
2. правило в нат типа /ip firewall nat add chain=dstnat protocol=tcp dst-port=8087 layer7-protocol=scriptName action=<на усмотрение>
2. открытый сервис www с нестандартным портом (например тут 8087)
3. исполняемый скрипт

Соответственно, если нужно исполнять несколько разных скриптов нужно плодить правила в layer7 и нат ... Как то не очень ...
либо если использовать:
2. ip firewall nat add chain=dstnat protocol=tcp dst-port=8087 layer7-protocol=scriptName action=add-dst-to-address-list address-list=scriptName
тогда при сработке http://myip:8087/securekey/scriptname будут создаваться адрес-листы с именем scriptName, а "ловящий" их скрипт-менеджер сможет распознавать имена и уже запускать скрипты с переданными именами.
Насчет использования SOCKS я так и не понял хорошо это или плохо ...

Всё это неплохо бы оформить авторам в решение ...


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Inner
Сообщения: 248
Зарегистрирован: 01 июл 2020, 16:02

Sertik писал(а): 29 авг 2022, 10:08 Господа ! Всё очень интересно, но, пожалуйста, итог напишите в виде готового скрипта (см. название раздела) и инструкции. Не все участники форума могут следить за полетом Ваших гениальных мыслей ...

Насколько я понял для исполнения из командной строки одного скрипта нужно:

1. правило в /ip firewall layer7 или два правила на один скрипт для "универсализации" синтаксиса запроса.
2. правило в нат типа /ip firewall nat add chain=dstnat protocol=tcp dst-port=8087 layer7-protocol=scriptName action=<на усмотрение>
2. открытый сервис www с нестандартным портом (например тут 8087)
3. исполняемый скрипт

Соответственно, если нужно исполнять несколько разных скриптов нужно плодить правила в layer7 и нат ... Как то не очень ...
либо если использовать:
2. ip firewall nat add chain=dstnat protocol=tcp dst-port=8087 layer7-protocol=scriptName action=add-dst-to-address-list address-list=scriptName
тогда при сработке http://myip:8087/securekey/scriptname будут создаваться адрес-листы с именем scriptName, а "ловящий" их скрипт-менеджер сможет распознавать имена и уже запускать скрипты с переданными именами.
Насчет использования SOCKS я так и не понял хорошо это или плохо ...

Всё это неплохо бы оформить авторам в решение ...
Было б за чем следить :-) Всё ж просто и базовые вещи мной уже оформлялись на первой страничке. Всё остальное сыровато, но там размышления о более безопасных методах. И да. Сокс покачто в разы безопаснее чем www на нестандартном порту. Если всё же требуется переоформить, то не вопрос, ближе к обеду сделаю, но ничего супер отличительного от постов на первой странице Вы не увидете :nez-nayu:


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Я не модератор, но по дружески и с уважением попросил бы всё же переоформить. Четко и ясно по пунктам. Если можете прямо одним скриптом напишите с комментариями.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Inner
Сообщения: 248
Зарегистрирован: 01 июл 2020, 16:02

Что ж, обновляю инструкцию и попробую одновременно упростить всё для максимального понимания
Для начала, условимся, что:
У микротика есть внешний статический IP адрес 1.2.3.4
Имя нашего скрипта TEST (того самого, который будем вызывать)
Секретный ключ, пусть будет MySuperSecret9000
А теперь важный момент, для того, чтобы всё сработало через браузер, нам очень сильно нужно что-то, что может ответить на http запрос и совсем не важно что именно и как. Лишь бы только ответило.
В рамках микротика это может быть

Код: Выделить всё

/ip service
set www disabled=no
Или

Код: Выделить всё

/ip service
set ftp disabled=no
Чисто для себя, я использовал SOCKS с подменой порта на 80

Код: Выделить всё

/ip socks
set auth-method=password enabled=yes port=80 version=5
Порт на 80 (это и есть http) можете поменять, если используете отличный от 80, то его нужно будет указать через двоеточие в адресной строке браузера при обращении. Например http://1.2.3.4:54321/
По факту, нужен любой сервис на самом микротике. Если просто открыть порт, то ответа на http не будет, так как некому отвечать
Теперь нужно отловить уникальную строку при обращении к микротику. Для этого

Код: Выделить всё

/ip firewall layer7-protocol
add name=TEST-L7 regexp=.*MySuperSecret9000/TEST

/ip firewall mangle
add action=add-src-to-address-list address-list=TEST address-list-timeout=none-dynamic chain=input layer7-protocol=TEST-L7
Теперь, когда в адресной строке браузера будет вбито http://1.2.3.4/MySuperSecret9000/TEST микротик создаст адрес лист TEST с IP адресом того устройства с которого к нему обращались. Зачем в этой схеме нужен адрес лист? А всё просто. Нет способа запустить скрипт из Firewall напрямую

В заключении остался сам скрипт. Это может быть любой Ваш скрипт. Основным условием для срабатывания является:
1. Скрипт должен мониторить появление адрес листа TEST
2. В случае срабатывания, должно быть предусмотрено удаление адрес листа TEST

Вот, в качестве примера мой скрипт:

Код: Выделить всё

/system script
add dont-require-permissions=no name=TEST owner=Admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
    source=":local KILLCON [/ip firewall address-list find where list=\"TEST\"]\r\
    \n:if (\$KILLCON!=\"\") do={\r\
    \n/ip firewall nat disable [find where dst-port=\"12345\"]\r\
    \n/ip firewall connection remove [find where dst-address=\"1.2.3.4:12345\"]\r\
    \n/ip firewall address-list remove [find where list=\"TEST\"]\r\
    \n}"
Тот же скрипт, но не через экспорт для удобства понимания:

Код: Выделить всё

:local KILLCON [/ip firewall address-list find where list="TEST"]
:if ($KILLCON!="") do={
/ip firewall nat disable [find where dst-port="12345"]
/ip firewall connection remove [find where dst-address="1.2.3.4:12345"]
/ip firewall address-list remove [find where list="TEST"]
}
В шедулере всё до банального просто:

Код: Выделить всё

/system scheduler
add interval=2s name=KILLCONsched on-event=TEST policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-time=startup
Что в итоге у меня получилось. Скрипт каждые 2 секунды стартует и ищет адрес лист TEST. Если находит, то в нате закрывает всю переадресацию порта 12345 и в месте с тем рвёт все соединения по этому порту. А для запуска скрипта, я могу с телефона перейти по ссылке http://1.2.3.4/MySuperSecret9000/TEST которая создаст адрес лист TEST, что, собственно и станет причиной выполнения действий в скрипте.

Естественно, Вы можете использовать и другие методы создания адрес листа. Я описал лишь базовую, безбюджетную, до безумия упрощенную версию. Если у Вас есть возможность развернуть за микротиком веб сервер (или что-то что может ответить на http), то лучше так и сделайте. Будет в разы безопаснее


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Спасибо, большое ! То, что нужно пользователю. Четко и ясно.

Вопросы:

/ip firewall mangle add action=add-src-to-address-list address-list=TEST address-list-timeout=none-dynamic chain=input layer7-protocol=TEST-L7

1. Всё же (из Ваших обсуждений с Brook) надо мангл-правило использовать или правило в NAT ? Что лучше и влияет ли это реально на безопасность ?

2.
Если у Вас есть возможность развернуть за микротиком веб сервер (или что-то что может ответить на http), то лучше так и сделайте. Будет в разы безопаснее
Можно ли в качестве этого "чего-то" за Микротиком использовать произвольное устройство, имеющее WEB-интерфейс ? Оно ведь по идее ответит на запрос (хотя бы типа ошибкой "bad request" ? ... По идее этого же достаточно или нет ?


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Да и вообще у Вас как то странно всё ... : правило добавления адрес-листа создаёте в мангл, а скриптом переадресацию закрываете в нат. Это ошибка, вероятно. Исправьте.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
Brook
Сообщения: 127
Зарегистрирован: 24 май 2022, 00:29

Sertik писал(а): 01 сен 2022, 15:23 Да и вообще у Вас как то странно всё ... : правило добавления адрес-листа создаёте в мангл, а скриптом переадресацию закрываете в нат. Это ошибка, вероятно. Исправьте.
Вряд-ли это ошибка. Запускаемый скрипт выполняет какие-то действия. В примере автора он закрывает определенные внешние порты, чтобы ограничить доступ извне для клиентов какого-то сервиса.


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Пробовал всякие варианты. У меня не работает. Никто не пробегает по цепочке инпут в мангале. При включенном фаст-трек вероятно эта штука не работает ... :-):


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Inner
Сообщения: 248
Зарегистрирован: 01 июл 2020, 16:02

Sertik писал(а): 01 сен 2022, 16:55 Пробовал всякие варианты. У меня не работает. Никто не пробегает по цепочке инпут в мангале. При включенном фаст-трек вероятно эта штука не работает ... :-):
Фасттрек вообще должен умирать в тот момент, как только вы настраиваете устройство в первый раз. Слишком уж много бед от него. Да и изначально его придумали для слабеньких устройств по типу mAP Lite


Inner
Сообщения: 248
Зарегистрирован: 01 июл 2020, 16:02

Sertik писал(а): 01 сен 2022, 10:22 Спасибо, большое ! То, что нужно пользователю. Четко и ясно.

Вопросы:

/ip firewall mangle add action=add-src-to-address-list address-list=TEST address-list-timeout=none-dynamic chain=input layer7-protocol=TEST-L7

1. Всё же (из Ваших обсуждений с Brook) надо мангл-правило использовать или правило в NAT ? Что лучше и влияет ли это реально на безопасность ?

2.
Если у Вас есть возможность развернуть за микротиком веб сервер (или что-то что может ответить на http), то лучше так и сделайте. Будет в разы безопаснее
Можно ли в качестве этого "чего-то" за Микротиком использовать произвольное устройство, имеющее WEB-интерфейс ? Оно ведь по идее ответит на запрос (хотя бы типа ошибкой "bad request" ? ... По идее этого же достаточно или нет ?
1. Вообще без разницы. Конкретно в данном случае, вот как нравится, так и ловите. Мне мангл просто душевнее.
2. Да. Хоть другой роутер. Просто в таком случае у Вас должна быть переадресация на http порт этого устройства. Ну и цепочка сменится с инпут на форвард. а так всё тоже самое


Ответить