Jump to content

Recommended Posts

Posted (edited)

Всем привет!

Делал для себя, уже как-то выкладывал, но постепенно дописывал скрипт. Захотелось снова поделиться, вдруг кому-то пригодится.  Поддержка нескольких микротик с заданными параметрами выгрузки (куда, что выгружаем). Понятно, что схема может показаться не идеальной, но за бесплатно может и сгодится.

Может :

- выгружать в адрес-лист заблокированные IP;

- выгружать в адрес-лист все IP кроме заблокированных (для редиректа на прокси сервер)

- выгружать regexp static записи в DNS c заблокированными domain или https url/domain;

- выгружать url/domain из реестра на WebProxy микротика;

- суммировать ip в подсети для уменьшение списка ip;

- конвертировать кириллицу в idna ascii;

- убирать дубли;

- убирать url, domain которых уже залочены;

- фильтрует разные нестандартные символы, которые не должно быть в url.

 

У меня работает по схеме:

- address-list с блокировкой выгружается на микротик в роли bras и там же блокируется;

- address-list с IP для редиректа на Proxy выгружаются на микротик в роли bras и правило NAT редиректит трафик на проксю;

- CHR Микротик с WebProxy на котором лочится url/domain адреса;

- CHR Микротик c DNS на который редиректятся запросы от ревизора для блокировки по HTTPS;

 

Что нужно: 

- PHP >= 5.3.0

- xml dump реестра

- включить API на микротик и отредактировать sync.php. Редактировать только в windows-1251 кодировке.

- запустить php sync.php

image.thumb.png.66167261e05530bcd30b4c2d9cdbf91f.png

 

 

 

 

 

mikrotik.rar

Edited by morf
Posted (edited)
58 минут назад, ixi сказал:

Как производительность? Помнится, микротик очень тормозит при работе с списками адресов.

С адрес-листами вообще нет проблем. До этого, когда не делал суммирование было около 300 тыс. адресов. Сейчас около 200.

Edited by morf
Posted
1 час назад, ixi сказал:

Как производительность? Помнится, микротик очень тормозит при работе с списками адресов.

Я как-то для смеха заливал в мелкий тик типа HEXLite 32мб, айпишники в адресный лист, если память не изменяет то удалось

тысяч под 30 влить.

Posted (edited)
1 час назад, disappointed сказал:

Я как-то для смеха заливал в мелкий тик типа HEXLite 32мб, айпишники в адресный лист, если память не изменяет то удалось

тысяч под 30 влить.

Мелкие роутерборды, по понятным причинам, не подходят. CCR либо роутерборд >=1 Гбайт памяти, а-ля 3011/4011.

Edited by morf
Posted
15 часов назад, morf сказал:

С адрес-листами вообще нет проблем. До этого, когда не делал суммирование было около 300 тыс. адресов. Сейчас около 200.

Интересно, если поправили. Когда-то тестировал на 1036, удаление на списке в 200 тыс. было со скоростью в лучшем случае 10 адресов в секунду

Posted (edited)

Я вас в начале не понял. Думал вы про производительность в целом. А так да, синхронизация около 20-30 записей в сек. Первичная синхронизация идёт около 2 часов, потом только на изменения, а они быстро.

Edited by morf
Posted

Старую версию еще тестировал в полном объеме, микротик просто умирал при фильтрации через Proxy самого микротика.
Сейчас скрипт выгружает 2 списка: 1 для полной блокировки, другой для редиректа на сервер фильтрации + отдельно развернут dns-сервер, который фильтрует сайты.

Даже при такой конфигурации, вывозит списки только RB3011 и выше. Все что ниже жестко зависает.

Posted
1 минуту назад, Gubanov сказал:

Старую версию еще тестировал в полном объеме, микротик просто умирал при фильтрации через Proxy самого микротика

 

В старом скрипте было несколько недостатков, которые я исключил:

- Раньше в comment прописывался hash строки и дальнейшая синхронизация велась по нему. Из-за того, что реестр очень вырос, а hash в comment было много, то я сделал синхронизацию только по domain и path. Объективно webproxy после этого стало легче :)

- убрал из webproxy блокировку по IP (IP теперь выгружаются в address-list). Еще чуть-чуть полегчало.

Posted

@morf А теперь скрипт нормально отрабатывает недоступный микротик? А то ранее, если один из списка недоступен, то скрипт останавливался.

Posted (edited)
1 час назад, Gubanov сказал:

@morf А теперь скрипт нормально отрабатывает недоступный микротик? А то ранее, если один из списка недоступен, то скрипт останавливался.

Зависший процесс киляется при последующем запуске.

Если микрот недоступен, то переходим к следующему в списке.

 

50 минут назад, Gubanov сказал:

И для выгрузки лучше использовать api-ssl, т.к. простой api передает пароль не зашифрованным и была куча взломов.

Класс отвечающий за работу по api микротика уже поддерживает новый режим авторизации по api. Api ssl, кстати, тоже поддерживается в классе, но я его не выносил в отдельную опцию для коннекта.

