Использование программы E2guardian для локального мониторинга доступа в Internet

Моя цель - предложение широкого ассортимента товаров и услуг на постоянно высоком качестве обслуживания по самым выгодным ценам.

Перед современными родителями рано или поздно встаёт проблема регулирования отношений между ребенком и 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” означает, что при анализе страниц программа присваивает найденным в списках словах весовые коэффициенты, которые суммируются. При достижении порогового значения страница будет заблокирована. Параметр “2” означает блокирование страницы при единственном упоминании слов из списков на странице.

phrasefiltermode = 2

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

preservecase = 2

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

hexdecodecontent = on

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

forcequicksearch = on

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

reverseaddresslookups = on

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

maxcontentfiltersize = 2048

Установка размера фильтруемого документа. Используется как для предотвращения фильтрации больших бинарных файлов, ошибочно помеченых как текст, так и для страниц, имеющих большой размер (например, 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, e2guardianf2.conf и так далее, а также examplef1.story, 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 в защищенный режим поиска

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

Источник: https://habr.com/ru/post/700108/


Интересные статьи

Интересные статьи

В конце декабря 2020 года я написал несколько статей на Хабре по своему опыту использования GitHub в обучении студентов (ссылки на них будут в конце сей статьи).Сегодня же хочу рассказать об автоматиз...
Привет, Хабр! Продолжаем серию статей, посвящённых методам множественного доступа в беспроводной связи. В первой части мы рассмотрели методы частотно-временного разделения, во второй части – неортогон...
Очереди сообщений используются для выполнения: отложенных операций, взаимодействия сервисов между собой, «batch processing» и т.д. Для организации подобных очередей существуют специализирован...
Привет, Хабр! В данной статье, ориентированной на новичков, я бы хотел дать несколько советов по оптимизации использования приложением памяти устройства, дабы постоянно не получать OutOfMemory, а...
Предисловие Довольно часто пользователи, разработчики и администраторы СУБД MS SQL Server сталкиваются с проблемами производительности БД или СУБД в целом, поэтому весьма актуальным является мон...