Меню
Контакты
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Интернет-магазин
сетевого оборудования
Москва +7 (495) 103-41-03 +7 (915) 420-28-94
107023, Москва, пл. Журавлёва, 10с3, подъезд 31, офис 309
Пн-Пт: с 9-00 до 17-00   Сб-вс: выходной
Заказать звонок

Боремся с рекламой в браузере и Skype с помощью Mikrotik

 23 Дек 2017    Новости ASP24, MikroTik, О настройках и установке оборудования производителя Mikrotik, Практика и программирование MikroTik, Scripts

Надоела навязчивая реклама в Skype? Для владельцев Mikrotik есть удобный трюк, при помощи которого можно отключить рекламу в Skype сразу на всех ваших устройствах. И всего пара строк :)

/ip firewall address-list
add address=rad.msn.com list=ads_skype
add address=apps.skype.com list=ads_skype

/ip firewall filter
add action=reject chain=forward comment="DROP Skype ADS" dst-address-list=ads_skype log=no reject-with=icmp-network-unreachable

Не забудьте поднять запрещающее правило выше разрешающих. После перезапуска Skype, реклама больше вас не потревожит. Из минусов следует отметить тот факт, что "главная страница" Skype станет недоступной.

У некоторых реклама при этом не отключается. В таком случае нужно опытным путем подобрать один из следующих доменов, с которых может осуществляться подгрузка рекламного контента.

add address=adriver.ru list=ads_skype
add address=api.skype.com list=ads_skype
add address=static.skypeassets.com list=ads_skype
add address=devads.skypeassets.net list=ads_skype
add address=devapps.skype.net list=ads_skype
add address=qawww.skypeassets.net list=ads_skype
add address=qaapi.skype.net list=ads_skype
add address=preads.skypeassets.net list=ads_skype
add address=preapps.skype.net list=ads_skype
add address=ads1.msads.net list=ads_skype
add address=flex.msn.com list=ads_skype

 

Чистим интернет от назойливой рекламы (AD Blocker для MikroTik)

Чистим интернет от назойливой рекламы

Переадресовывая клиента при запросе «рекламного» домена, например, на loopback (127.0.0.1 — 127.255.255.255), вместо котента рекламы клиент получит благодатное «ничего» (разумеется, при условии, что у нас не работает локальный веб-сервер который слушает локалхост). Механизм фильтрации довольно старый и не лишен недостатков. Например, нельзя указать маски хостов (*.ad-domain.tld) или «вырезать» рекламу, баннеры которой хостятся на запрашиваемых ресурсах. Но зато не привязан к какому-то либо протоколу и довольно прост в эксплуатации. Более того, если его использовать, например, на домашнем или офисном маршрутизаторе, который используется в качестве DNS сервера, реклама успешно порежется на всех гаджетах, где IP нашей железки прописан первым в качестве DNS сервера.

Но что если у нас вместо роутера с кастомной прошивкой используется… MikroTik (RouterOS), функционал которого накладывает некоторые ограничения? Под катом вы узнаете каким образом удалось успешно "сконвертировать" файл хостов в пригодный для него формат, как автоматизировать это дело и что для хабралюдей в качестве бонуса был создан небольшой сервис как раз для автоматизации этого процесса (маленький, абсолютно бесплатный и с открытыми исходниками).

Настраиваем MikroTik

Настройка самой железки вряд ли вызовет какие-либо трудности. Укажем IP маршрутизатора в качестве первого DNS сервера в DHCP — «IP» → «DHCP Server» → «Networks» → %default config%. Первым прописываем IP самого MikroTik-а, нажимаем «OK»:

Настройка IP маршрутизатора

DNS сервер работает «из коробки», и можно даже не менять его стоковые настройки:

DNS сервер и его стоковые настройки

Единственная интересная для нас кнопка — «Static» («Статические маршруты»), в которых мы должны прописать «рекламные» домены, указав куда такие запросы перенаправлять.

Конвертируем файл хостов

Файл хостов имеет формат:

# Any comments
127.0.0.1 localhost
127.0.0.1 domain-a.tld
127.0.0.1 domain-b.tld

Формат скрипта для MikroTik, использующий статические DNS маршруты:

# Any comments
/ip dns static
add address=127.0.0.1 name=localhost
add address=127.0.0.1 name=domain-a.tld
add address=127.0.0.1 name=domain-b.tld

Для получения актуальных списков первого и преобразования их во второй мы выполним простые команды в шелле на, например, десктопе (bash):

  1. Скачиваем списки и аккуратно складываем их под именами ./hosts_list.1, ./hosts_list.2 и т.д.:
    $ src=('http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext' 'https://adaway.org/hosts.txt'); i=0; for file in ${src[*]}; do i=$((i+1)); wget --no-check-certificate -O "./hosts_list.$i" "$file"; done;
  2. Грепаем всё что начинается на '127.0.0.1 ', удаляем комменты, оставляем только имена доменов, убираем дубликаты, убираем пустые строки и оформляем каждый домен в виде команды для импорта:
    $ in="./hosts_list.*" && out="./adblock_dns.rsc" && host='127.0.0.1'; echo "/ip dns static" > $out && grep '127.0.0.1 ' $in | grep -v '^#' | cut -d' ' -f 2 | sort -u | grep . | sed "s/^/add address=$host name=/" >> $out && rm -f $in; wc -l $out;

    Да, надо бы использовать регулярку и вообще всё переделать, но самое главное — я передал тебе свою мысль, дальше дело за тобой

На выходе у нас получится файл adblock_dns.rsc, который не лишним будет дополнительно проверить на корректность содержимого.

