Родительский контроль в Ubuntu с помощью Dansguardian и Privoxy

Решаем проблему родительского контроля в Ubuntu с помощью Dansguardian и Privoxy

Я придерживаюсь мнения, что Ubuntu вполне себе подходит на роль user-friendly десктопной операционной системы.

Соответственно, считаю, что при покупке компьютеров и ноутбуков на стоимости лицензионной Windows вполне можно сэкономить, поставив бесплатную (открытую) ОС (вспомните, сколько, лет 5 назад, продавалось ноутов с Linux, и сколько сейчас).

Детям я купил неттоп Acer Aspire Revo R3700, который, наверное, сам по себе стоит отдельного обзора (двухъядерный Atom + Ion), прикрутил его сзади к монитору, благо оба поддерживают стандарт крепления VESA (получился этакий компактный моноблок), снес предустановленный Linpus и поставил Ubuntu 10.10

В принципе, и я, и мои дети были всем довольны — работает все достаточно шустро (тьфу-тьфу-тьфу), посёрфить в интернете, посмотреть фотки, послушать музыку, поиграть в детские и обучающие игры — для этого неттоп подходит, на мой взгляд, идеально. Единственное, что удручало, это баннеры на различных, даже детских (!), сайтах со всяким контентом (прежде всего, визуальным), от которого очень хотелось детей оградить.

Вот тут меня и постигло разочарование, когда узнал, что встроенного (штатного) родительского контроля в Ubuntu попросту нет. В Windows Vista и 7 — есть, есть много отдельных «виндовых» программ, например, Интернет Цензор (пробовал под Windows в свое время, в принципе, остался доволен).


А вот в Ubuntu с этим туго. Наткнулся в репозитарии на Gnome Nanny — поставил, потом снес. Выскакивают грозные предупреждения, что сейчас отключится интернет и выключится компьютер, но… ничего не происходит. Возможно, расчет был на сознательность детей (сарказм), хотя, скорее, я просто не разобрался. Правда, делал все по мануалу, а тратить недели на выяснение причин не хотелось.

Также сразу оговорюсь, что провайдер запрещает использование сторонних DNS, а то бы, возможно, я просто ограничился каким-либо OpenDNS, где, вроде бы, режется реклама и есть фильтр для взрослого контента.

Коротко о том, как построена моя домашняя сеть: есть роутер D-Link Dir-615, к нему по сетевому кабелю подключен основной домашний комп, а также медиаплеер Popcorn Hour A-110, по Wi-Fi — детский неттоп, iPad, нетбук, ноутбук, парочка смартфонов на андроиде, еще один медиаплеер WD TV Live и… вроде бы всё.

Возвращаясь к проблеме родительского контроля: наткнулся на программу под название Dansguardian, почитал, подумал, решил ставить.

Для экспериментов достал старенький EEE PC 701 4G (на всякий случай, может, кто не знает: цифра перед G означает всего лишь «ёмкость встроенной памяти (твердотельный накопитель) в гигабайтах», а не встроенный 4G модем), поставил на него Lubuntu 10.10 (кстати, Лубунту порадовала — нетребовательна к ресурсам, потому быстрая, привычная для тех, кто «после Windows», все железо заработало буквально «из коробки»):

После этого завел две учетные записи, одну [kid] (в квадратных скобках здесь и далее — обозначение учетной записи, которое вы можете выбрать по своему вкусу, где kid — учетная запись ребенка, parent — учетная запись родителя) и [parent]. [kid] — с правами пользователя, [parent] — с правами администратора.

Заходим под учетной записью ребенка, открываем терминал («Пуск» (хехе, а как иначе назвать кнопку на таскбаре в левом нижнем углу?) -> Стандартные -> LXTerminal)

Набираем (естественно, без квадратных скобок):

su [parent]

Вводим пароль. Далее:

sudo apt-get install -y privoxy dansguardian

Вводим пароль, следуем подсказкам на экране, после чего у вас должны поставиться, как Вы догадались, Dansguardian и Privoxy (нетяжелый прокси-сервер — через него, собственно, и будет работать Dansguardian).

Далее, на всякий случай, можно проверить, запущен ли privoxy, командой

sudo /etc/init.d/privoxy status

После этого надо настроить установленные программы, для этого правим конфигурационные файлы:

sudo leafpad /etc/privoxy/config

