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

Перед тем, как приступить к описанию моего опыта работы с программой, оговорюсь, что я не являюсь специалистом в сфере информационных технологий, поэтому буду особо признателен коментариям от людей, компетентных в данной области.

E2guardian является продолжением проекта DansGuardian, поэтому информацию, в том числе на Habr (ссылка, ссылка, ссылка), посвященную настройке DansGuardian во многом можно перенести и на e2guardian. К сожалению, DansGuardian не поддерживается с 2013 года, а официальный сайт был удален вместе с размещенными на нем материалами. В то же время информационное наполнение справочной системы e2guardian не настолько обширное, как её предтечи.

E2guardian работает под управлением ОС Linux, что ограничивает его применение в условиях как преобладания ОС Windows на персональных компьютерах, так и использования преимущественно мобильных устройств для доступа в Internet. Тем не менее, наличие выделенного proxy-сервера с настроенной аутентификацией пользователей (разработчики e2guardian рекомендуют использовать Squid, который может работать, например, совместно с Kerberos) и принудительным перенаправлением соединений всех локальных устройств на него (см. материал на Youtube), а также возможность установки в контейнер, позволяет существенно расширить диапазон использования e2guardian. В этой статье я рассмотрю только вариант локальной установки и базового конфигурирования программы под Debian 11.

Установка E2guardian

Версия программы 5.3.4 для Debian 11 присутствует в официальном репозитории (предполагается, что учетная запись, под которой будет работать ребенок имеет ограниченные права доступа, без возможности администрирования):

~$ sudo apt-get install e2guardian

При тестировании, однако, оказалось, что даже с рекомендованными настройками не работает фильтрация информации на русском языке. У версии с сайта разработчика (ссылка на момент написания статьи 5.4.5) этот недостаток был устранён.

В документации по DansGuardian большая часть информации относится к работе с HTTP, в то время, как сейчас в основном используется HTTPS. Это делает необходимым использование перехвата трафика (Man-In-The-Middle) с подменой сертификата. DansGuardian и e2guardian до версии 5 нуждались в прокси-сервере, однако сейчас программа справляется с этой задачей самостоятельно. Перед дальнейшей настройкой необходимо убедиться, что e2guardian скомпилирован с поддержкой MITM:

~$ sudo e2guardian -version | grep -i ‘enable-sslmitm=yes’

а также, что программа успешно запущена

~$ sudo service e2guardian status

и производит мониторинг заданных портов (по умолчанию 8080 и/или 8443)

~$ sudo netstat -lntup | grep e2guardian

или

~$ sudo ss -lnup | grep e2guardian

Далее используя openssl:

~$ sudo apt-get install openssl

генерируем приватный ключ для корневого CA сертификата,

~$ openssl genrca 4096 > private_root.pem

корневой CA сертификат (при вводе запрашиваемых данных в графе “Common name” следует ввести адрес прокси-сервера, который планируется использовать (в случае локальной установки без прокси-сервера - 127.0.0.1))

~$ openssl req -new -x509 -days 3650 -key private_root.pem -out my_rootCA.crt

и публичный ключ.

~$ openssl genrca > private_cert.pem

Cоздаем директорию для их хранения

~$ sudo mkdir -p /etc/e2guardian/ssl/cert

и копируем туда ключи и сертификат:

~$ sudo mv private_root.pem /etc/e2guardian/ssl
~$ sudo mv my_rootCA.crt /etc/e2guardian/ssl
~$ sudo mv private_cert.pem /etc/e2guardian/ssl

Владельцем директории устанавливаем пользователя и группу e2guardian:

~$ sudo shown -R e2guardian. /etc/e2guardian/ssl

Конфигурирование E2guardian

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

~$ sudo service e2guardian restart
~$ sudo service e2guardian status

В основном файле конфигурации:

~$ sudo nano /etc/e2guardian/e2guardian.conf

надо снять комментарии и модифицировать следующие параметры:

