Page 1 of 6 123 ... LastLast
Results 1 to 15 of 80

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

  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 18:36. Reason: Зачем мой пост перенесли сюда?

  2. #2
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Quote Originally Posted by ryzhov_al View Post
    стоит ли браться за портирования IPv6 CARE на наш роутер?
    А ты можешь привести хоть одну open source прогу, которая принципиально не поддерживает и не будет поддерживать IPv6 и должна крутиться на роутере?
    IMHO это больше для древних проприетарных приложений.

    P.S. По-моему, более интересно иметь на роутере dnscrypt-proxy

  3. #3
    Quote Originally Posted by lly View Post
    P.S. По-моему, более интересно иметь на роутере dnscrypt-proxy
    Видимо, ты подумал слишком громко С сегодняшнего дня, цитирую:
    DNSCrypt now supports uclibc-based systems, iOS, and Win32.

  4. #4
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Quote Originally Posted by ryzhov_al View Post
    Видимо, ты подумал слишком громко С сегодняшнего дня, цитирую:
    DNSCrypt now supports uclibc-based systems, iOS, and Win32.
    Добавишь 0.9.3 в свой репозиторий?

    P.S. С этим обсуждением наверное надо переезжать в тему Переход на новый репозиторий OpenWRT с Optware

  5. #5
    Quote Originally Posted by lly View Post
    DNSCrypt now supports uclibc-based systems, iOS, and Win32.
    Добавишь 0.9.3 в свой репозиторий?
    Готово, r386.

    Для чего это нужно можно почитать здесь. dnscrypt-proxy лучше использовать совместно с имеющимся в прошивке dnsmasq по двум причинам:
    • во-первых он не умеет кешировать DNS-запросы,
    • во-вторых, хочется оставить работоспособным весь имеющийся функционал по разрешению локальных DNS-имён.

    Для того, чтобы dnsmasq не пользовался провайдерскими DNS-ами из /etc/resolv.conf, обращался исключительно к dnscrypt-proxy и при этом сохранил весь имеющийся функционал, необходимо перезапустить его с ключами:
    Code:
    $ killall dnsmasq && dnsmasq --no-resolv --server=127.0.0.1#65053
    На что dnsmasq помурзится в логе:
    Code:
    22:06:12 12-03-2012 (warning|daemon|dnsmasq) dnsmasq[1111]: warning: ignoring resolv-file flag because no-resolv is set
    На этом этапе можно проверить, что DNS-имена на компьютере разрешаться не будут, следовательно, перестали использоваться провайдерские DNS-серверы.
    Далее необходимо запустить dnscrypt-proxy:
    Code:
    $ dnscrypt-proxy --local-port=65053 --user=nobody --daemonize
    Признаком нормальной работы будут строчки syslog'а:
    Code:
    22:04:16 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Generating a new key pair
    22:04:16 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Done
    22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Server certificate #1323392947 received
    22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: This certificate looks valid
    22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: Server key fingerprint is E07C:5F90:03C2:D764:A9FC:9A1E:6633:632A:0FE0:B1C5:5EF9:894A:FC7A:BA18:4A62:462E
    22:04:17 12-03-2012 (info|daemon|dnscrypt-proxy) dnscrypt-proxy[883]: dnscrypt-proxy is ready: proxying from [127.0.0.1] to [208.67.220.220]
    и нормальное разрешение DNS-имён для компьютеров локалки.

    Собранный бинарник весит 416К, зависит исключительно от библиотек uClibc и при работе занимает памяти:
    Code:
    $ pmap -d `pidof dnscrypt-proxy` | grep private
    mapped: 1860K    writeable/private: 460K    shared: 0K
    Из которой большая часть приходится на кучу:
    Code:
    $ cat /proc/`pidof dnscrypt-proxy`/smaps | awk 'NR%8==1,NR%8==3'
    ...
    555c2000-556b1000 rwxp 555c2000 00:00 0          [heap]
    Size:                956 kB
    Rss:                 120 kB
    Я боялся, что от всех этих алгоритмов шифрования по эллиптическим кривым наш процессор стихами заговорит, но нет, даже при небольшом провокационном "шторме" DNS-запросов процесс dnscrypt-proxy потреблял не более 2% ресурсов CPU. Задержек в разрешении DNS-имён по первому попавшемуся DNS-бенчмарку не выявлено.

    Quote Originally Posted by lucky:) View Post
    Поправьте ссылку на "Buildroot tech.reference", там
    Спасибо за внимательность.
    Last edited by ryzhov_al; 18-06-2012 at 14:33. Reason: dnscrypt-proxy больше не зависит от libssp из тулчейна. Fixed in r390

  6. #6
    Join Date
    Oct 2009
    Posts
    529
    Blog Entries
    1

    Thumbs up adsuck + dnsmasq

    Quote Originally Posted by ryzhov_al View Post
    На роутере adsuck можно использовать автономно, "придушив" DNS-сервис dnsmasq, либо совместно с dnsmasq. Детали расскажу позже, если они будут кому-то интересны.
    Интересно про "совместно с dnsmasq" и, вероятно, с dnscrypt (как заработает)

  7. #7
    Quote Originally Posted by MercuryV View Post
    Интересно про "совместно с dnsmasq" и, вероятно, с dnscrypt (как заработает)
    Абсолютно также: запускаем adsuck на нестандартном порту, например 65055, а dnsmasq перезапускаем:
    Code:
    $ killall dnsmasq && dnsmasq --no-resolv --server=127.0.0.1#65055
    В случае тройной связки dnsmasq + adsuck + dnscrypt тоже аналогично. Выбор порядка соединения звеньев такой цепочки не велик: наружу должен "смотреть" dnscrypt, в локалку - dnsmasq, между ними - adsuck.

  8. #8
    Я на кинетике блокирую так
    Code:
    iptables -I FORWARD -s 192.168.1.34-192.168.1.254 -m string --string "vkontakte.ru" --algo kmp --to 65535 -j DROP
    Можно прикрутить парсер к https://easylist-downloads.adblockplus.org/easylist.txt
    DNS хорошо, но их обойти легко. В школе и организации - не вариант.
    Last edited by AndreyUA; 13-03-2012 at 06:12.
    ASUS RT-N15U

  9. #9
    Quote Originally Posted by AndreyUA View Post
    Я на кинетике блокирую так
    Code:
    iptables -I FORWARD -s 192.168.1.34-192.168.1.254 -m string --string "vkontakte.ru" --algo kmp --to 65535 -j DROP
    Можно прикрутить парсер к https://easylist-downloads.adblockplus.org/easylist.txt
    Code:
    $ wget https://easylist-downloads.adblockplus.org/easylist.txt -O - | wc -l
    17456
    17 тысяч строк в iptables? Боюсь, летать будет низенько.
    Quote Originally Posted by AndreyUA View Post
    DNS хорошо, но их обойти легко. В школе и организации - не вариант.
    Если на предприятии или в школе у всех есть администраторские права, то тогда да, легко.

    dansguardian, напомню, как раз для пользования в школах рекомендован.
    Last edited by ryzhov_al; 13-03-2012 at 08:42. Reason: forgotten [/QUOTE]

  10. #10
    Ну с https://easylist-downloads.adblockplus.org/easylist.txt я, конечно, погорячился Но у решения c iptables есть несколько преимуществ: обойти намного сложнее, чем с DNS. Можно создать правило для определенного айпи или мак адреса.

    Если на предприятии или в школе у всех есть администраторские права, то тогда да, легко.
    Если на примере вконтакта, то проблема решается вот так
    ASUS RT-N15U

  11. #11
    Quote Originally Posted by AndreyUA View Post
    Если на примере вконтакта, то проблема решается вот так
    Угу, и, судя по отчёту касперского, в придачу можно ещё и лишиться своих паролей с этими анонимайзерами...

  12. #12
    Join Date
    Nov 2006
    Location
    Russia, Moscow
    Posts
    3,640
    Возможно еще помог бы вариант Transparent proxy (tproxy), но я сильно не уверен что наша коробочка потянет полноценный прокси-сервер.

  13. #13
    Join Date
    Oct 2009
    Posts
    529
    Blog Entries
    1
    Quote Originally Posted by ryzhov_al View Post
    В случае тройной связки dnsmasq + adsuck + dnscrypt тоже аналогично. Выбор порядка соединения звеньев такой цепочки не велик: наружу должен "смотреть" dnscrypt, в локалку - dnsmasq, между ними - adsuck.
    Не смог найти, как заставить adsuck ресолвить через dnscrypt на нестандартном порту.
    Согласно man nameserver задается через -f resolv.conf , причем
    Note: due to the way ldns works one can NOT specify a port in the resolv.conf file.

  14. #14
    Join Date
    Mar 2009
    Location
    Default City
    Posts
    2,695
    Blog Entries
    4
    Quote Originally Posted by AlexeyS View Post
    Угу, и, судя по отчёту касперского, в придачу можно ещё и лишиться своих паролей с этими анонимайзерами...
    Так используйте TOR, любимое у школоло развлечение, особенно если родители любят закрывать "правильные" сайты )

  15. #15
    Quote Originally Posted by TReX View Post
    Так используйте TOR, любимое у школоло развлечение, особенно если родители любят закрывать "правильные" сайты )
    Дык, мне это не надо, у меня и так всё открыто на рабочем месте. А для скрытия логов своих похождений использую ssh до домашнего роутера ;-)

Page 1 of 6 123 ... LastLast

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
  •