Ищем строку listen-address, приводим ее к следующему виду (не забываем убирать знак комментария #):

listen-address 127.0.0.1:8118

Ищем параметр accept-intercepted-requests и присваиваем ему значение 1:

accept-intercepted-requests 1

Всё, настройка прокси privoxy закончена, сохраняемся, выходим.

Далее настраиваем сам dansguardian:

sudo leafpad /etc/dansguardian/dansguardian.conf

В самом начале файла написано, что надо удалить строку UNCOMMITED, чтобы настройки вступили в силу. Удаляем ее. Далее ищем незакомментированную строку, начинающуюся со слова language и меняем ее:

language = 'russian-1251'

Это нужно, чтобы страница с шаблоном «Доступ запрещен» была на русском языке.

Ищем и меняем следующие строки (если в файле прописано по умолчанию так же, то менять, естественно, не нужно):

filterport=8080

proxyip=127.0.0.1

proxyport-8118

Сохраняем, закрываем. Далее перезапускаем обе программы:

sudo service dansguardian force-reload
sudo service privoxy force-reload

Далее запускаем браузер по умолчанию (предустановленный Chromium), заходим на какой-нить playboy.com и видим… что он успешно грузится, как и раньше! Чтобы не рвать волосы на голове (как пару дней подряд делал это я), читайте дальше.

В общем, так и должно быть, потому что мы не поменяли в браузере настройки прокси-сервера. Привычными кликами заходим в расширенные настройки Chromium («Ведь это тот же Хром!») и видим удручающую картину:

Все правильно, в Lubuntu нет «гуёвого» интерфейса настройки прокси-сервера. Как временное решение, пишем в терминале:

sudo chromium-browser --proxy-server=127.0.0.1:8080

Запустится браузер, зайдем на playboy.com и увидим такую картинку:

Урра! Но радость омрачается тем, что если мы перезапустим браузер, то настройки прокси слетят, а это не вариант. Да и ребенок, позврослев, научится обходить прокси-сервер, поставив какой-нибудь Firefox и убрав галочку напротив пункта «использовать настройки прокси-сервера». Значит нужен более надежный вариант.

И вот тут нам на помощь приходят iptables и ufw. Скажу сразу, что оставшиеся мои волосы чуть не поседели, пока дошел до правильных настроек всего этого хозяйства (понимаю, что кто-то посмеется над таким «ламерством»).

Итак, ufw (Uncomplicated Firewall) в Lubuntu включен, как я уже потом выяснил, по умолчанию. Потому выполняем следующее:

sudo leafpad /etc/ufw/before.rules

В конце файла, после COMMIT, со следующей строки вставляем такие строки:

# Rules for Dansguardian + Privoxy

*nat
:PREROUTING ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A OUTPUT -p tcp -m tcp –dport 80 -m owner –uid-owner root -j ACCEPT
-A OUTPUT -p tcp -m tcp –dport 80 -m owner –uid-owner [parent] -j REDIRECT –to-port 8118
-A OUTPUT -p tcp -m tcp –dport 8118 -m owner ! –uid-owner dansguardian -j REDIRECT –to-port 8080
-A OUTPUT -p tcp -m tcp –dport 80 -m owner ! –uid-owner privoxy -j REDIRECT –to-port 8080

# don’t delete the ‘COMMIT’ line or these rules won’t be processed
COMMIT

 

Сохраняем, закрываем, перезапускаем:

sudo ufw disable && sudo ufw enable

Все, теперь смышленый ребенок не сможет обойти прокси.

Дальше над чем стоит поработать:

  • настроить под себя страницу с шаблоном «Доступ запрещен» (например, найти забавную картинку со Смешариками и написать более жизнерадостный текст, что заходить на этот сайт «Низзя!»)
  • прошерстить внимательно каталог с dansguardian — там все подробно написано в комментариях в файлах, как и что настраивать
  • научиться составлять список плохих слов на русском (у dansguardian вроде как плохо с кодировками, отличными от utf-8, судя по форумам)
  • желательно найти уже в сети готовые списки плохих русских слов (чтобы не составлять самому и не изощряться в матерном языке)

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

С нетерпением жду комментариев — где, как не в них можно почерпнуть дополнительную полезную информацию, узнать много нового и как можно было сделать то же самое, только проще и лучше. Статью написал, в первую очередь, для себя (чтобы можно было зайти на Хабр и сверить подзабытые настройки) и для тех, кто так же, как и я, мучается с родительским контролем в Ubuntu.