loglevel = 3

уровень 3 - документирование всех запросов

filterports = 8080

порт, мониторинг которого будет проводить e2guardian. На него необходимо перенаправить трафик в настройках прокси-сервера в Firefox.

weightedphrasemode = 1

параметр “1” означает, что при анализе страниц программа присваивает найденным в weightedphraselistсписке словам весовые коэффициенты, которые суммируются. При достижении порогового значения страница будет заблокирована. Параметр “2” означает блокирование страницы при единственном упоминании слов из списков на ней (что, на мой взгляд, эквивалентно включению слова в список bannedphraselist).

phrasefiltermode = 2

анализ страниц как вместе с разметкой, так и без неё.

preservecase = 2

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

hexdecodecontent = on

HEX кодировка всех символов для фильтрации страниц с разными кодировками. Необходим для корректной работы с символами, отличными от латиницы.

forcequicksearch = on

Замена стандартного алгоритма DFA, некорректно работающего с Unicode.

reverseaddresslookups = on

в случае указания в строке запроса браузера IP адреса программа проверяет его доменное имя и сверяет его со списками блокировки

maxcontentfiltersize = 2048

Установка размера фильтруемого документа. В случае, если ссылка на странице указывает на бинарный файл, ошибочно помеченый как текст, будет проанализировано только maxcontentfiltersize его содержания. С другой стороны, эта настройка помогает анализировать страницы, имеющие большой размер (например, Youtube).

enablessl = on

Включение SSL,

cacertificatepath = '/etc/e2guardian/ssl/my_rootCA.crt'

заданные на предыдущем этапе пути к файлам сертификата,

caprivatekeypath = '/etc/e2guardian/ssl/private_root.pem'

публичного и

certprivatekeypath = '/etc/e2guardian/ssl/private_cert.pem'

частного ключей, а также

generatedcertpath = '/etc/e2guardian/ssl/generatedcerts'

путь к генерируемым сертификатам.

В случае использования прокси-сервера:

proxyip = XXX.XXX.XXX.XXX

proxyport = 3128

IP адрес и порт прокси-сервера.


Далее необходимо задать настройки для отдельных групп пользователей в файле e2guardianf1.conf. Я рассмотрю случай только для одной группы, но если их несколько, соответствующие параметры указываются отдельно для каждой в файлах e2guardianf1.conf и examplef1.story для первой группы, e2guardianf2.conf и examplef2.story - для второй итак далее. Кроме того необходимо настроить механизм аутентификации пользователей и внести информацию об их принадлежности к той или иной группе в файл etc/e2guardian/listsfiltergrouplist.

В файле

~$ 	sudo nano /etc/e2guardian/e2guardianf1.conf

необходимо снять комментарии и модифицировать следующие параметры:

указание путей к спискам фильтрации, в частности

bannedsitelist = '/etc/e2guardian/lists/bannedsitelist'

список сайтов, подлежащих блокировке (подробнее см. ниже),

bannedphraselist = '/etc/e2guardian/lists/bannedphraselist'

список слов, приводящих к немедленной блокировке страницы,

weightedphraselist = '/etc/e2guardian/lists/weightedphraselist'

список слов, оценивающихся по весовым коэффициентам (подробнее см. ниже),

exceptionphraselist = '/etc/e2guardian/lists/exceptionphraselist'

список слов, понижающих весовые коэффициенты.

textmimetypes = 'application/xhtml+xml,application/xml,application/json,application/javascript,application/x-javascript'

анализ данных, отличных от простых текстовых. Параметр необходим, например, для фильтрации запросов в некоторых поисковых системах.

fileextlist = 'name=bannedextension,messageno=900,path=/etc/e2guardian/lists/bannedextensionlist'

mimelist = 'name=bannedmime,messageno=800,path=/etc/e2guardian/lists/bannedmimetypelist'

типы файлов и данных, запрещенных к скачиванию

weightedphrasemode = 1

