Задача эта так и висела бы, наверное, в TODO листе, если бы не мобильное приложение Real Racing 3. Какое-то время я рубился в эти гоночки, и все было отлично, но в один прекрасный день я узрел на экране гигантский баннер, а потом охапку баннеров поменьше в разных местах. Этого я стерпеть не мог..
Но мне не хотелось ставить squid ради этого дела, я особо не исследовал, но там же, наверное, придется всем клиентам сети прокси настроить? Явно не мой путь.
Итак, дано: шлюз (роутер) под debian (с поднятым DNS bind9), XEN-виртуалка для веб-разработки (debian, с поднятым nginx).
Требуется: порезать рекламу на всем, что подключается к серверу дома, хоть по WiFi, хоть по проводу.
Достигнутый итог: нет рекламы в skype на десктопе и в телефоне, мобильных приложениях, браузере (AdBlock отключен).
А подробнее - далее.
Принцип затеи:
- поскольку DNS-запросы сети обслуживает личный bind9, то настраиваем ему гору доменных рекламных зон так, чтобы они указывали на наш вебсервер
- на вебсервере настраиваем vhost на отдельном IP и пусть отдает 204 заголовок (No Content)
Все. Теперь обращение любого приложения из сети за рекламой (например скайп лезет на rad.msn.com, но там еще нюансы есть, см.далее) пойдет через DNS-резолвинг на шлюзе, получит внутрисетевой адрес вебсервера (например 10.0.0.33) и полезет за рекламой туда, а там заготовленная дырка, которая либо отдает 204 No Content, либо empty_gif, как угодно.
BIND
Список "плохих" доменов в формате конфига bind можно получить тут: http://pgl.yoyo.org/adservers/Также удобно скачать hosts-файл по прямой ссылке и через инструмент конвертации преобразовать в конфиг bind - http://pgl.yoyo.org/adservers/hosts2bind.php
Удобно тем, что там можно задать путь к файлу зоны bind.
Конфиг кладется в bind, создается файл зоны (пример http://pgl.yoyo.org/adservers/null.zone.file), где вместо 127.0.0.1 пишется IP внутрисетевого вебсервера (10.0.0.33 например).
nginx
Почему IP отдельный? Чтобы знать, что все запросы к нему - это наши рекламные ловушки. Я прописал в XEN конфиге для виртуалки еще один сетевой интерфейс и создал в уже имеющемся nginx один vhost. Вот и вся канитель.В nginx надо прописать этот отдельный IP для vhost, пример listen 10.0.0.33:80
Также для скайпа нужно слушать HTTPS, как оно все поднимается, это уже другая тема.
Мой конфиг:
server {
listen 10.0.0.33:80;
listen 10.0.0.33:443 ssl;
ssl_protocols SSLv3 TLSv1;
ssl_certificate /etc/nginx/ssl/cert.pem;
ssl_certificate_key /etc/nginx/ssl/cert.key;
server_name def103;
access_log /var/log/nginx/antiad.access.log main;
location / {
return 204; # no content
#empty_gif;
}
}
Теперь в логе antiad.access.log можно лицезреть поток говна, проходящего мимо ваших глаз.
Надо сказать список доменов не такой уж полный, мне пришлось поотлавливать руками и дописать еще с десяток доменов.
zone "marketgid.com" { type master; notify no; file "/etc/bind/db.antiad"; };
zone "mg.yadro.ru" { type master; notify no; file "/etc/bind/db.antiad"; };
zone "ad.ddestiny.ru" { type master; notify no; file "/etc/bind/db.antiad"; };
zone "pf.media-storage.org" { type master; notify no; file "/etc/bind/db.antiad"; };
zone "banerator.net" { type master; notify no; file "/etc/bind/db.antiad"; };
zone "mg.dt00.net" { type master; notify no; file "/etc/bind/db.antiad"; };
zone "rtb-media.ru" { type master; notify no; file "/etc/bind/db.antiad"; };
zone "betweendigital.com" { type master; notify no; file "/etc/bind/db.antiad"; };
Ссыль на файл hosts - http://pgl.yoyo.org/adservers/serverlist.php?showintro=0;hostformat=hosts
SOLVED
Комментариев нет:
Отправить комментарий