Перед современными родителями рано или поздно возникает проблема регулирования отношений между ребенком и Internet. По-видимому, не существует единственного правильного подхода к её преодолению, однако, в моем понимании, он неизбежно комплексный и состоит из педагогического и, дополняющего его, технического компонентов. Найденное мной решение, программа e2guardian, позволяет существенно снизить вероятность случайной встречи ребенка с нежелательными материалами, а также подстраховать от непреднамеренной, но потенциально опасной активности (посещение фишинговых сайтов, скачивание инфицированых файлов). Перед тем, как приступить к описанию моего опыта работы с программой, оговорюсь, что я не являюсь специалистом в сфере информационных технологий, поэтому буду особо признателен коментариям от людей, компетентных в данной области. E2guardian является продолжением проекта DansGuardian, поэтому информацию, в том числе на Habr (ссылка, ссылка, ссылка), посвященную настройке DansGuardian во многом можно перенести и на e2guardian. К сожалению, DansGuardian не поддерживается с 2013 года, а официальный сайт был удален вместе с размещенными на нем материалами. В то же время информационное наполнение справочной системы e2guardian не настолько обширное, как её предтечи. E2guardian работает под управлением ОС Linux, что ограничивает его применение в условиях как преобладания ОС Windows на персональных компьютерах, так и использования преимущественно мобильных устройств для доступа в Internet. Тем не менее, наличие выделенного proxy-сервера с настроенной аутентификацией пользователей (разработчики e2guardian рекомендуют использовать Squid, который может работать, например, совместно с Kerberos) и принудительным перенаправлением соединений всех локальных устройств на него (см. материал на Youtube), а также возможность установки в контейнер, позволяет существенно расширить диапазон использования e2guardian. В этой статье я рассмотрю только вариант локальной установки и базового конфигурирования программы под Debian 11. Версия программы 5.3.4 для Debian 11 присутствует в официальном репозитории (предполагается, что учетная запись, под которой будет работать ребенок имеет  ограниченные права доступа, без возможности администрирования): При тестировании, однако, оказалось, что даже с рекомендованными настройками не работает фильтрация информации на русском языке. У версии с сайта разработчика (ссылка на момент написания статьи 5.4.5) этот недостаток был устранён. В документации по DansGuardian большая часть информации относится к работе с HTTP, в то время, как сейчас в основном используется HTTPS. Это делает необходимым использование перехвата трафика (Man-In-The-Middle) с подменой сертификата.  DansGuardian и e2guardian до версии 5 нуждались в прокси-сервере, однако сейчас программа справляется с этой задачей самостоятельно. Перед дальнейшей настройкой необходимо убедиться, что e2guardian скомпилирован с поддержкой MITM:  а также, что программа успешно запущена  и производит мониторинг заданных портов (по умолчанию 8080 и/или 8443) или  Далее используя openssl: генерируем приватный ключ для корневого CA сертификата, корневой CA сертификат (при вводе запрашиваемых данных в графе “Common name” следует ввести адрес прокси-сервера, который планируется использовать (в случае локальной установки без прокси-сервера - 127.0.0.1)) и публичный ключ.  Cоздаем директорию для их хранения и копируем туда ключи и сертификат: Владельцем директории устанавливаем пользователя и группу e2guardian: В случае, если необходимо осуществлять проверку содержимого страниц антивирусом, можно воспользоваться решением по умолчанию - ClamAV, однако сходным образом  настраивается и работа с другим антивирусным ПО. Для этого надо установить ClamAV: убедиться, что в директории /run/clamav/ присутствует файл clamd.ctl или clamd.sock и в файле убрать комментарий в строке clamdudsfile = '/run/clamav/clamd.ctl', а в случае, если в директории находится файл clamd.sock - заменить эту строку на clamdudsfile = '/run/clamav/clamd.sock' Также необходимо установить владельцем директории файлов журнала E2guardian clamav: Программа имеет массу настроек, которые достаточно подробно описаны в соответствующих конфигурационных файлах. Я коснусь лишь тех из них, которые необходимы для корректной работы с сайтами на русском языке (см. источник). Также рекомендую не вносить все изменения одновременно, а последовательно изменяя указанные параметры, проверять работоспособность сервиса: В основном файле конфигурации: надо снять комментарии и модифицировать следующие параметры: 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 адрес и порт прокси-сервера. Для корректной работы ClamAV необходимо убрать комментарии в следующих строках: contentscanner = '/etc/e2guardian/contentscanners/clamdscan.conf' daemongroup = 'e2guardian' daemonuser = 'e2guardian' В последней строке вместо 'e2guardian' необходимо указать 'clamav'. Это позволит e2guardian вести запись в файлы журнала /var/log/e2guardian. Далее необходимо задать настройки для отдельных групп пользователей в файле e2guardianf1.conf. Я рассмотрю случай только для одной группы, но если их несколько, соответствующие параметры указываются отдельно для каждой в файлах e2guardianf1.conf и examplef1.story для первой группы, e2guardianf2.conf и examplef2.story - для второй итак далее. Кроме того необходимо настроить механизм аутентификации пользователей и внести информацию об их принадлежности к той или иной группе в файл etc/e2guardian/listsfiltergrouplist. В файле необходимо снять комментарии и модифицировать следующие параметры: указание путей к спискам фильтрации, в частности 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> затем создать соответствующий файл и указать в нем время и ресурс (символ # перед time должен присутствовать) #time: 17 30 19 30 01234 loremipsum.com Список слов, оценивающихся по весовым коэффициентам Немного о правилах составления словарей, придерживаясь которых можно расширить охват нежелательных терминов, сохраняя приемлемый уровень ложноположительных срабатываний. <комар>,<50> - добавляет +50 к сумме баллов оцениваемой страницы за каждое появление любого слова, содержащего “комар”, включая комариный, накомарник    < комар>,<50> - добавляет +50 к сумме баллов оцениваемой страницы за каждое появление любого слова, начинающегося с “комар”, например, комариный    < комар >,<50> -  добавляет +50 к сумме баллов оцениваемой страницы за каждое появление слова “комар”, игнорируя остальные однокоренные слова. В русскоязычном сегменте Internet еще иногда встречаются сайты, использующие кодировки отличные от UTF-8, поэтому списки слов для фильтрации следует создать сначала в UTF-8 и затем конвертировать их в KOI-8R и WIN1251: поместить созданные списки в соответствующие директории, например и указать к ним путь в 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> Список сайтов, содержимое которых не фильтруется (белый список): В этот список влючаются заведомо безопасные ресурсы, особенно те, перехват информации которых нежелателен (банковские сервисы и проч.). Стоит отметить, что задания только доменного имени сайта нередко оказывается недостаточно для предоставления полноценного доступа к нему.  В некоторых случаях (например, Office365) производитель web-сервиса может предоставить список доменных имен, доступ к которым необходим для нормального функционирования сервиса. В остальных случаях URL адреса для сайтов, включаемых в белый список можно определить встроенными средствами Firefox: Firefox → Tools → Browser Tools → Web Developer Tools → Network monitor (Ctrl+Shift+E) доменные имена отображаются в поле Domain: копируем те из них, которые необходимы для нормальной работы рассматриваемого сайта. Если, как правило, на первых порах работы с Internet, возникнет необходимось ограничения доступа в сеть только этим списком сайтов, то помимо собственно его составления, следует модифицировать файл  убрав комментарии в следующих строках function(checkblanketblock) if(true,,502) return setblock function(sslcheckblanketblock) if(true,,506) return setblock  Теперь после всех внесенных изменений можно перезагрузить сервис e2guardian (ссылка): импортируем сертификат, созданный на 	предыдущем этапе: Firefox →Settings → Privacy and Security → Security → View Certificates → Import → выбрать 	my_rootCA.crt → Open  в директории /usr/lib/firefox-esr/distribution создаем файл policies.json ~$ 	sudo nano /usr/lib/firefox-esr/distribution/policies.json  в котором настраиваем перенаправление соединений на соответствующий порт прокси-сервера и определяем правила доступа к функциям Firefox:   	 и перезагружаем Firefox. Чтобы убедиться в корректном функционировании связки Firefox-E2guardian-ClamAV (особенно в отсутствии ошибок активации ClamAV через e2guardian) Если никаких ошибок нет, сначала необходимо протестировать работу e2guardian на сайтах с содержимым, подлежащим блокировке и убедиться, что система мониторинга выдает ожидаемые результаты. Для проверки работы ClamAV следует внимательно ознакомиться с инструкцией использования тестового заражённого файла доступного на https://www.eicar.org/download-anti-malware-testfile/ При попытке загрузки этого файла с указанной страницы должно появиться сообщение о блокировании инфицированного содержимого. В случае, если загрузка ZIP-файлов блокируется e2guardian, это можно временно отключить поставив в файле комментарии в строках fileextlist = 'name=bannedextension,messageno=900,path=/etc/e2guardian/lists/bannedextensionlist'mimelist = 'name=bannedmime,messageno=800,path=/etc/e2guardian/lists/bannedmimetypelist' перезагрузить e2guardian и снова попытаться загрузить тестовый файл. В этот раз причиной  блокировки должен быть указан инфицированный файл. После этого вышеуказанные комментарии необходимо убрать и снова перезагрузить e2guardian.  Как можно заметить, конфигурирование гибкой системы анализа содержания web-страниц — достаточно времязатратное занятие. Кроме того, нерешенными на момент написания этой статьи, остались следующие вопросы:  установка запрета на регистрацию на различных сервисах (форумы, чаты)  настройка браузера, отличного от Firefox  переключение yandex.ru и mail.ru в защищенный режим поиска Тем не менее, результат в сочетании с доступностью данного решения, по моему мнению, стоил потраченных усилий. Благодарю за внимание и буду рад продуктивным комментариям.