параметр задается для отдельных групп и превалирует над таковым файла e2guardian.conf,

naughtynesslimit = 50

пороговое значение, при превышении которого страница будет заблокирована

sslsiteregexplist = 'name=searchterms,path=/etc/e2guardian/lists/sslsiteregexplist'

принудительное переключение поисковых систем, в том числе Youtube, в режим безопасного поиска. К сожалению, не смотря на наличие семейного режима в Yandex (213.180.193.56), я не смог настроить e2guardian для работы с этим сервисом.

sslmitm = on

включение механизма MITM для SSL

mitmcheckcert = on

указание на проверку сертификатов при перехвате MITM


Настройка некоторых отдельных списков:

Список сайтов, запрещенных к просмотру:

~$ sudo nano /etc/e2guardian/lists/bannedsitelist

может содержать как непосредственно адреса блокируемых сайтов, так и ссылки на списки таких сайтов, размещенные в соответствующих директориях. Обновляемые черные списки для Dansguardian/e2guardian по различным тематикам можно найти по этому адресу.

Ограничение времени доступа также можно указать в этом файле. Стоит отметить, что указываемое время будет относиться ко всем ресурсам, отмеченным в bannedsitelist, что не всегда удобно. Обойти это затруднение можно разместив времена доступа и списки сооответствующих сайтов в дополнительных конфигурационных файлах. Например, для ограничения времени доступа к сайту https://www.loremipsum.com c 17:30 до 19:30 с понедельника по пятницу необходимо добавить в bannedsitelist строку

.Include</etc/e2guardian/lists/timedbannedsitelist1>

затем создать соответствующий файл

~$ sudo nano /etc/e2guardian/lists/timedbannedsitelist1

и указать в нем время и ресурс (символ # перед time должен присутствовать)

#time: 17 30 19 30 01234

loremipsum.com

Список слов, оценивающихся по весовым коэффициентам

~$ sudo nano /etc/e2guardian/lists/weightedphraselist

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

<комар>,<50> - добавляет +50 к сумме баллов оцениваемой страницы за каждое появление любого слова, содержащего “комар”, включая комариный, накомарник

< комар>,<50> - добавляет +50 к сумме баллов оцениваемой страницы за каждое появление любого слова, начинающегося с “комар”, например, комариный

< комар >,<50> - добавляет +50 к сумме баллов оцениваемой страницы за каждое появление слова “комар”, игнорируя остальные однокоренные слова.

В русскоязычном сегменте Internet еще иногда встречаются сайты, использующие кодировки отличные от UTF-8, поэтому списки слов для фильтрации следует создать сначала в UTF-8 и затем конвертировать их в KOI-8R и WIN1251:

~$ iconv -f UTF-8 -t WINDOWS-1251 weighted_russian_utf8 > weighted_russian_1251
~$ iconv -c -f UTF-8 -t KOI8-R weighted_russian_utf8 > weighted_russian_koi8r

поместить созданные списки в соответствующие директории, например

~$	sudo mv .weighted_russian_utf8	/etc/e2guardian/lists/phraselists/badwords/weighted_russian_utf8
~$ 	sudo mv	.weighted_russian_1251	/etc/e2guardian/lists/phraselists/badwords/weighted_russian_1251
~$ 	sudo mv	.weighted_russian_koi8r /etc/e2guardian/lists/phraselists/badwords/weighted_russian_koi8r

и указать к ним путь в weightedphraselist:

~$ sudo nano /etc/e2guardian/lists/weightedphraselist

#Bad Words - swearing
.Include</etc/e2guardian/lists/phraselists/badwords/weighted_russian_utf8>
.Include</etc/e2guardian/lists/phraselists/badwords/weighted_russian_koi8r>
.Include</etc/e2guardian/lists/phraselists/badwords/weighted_russian_1251>


Список слов, понижающих весовые коэффициенты

exceptionphraselist = '/etc/e2guardian/lists/exceptionphraselist'

где можно указать, например, что если на одной странице находятся слова “грудь” и “медицинский” то весовой коэффициент этого словосочетания будет отрицательным, в отличие от случая, когда последнее слово отсутствует.

< грудь ><10>

< грудь >,< медицинский ><-10>

Список сайтов, содержимое которых не фильтруется (белый список):

~$ sudo nano /etc/e2guardian/lists/exceptionsitelist

В этот список влючаются заведомо безопасные ресурсы, особенно те, перехват информации которых нежелателен (банковские сервисы и проч.). Стоит отметить, что задания только доменного имени сайта нередко оказывается недостаточно для предоставления полноценного доступа к нему. В некоторых случаях (например, Office365) производитель web-сервиса может предоставить список доменных имен, доступ к которым необходим для нормального функционирования сервиса. В остальных случаях URL адреса для сайтов, включаемых в белый список можно определить встроенными средствами Firefox: Firefox → Tools → Browser Tools → Web Developer Tools → Network monitor (Ctrl+Shift+E) доменные имена отображаются в поле Domain: копируем те из них, которые необходимы для нормальной работы рассматриваемого сайта.

Если, как правило, на первых порах работы с Internet, возникнет необходимось ограничения доступа в сеть только этим списком сайтов, то помимо собственно его составления, следует модифицировать файл

~$ 	sudo nano /etc/e2guardian/examplef1.story

убрав комментарии в следующих строках

function(checkblanketblock)

if(true,,502) return setblock


function(sslcheckblanketblock)

if(true,,506) return setblock


Теперь после всех внесенных изменений можно перезагрузить сервис e2guardian

~$ sudo e2guardian restart

и убедиться в его корректном функционировании.

~$ sudo e2guardian status
~$ sudo netstat -lntup | grep e2guardian

Конфигурирование Firefox (для версии >60)

(ссылка):

  1. импортируем сертификат, созданный на предыдущем этапе: Firefox →Settings → Privacy and Security → Security → View Certificates → Import → выбрать my_rootCA.crt → Open

  2. в директории /usr/lib/firefox-esr/distribution создаем файл policies.json

    ~$ sudo nano /usr/lib/firefox-esr/distribution/policies.json

  3. в котором настраиваем перенаправление соединений на соответствующий порт прокси-сервера и определяем правила доступа к функциям Firefox:

 	{
 	  "policies": {
 	    "Proxy": {
 	      "Mode": "manual",
 	      "Locked": true,
 	      "HTTPProxy": "127.0.0.1:8080",
 	      "UseHTTPProxyForAllProtocols": true,
 	      "Passthrough": "<local>",
 	      "AutoLogin": false,
 	      "UseProxyForDNS": false
 	    },
 	    "Certificates": {
 	      "ImportEnterpriseRoots": true
 	    }
 	  }
 	}

Если настройка произведена верно, то после перезагрузки Firefox система мониторинга должна выдавать ожидаемые результаты.

Как можно заметить, конфигурирование гибкой системы анализа содержания web-страниц — достаточно времязатратное занятие. Помимо этого, нерешенными на момент написания этой статьи, остались следующие вопросы:

  • настройка работы e2guardian с антивирусным сканером clamd

  • установка запрета на регистрацию на различных сервисах (форумы, чаты)

  • настройка браузера, отличного от Firefox

  • переключение yandex.ru и mail.ru в защищенный режим поиска

Тем не менее, результат в сочетании с доступностью данного решения, по моему мнению, стоил потраченных усилий. Благодарю за внимание и буду рад продуктивным комментариям.

Комментарии (2)


  1. Javian
    18.11.2022 06:45

    Имхо для многих будет проще рассмотреть вариант использования openwrt роутера с Adblock


  1. Dry1d
    18.11.2022 12:20

    В Гугл хром немножко по другому: нужно напрямую в систему установить сертификат (для windows) и настроить ОС на использование прокси сервера