Использование программы 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/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *