Results 1 to 15 of 80

Thread: Фильтрация нежелательного контента (dnsmasq+adsuck+dnscrypt)

Threaded View

Previous Post Previous Post   Next Post Next Post
  1. #1

    Post Фильтрация нежелательного контента (dnsmasq+adsuck+dnscrypt)

    Детки подрастают, а в современной школе, по моим отцовским наблюдениям, гуглить приходится с первого класса. Учитывая возможности роутера выбор средств для фильтрации не велик:
    • либо DNS-spoofing, отрезающий доступ к определённым доменам,
    • либо URL\content-filtering, режущий html-контент по ключевым словам и\или релевантности.

    Далее расскажу про реализацию обоих способов программными средствами, которые мы пока в разговорах обходили.

    Первый способ менее ресурсоёмок, но режет более топорно. Простое "замыкание" нежелательного хоста на 127.0.0.1 записями в /etc/hosts заставляет браузер искать на локальном компьютере web-серврер и ждать от него ответа. Решение напрашивается довольно простое, наткнулся на него в ЖЖ: при разрешении доменного имени DNS-сервер на роутере должен мгновенно давать ответ NXDOMAIN, т.е. ответ о том, что домен не существует. Учитывая, что ОС\браузер кэширует ответы DNS-сервера (в т.ч. негативные), браузер не будет ожидать ответа от заблокированного домена ни при первом, ни при дальнейших обращениях. Под выполнение этих нужд заточен adsuck - DNS сервер, которому достаточно подсунуть свои hosts-файлы. Причём если записи будут содержать разрешение доменного имени на 127.0.0.1, то сервер будет давать ответ NXDOMAIN, если же ip-адрес в записи будет отличен от 127.0.0.1, то будет подставлен указанный ip-адрес. Так авторы adsuck предлагают опциональную защиту от подмены DNS-адреса для наиболее распространённых банковских и других "денежных" сайтов. На роутере adsuck можно использовать автономно, "придушив" DNS-сервис dnsmasq, либо совместно с dnsmasq. Детали расскажу позже, если они будут кому-то интересны. Мне было интересно узнать, как adsuck в связке с dnsmasq будет тормозить или ускорять загрузку web-страниц. В части ожидания разрешения DNS-имён по бенчмарку - никак. В части ускорения загрузки контента на канале в 20МБит/c субъективной разницы нет. Единственный минус - с помощью шквала DNS-запросов adsuck можно "завалить" так, что все его треды уйдут в <defunct>, а сам родительский процесс окажется через некоторое время в списках как zombie.

    Ещё один интересный вариант DNS-спуфинга - это использование сторонних сервисов, самостоятельно ведущих списки нежелательных ресурсов. К примеру, сервис OpenDNS, которым пользуется каждая третья школа в штатах. Сервис в варианте Home бесплатен, и, насколько я понял, достаточно прописать в /etc/resolv.conf общедоступные DNS-серверы сервиса для того, чтобы сервис начал работать. Этот вариант я самостоятельно не проверял, если у кого-то есть более развёрнутая информация - поделитесь.


    Варианты фильтрации контента по релевантности реализованы функционалом squid, privoxy и ещё рядом проксиков, включая DansGuardian, который рекомендован как СПО для использования в российском образовании. DansGuardian умеет отсевать контент по релевантности к эталонным "плохим" словам\фразам\картинкам, причём всё достаточно неплохо настраивается. В том числе, можно настраивать группы пользователей и применять к ним разную "силу" фильтрации. Всё это конечно здорово, но на роутере "летает" уже не так резво. Субъективно web-сёрфинг стал еле заментно подтормаживать, а фичу отсева "взрослых" картинок по цифровым подписям я вовсе не ощутил. Средства URL\content-фильтрации для роутера всё же тяжеловаты, но востребованы. Скажем, дома не десктопе в браузерах установлен всемогущий adBlock plus и все страницы выглядят красиво. Но на планшете после минуты созерцания странички на gismeteo.ru мои глаза начинают кровоточить - я уже успел позабыть о том, сколько там рекламы.


    Последнее замечание: последствия добавления большого и чорного списка в /etc/hosts. Смотрим размер кучи памяти у dnsmasq без подгрузки доп.записей в /etc/hosts:
    Code:
    $ cat /proc/`pidof dnsmasq`/smaps | awk 'NR%8==1,NR%8==2'
    ...
    00434000-00444000 rwxp 00434000 00:00 0          [heap]
    Size:                 64 kB
    Перезапускаем dnsmasq, вгружая 130.000-строчный host-файл. Смотрим размер кучи:
    Code:
    $ wc -l /opt/etc/adsuck/Hosts.pub
    130063 /opt/etc/adsuck/Hosts.pub
    $ killall dnsmasq
    $ dnsmasq --addn-hosts=/opt/etc/adsuck/Hosts.pub
    $ cat /proc/`pidof dnsmasq`/smaps | awk 'NR%8==1,NR%8==2'
    ...
    00434000-00cc8000 rwxp 00434000 00:00 0          [heap]
    Size:               8784 kB
    Приемлемо? И кстати, где надыбать качественный Hosts-файл для рунета? Желательно с вырезанием счётчиков\статистики.

    ЗЫ Давайте опустим холивар по поводу дуализма брони и снаряда. Ясно, что proxy можно отключить, но ответной мерой можно завернуть весь TCP:80 трафик на прокси с помощью iptables. Ясно, что URL-filtering иногда можно обойти, вводя вместо доменного имени ip-адрес, или используя URL-encoding. Речь не об этом.

    ЗЗЫ DansGuardian, adsuck, privoxy собраны для нового репозитория.
    Last edited by ryzhov_al; 30-01-2012 at 17:36. Reason: Зачем мой пост перенесли сюда?

Tags for this Thread

Posting Permissions

  • You may not post new threads
  • You may not post replies
  • You may not post attachments
  • You may not edit your posts
  •