Господа ! Всё очень интересно, но, пожалуйста, итог напишите в виде готового скрипта (см. название раздела) и инструкции. Не все участники форума могут следить за полетом Ваших гениальных мыслей ...
Насколько я понял для исполнения из командной строки одного скрипта нужно:
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 я так и не понял хорошо это или плохо ...
Всё это неплохо бы оформить авторам в решение ...
RegExp как API
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
-
- Сообщения: 250
- Зарегистрирован: 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 я так и не понял хорошо это или плохо ...
Всё это неплохо бы оформить авторам в решение ...


-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Я не модератор, но по дружески и с уважением попросил бы всё же переоформить. Четко и ясно по пунктам. Если можете прямо одним скриптом напишите с комментариями.
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 250
- Зарегистрирован: 01 июл 2020, 16:02
Что ж, обновляю инструкцию и попробую одновременно упростить всё для максимального понимания
Для начала, условимся, что:
У микротика есть внешний статический IP адрес 1.2.3.4
Имя нашего скрипта TEST (того самого, который будем вызывать)
Секретный ключ, пусть будет MySuperSecret9000
А теперь важный момент, для того, чтобы всё сработало через браузер, нам очень сильно нужно что-то, что может ответить на http запрос и совсем не важно что именно и как. Лишь бы только ответило.
В рамках микротика это может быть
Или
Чисто для себя, я использовал SOCKS с подменой порта на 80
Порт на 80 (это и есть http) можете поменять, если используете отличный от 80, то его нужно будет указать через двоеточие в адресной строке браузера при обращении. Например http://1.2.3.4:54321/
По факту, нужен любой сервис на самом микротике. Если просто открыть порт, то ответа на http не будет, так как некому отвечать
Теперь нужно отловить уникальную строку при обращении к микротику. Для этого
Теперь, когда в адресной строке браузера будет вбито http://1.2.3.4/MySuperSecret9000/TEST микротик создаст адрес лист TEST с IP адресом того устройства с которого к нему обращались. Зачем в этой схеме нужен адрес лист? А всё просто. Нет способа запустить скрипт из Firewall напрямую
В заключении остался сам скрипт. Это может быть любой Ваш скрипт. Основным условием для срабатывания является:
1. Скрипт должен мониторить появление адрес листа TEST
2. В случае срабатывания, должно быть предусмотрено удаление адрес листа TEST
Вот, в качестве примера мой скрипт:
Тот же скрипт, но не через экспорт для удобства понимания:
В шедулере всё до банального просто:
Что в итоге у меня получилось. Скрипт каждые 2 секунды стартует и ищет адрес лист TEST. Если находит, то в нате закрывает всю переадресацию порта 12345 и в месте с тем рвёт все соединения по этому порту. А для запуска скрипта, я могу с телефона перейти по ссылке http://1.2.3.4/MySuperSecret9000/TEST которая создаст адрес лист TEST, что, собственно и станет причиной выполнения действий в скрипте.
Естественно, Вы можете использовать и другие методы создания адрес листа. Я описал лишь базовую, безбюджетную, до безумия упрощенную версию. Если у Вас есть возможность развернуть за микротиком веб сервер (или что-то что может ответить на http), то лучше так и сделайте. Будет в разы безопаснее
Для начала, условимся, что:
У микротика есть внешний статический IP адрес 1.2.3.4
Имя нашего скрипта TEST (того самого, который будем вызывать)
Секретный ключ, пусть будет MySuperSecret9000
А теперь важный момент, для того, чтобы всё сработало через браузер, нам очень сильно нужно что-то, что может ответить на http запрос и совсем не важно что именно и как. Лишь бы только ответило.
В рамках микротика это может быть
Код: Выделить всё
/ip service
set www disabled=no
Код: Выделить всё
/ip service
set ftp disabled=no
Код: Выделить всё
/ip socks
set auth-method=password enabled=yes port=80 version=5
По факту, нужен любой сервис на самом микротике. Если просто открыть порт, то ответа на 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
В заключении остался сам скрипт. Это может быть любой Ваш скрипт. Основным условием для срабатывания является:
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
Естественно, Вы можете использовать и другие методы создания адрес листа. Я описал лишь базовую, безбюджетную, до безумия упрощенную версию. Если у Вас есть возможность развернуть за микротиком веб сервер (или что-то что может ответить на http), то лучше так и сделайте. Будет в разы безопаснее
-
- Сообщения: 1657
- Зарегистрирован: 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.
Вопросы:
/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.
Можно ли в качестве этого "чего-то" за Микротиком использовать произвольное устройство, имеющее WEB-интерфейс ? Оно ведь по идее ответит на запрос (хотя бы типа ошибкой "bad request" ? ... По идее этого же достаточно или нет ?Если у Вас есть возможность развернуть за микротиком веб сервер (или что-то что может ответить на http), то лучше так и сделайте. Будет в разы безопаснее
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Да и вообще у Вас как то странно всё ... : правило добавления адрес-листа создаёте в мангл, а скриптом переадресацию закрываете в нат. Это ошибка, вероятно. Исправьте.
фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
- Brook
- Сообщения: 156
- Зарегистрирован: 24 май 2022, 00:29
Вряд-ли это ошибка. Запускаемый скрипт выполняет какие-то действия. В примере автора он закрывает определенные внешние порты, чтобы ограничить доступ извне для клиентов какого-то сервиса.
-
- Сообщения: 1657
- Зарегистрирован: 15 сен 2017, 09:03
Пробовал всякие варианты. У меня не работает. Никто не пробегает по цепочке инпут в мангале. При включенном фаст-трек вероятно эта штука не работает ... 

фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
viewtopic.php?f=14&t=13947
-
- Сообщения: 250
- Зарегистрирован: 01 июл 2020, 16:02
Фасттрек вообще должен умирать в тот момент, как только вы настраиваете устройство в первый раз. Слишком уж много бед от него. Да и изначально его придумали для слабеньких устройств по типу mAP Lite
-
- Сообщения: 250
- Зарегистрирован: 01 июл 2020, 16:02
1. Вообще без разницы. Конкретно в данном случае, вот как нравится, так и ловите. Мне мангл просто душевнее.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.Можно ли в качестве этого "чего-то" за Микротиком использовать произвольное устройство, имеющее WEB-интерфейс ? Оно ведь по идее ответит на запрос (хотя бы типа ошибкой "bad request" ? ... По идее этого же достаточно или нет ?Если у Вас есть возможность развернуть за микротиком веб сервер (или что-то что может ответить на http), то лучше так и сделайте. Будет в разы безопаснее
2. Да. Хоть другой роутер. Просто в таком случае у Вас должна быть переадресация на http порт этого устройства. Ну и цепочка сменится с инпут на форвард. а так всё тоже самое