Перейти к содержимому
Калькуляторы

Блокировка сайтов из реестра (Mikrotik/API/PHP)

Всем привет!

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

Может :

- выгружать в адрес-лист заблокированные 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

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

58 минут назад, ixi сказал:

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

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

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, ixi сказал:

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

1 час назад, disappointed сказал:

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

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

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

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

 

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

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

 

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

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

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

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

 

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

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В 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=...
...

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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. Много выгружать нужно всего лишь первый раз.

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а можно заново архив выложить, а то ссылка не рабочая?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

morf, а что сейчас используете ? какую схему для блокировок на микротике ?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

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

Изменено пользователем morf

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Join the conversation

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

Гость
Ответить в тему...

×   Вставлено в виде отформатированного текста.   Вставить в виде обычного текста

  Разрешено не более 75 смайлов.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставить изображения напрямую. Загрузите или вставьте изображения по ссылке.