Edited by morf
Posted
В 06.08.2019 в 23:00, morf сказал:

 

В старом скрипте было несколько недостатков, которые я исключил:

- Раньше в comment прописывался hash строки и дальнейшая синхронизация велась по нему. Из-за того, что реестр очень вырос, а hash в comment было много, то я сделал синхронизацию только по domain и path. Объективно webproxy после этого стало легче :)

- убрал из webproxy блокировку по IP (IP теперь выгружаются в address-list). Еще чуть-чуть полегчало.

Ну что я могу сказать, RB2011UiAS-RM "умер" после заливки списков адресов.

Posted
1 час назад, Gubanov сказал:

Ну что я могу сказать, RB2011UiAS-RM "умер" после заливки списков адресов.

:) Выгружали только адрес-листы ?

Posted
34 минуты назад, morf сказал:

:) Выгружали только адрес-листы ?

Да, я выгружаю только адреса. :) Ну точный диагноз будет позже, но он перестал быть доступен после выгрузке адресов.

Posted
28 минут назад, Gubanov сказал:

Да, я выгружаю только адреса. :) Ну точный диагноз будет позже, но он перестал быть доступен после выгрузке адресов.

Буквально пару недель назад в выгрузке из реестра IP  (после суммирования) было около 130 тыс записей для блокировки и ~ 70 тыс записей для редиректа. Сейчас уже 250 тыс записей для блокировок и для редиректа ~ 70 тыс.

 

Причем, это уже второй раз, когда кол-во блокируемых IP возрастает в 2 раза за короткий период. Дальше начнут ныть крупные операторы + федералы из-за того, что у них перегруз и РКН начнет снижать кол-во блокируемых IP.

Posted
7 часов назад, morf сказал:

Причем, это уже второй раз, когда кол-во блокируемых IP возрастает в 2 раза за короткий период. Дальше начнут ныть крупные операторы + федералы из-за того, что у них перегруз и РКН начнет снижать кол-во блокируемых IP.

 А они не ноют, а жестко агрегируют, особенно в url (если куча записей с одного ресурса типа форума, то они агрегируют до одной). На вопрос  магистралу - а зачем мне такое счастье попасть под незаконное блокирование - ответ, пока нет техвозможности исключить вас из сервиса наших блокировок. Спасает только то, что заглушка не наша а их выдается.

Posted
В 03.08.2019 в 11:26, morf сказал:

Первичная синхронизация идёт около 2 часов

Если просто залить в МТ файл с содержимым

/ip firewall address-list remove numbers=[find list=rkn]
/ip firewall address-list
add list=rkn address=...
add list=rkn address=...
add list=rkn address=...
...

то удаление/добавление происходит за несколько минут.

Posted (edited)
22 минуты назад, snark сказал:

Если просто залить в МТ файл с содержимым


/ip firewall address-list remove numbers=[find list=rkn]
/ip firewall address-list
add list=rkn address=...
add list=rkn address=...
add list=rkn address=...
...

то удаление/добавление происходит за несколько минут.

Я тестировал синхронизацию через выгрузку на микрот по фтп с последующим выполнением файла. Все хорошо, но была проблема с обработкой ошибок - в случае наличия в файле импорта строки, с синтаксически ошибочной записью, то прекращался импортироваться весь файл целиком. Даже добавление конструкции:

:do  { } on-error { }

 как построчно, так и на весь код целиком не помогало. С адрес-листами еще нормально отрабатывала, а вот с url все было непредсказуемо (из-за наличия в реестре спец. символов, слэшей, возврат коретки и т.п.). В итоге отдаешь файл микроту на выполнение и не получаешь callback о результатах выполнения. Я оставил единую конструкцию синхронизации по API. Много выгружать нужно всего лишь первый раз.

Edited by morf
Posted
2 минуты назад, morf сказал:

в случае наличия в файле импорта строки, с синтаксически ошибочной записью, то прекращался импортироваться весь файл целиком

Файл формируете вы своими собственными руками, так что любые ошибки в файле - это, согласитесь, вина того кто его сформировал, сиречь надо тщательнее чистить IP, URL и домены перед внесением в список.

  • 4 years later...
Posted

Как топикстартер, скажу, что идея использовать WebProxy микротика была хороша только поначалу, когда реестра распух до неимоверных размеров, то WebProxy просто перестает работать и обрабатывать трафик. Переходить нужно на что-то серьезное, либо на Squid,

Posted (edited)

На микрот выгружаю только IP-адреса в разные адрес-листы: те, что заблокированы и те, по которым идет редирет на proxy.

Так же поднял сервер маршрутизации (Bird) на Linux и поднял bgp-сессию. Скрипт выгружает в систему IP-адреса из рееестра, а роут-сервер анонсирует их тому, с кем поднял bgp-сессию. Так же выгружаются domain в Unbound DNS-сервер.

Edited by morf

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...
На сайте используются файлы cookie и сервисы аналитики для корректной работы форума и улучшения качества обслуживания. Продолжая использовать сайт, вы соглашаетесь с использованием файлов cookie и с Политикой конфиденциальности.