Импортируем в MikroTik

  1. Скачиваем списки и аккуратно складываем их под именами ./hosts_list.1, ./hosts_list.2 и т.д.:
    $ src=('http://pgl.yoyo.org/adservers/serverlist.php?hostformat=hosts&showintro=0&mimetype=plaintext' 'https://adaway.org/hosts.txt'); i=0; for file in ${src[*]}; do i=$((i+1)); wget --no-check-certificate -O "./hosts_list.$i" "$file"; done;
  2. Грепаем всё что начинается на '127.0.0.1 ', удаляем комменты, оставляем только имена доменов, убираем дубликаты, убираем пустые строки и оформляем каждый домен в виде команды для импорта:
    $ in="./hosts_list.*" && out="./adblock_dns.rsc" && host='127.0.0.1'; echo "/ip dns static" > $out && grep '127.0.0.1 ' $in | grep -v '^#' | cut -d' ' -f 2 | sort -u | grep . | sed "s/^/add address=$host name=/" >> $out && rm -f $in; wc -l $out;

    Да, надо бы использовать регулярку и вообще всё переделать, но самое главное — я передал тебе свою мысль, дальше дело за тобой

Импортируем в MikroTik

Для того, чтобы импортировать полученный файл, мы цепляемся к маршрутизатору по ftp, заливаем adblock_dns.rsc, после чего цепляемся по ssh или открываем терминал, в котором выполняем:

  1. Делаем резервную копию (полученный бэкап лучше сохранить у себя на машине):
    /system backup save
  2. Если у тебя в таблице нет важных маршрутов, то можем грохнуть все имеющиеся записи:
    /ip dns static remove [/ip dns static find]
  3. Импортируем загруженный файл:
    /import adblock_dns.rsc
  4. Убираем за собой:
    /file remove adblock_dns.rsc

Теперь можешь (опционально) перезагрузить MikroTik, проверить корректность получения адресов DNS серверов по DHCP и попытаться открыть какой-либо ресурс, который ранее был наводнен рекламой — её должно стать ощутимо меньше.

Эмпирически доказано что при импортировании ~5500 записей Mikrotik hAP lite (650MHz @ RAM 32 Mb) встает почти колом при попытке в GUI открыть таблицу статических маршрутов. Перезагрузка помогает

Автоматизация

Один из простейших вариантов автоматизации — скрипт на баше, который по крону поддерживает в актуальном состоянии adblock_dns.rsc, находящийся в открытом доступе по, скажем, ftp. Его основа была уже описана выше, осталось только оформить его по твоему усмотрению (необходима отдельная машина).

Ещё один вариант — это использование MetaRouter на самом или соседнем MikroTik-е, на котором установлен тот же OpenWRT (избавляемся от необходимости в отдельной машине; этот вариант не расписан подробно за неимением достойного MikroTik-а под руками).

Второй скрипт (на MikroTik) забирает его (adblock_dns.rsc), делает бэкап и, если и файл скачался успешно, и бэкап сохранился успешно, его импортирует, предварительно (внимание) грохнув все имеющиеся маршруты:

:local hostScriptUrl "ftp://user:login@ftp_host:21/adblock_dns.rsc";

:local scriptName "adblock_dns.rsc";
:local backupFileName "before_stopad";
:local logPrefix "[StopAD]";

do {
 /tool fetch mode=ftp url=$hostScriptUrl dst-path=("./".$scriptName);
 :if ([:len [/file find name=$scriptName]] > 0) do={
   /system backup save name=$backupFileName;
   :delay 1s;
   :if ([:len [/file find name=($backupFileName.".backup")]] > 0) do={
     /ip dns static remove [/ip dns static find];
     /import file-name=$scriptName;
     /file remove $scriptName;
     :log info "$logPrefix AD block script imported, backup file (\"$backupFileName.backup\") created";
   } else={
     :log warning "$logPrefix Backup file not created, importing AD block script stopped";
   }
 } else={
   :log warning "$logPrefix Backup file not downloaded, script stopped";
 }
} on-error={
 :log warning "$logPrefix AD block script download FAILED";
};

Бонус

А что делать, если у тебя дома/офисе/гараже стоит MikroTik и хочется или просто порезать рекламу, или автоматизировать обновление хостов, не поднимая никакие метароутеры и хосты с файлами по ftp, вот чтоб просто и без заморочек?
Правильно, нужно чтобы это поднял кто то за тебя. И в качестве бонуса — такая штука уже поднята.

Смысл заключается в следующем — тебе достаточно перейти на нужную страницу, указать свои настройки и получить URL, по которому будет доступен скрипт с указанными тобой настройками. Там же будет предоставлен и исходник готового скрипта для тебя. Возможности, которые реализованы на данный момент:

  • Выбор из списка публичных файлов-хостов (спасибо AdAway для Android);
  • Хочется указать свои источники? Без проблем! (можно, например, указать три публичных хост-файла и два своих, расположенных на том-же gist.github.com, получив таким образом довольное удобное средство управления статическими маршрутами на подопечных маршрутизаторах);
  • Настраиваемый адрес (IP v4) перенаправления;
  • Указание ограничения (лимита) количества записей в итоговом скрипте (для того чтоб «случайно» не положить «слабую» железку);
  • Указание своих маршрутов (будут просто добавлены первыми в генерируемый скрипт);
  • Возможность указания исключений — нужные домены никогда не будут «заблокированы»;
  • Довольно удобная генерация готового скрипта для MikroTik;

Парсер написан на PHP (потребует php5-curl), лицензия MIT, исходники доступны по ссылке mikrotik-hosts-parser. Сколько сервис проживет — не берусь загадывать, но надеюсь что достаточно долго. 

Ссылочки:

Адрес: stopad.cgood.ru
Резервная площадка: stopad.kplus.pro

Материалы: один и два