Pull to refresh

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

Reading time11 min
Views3.7K

Перед современными родителями рано или поздно возникает проблема регулирования отношений между ребенком и 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 genrsa 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 genrsa > 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 сhown -R e2guardian. /etc/e2guardian/ssl

В случае, если необходимо осуществлять проверку содержимого страниц антивирусом, можно воспользоваться решением по умолчанию - ClamAV, однако сходным образом настраивается и работа с другим антивирусным ПО.

Для этого надо установить ClamAV:

~$ sudo apt-get install clamav clamav-daemon clamav-base

убедиться, что в директории /run/clamav/ присутствует файл clamd.ctl или clamd.sock и в файле

sudo nano /etc/e2guardian/contentscanners/clamdscan.conf

убрать комментарий в строке clamdudsfile = '/run/clamav/clamd.ctl', а в случае, если в директории находится файл clamd.sock - заменить эту строку на clamdudsfile = '/run/clamav/clamd.sock'

Также необходимо установить владельцем директории файлов журнала E2guardian clamav:

~$ sudo сhown -R clamav /var/log/e2guardian

Конфигурирование 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 адрес и порт прокси-сервера.

Для корректной работы 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.

В файле

~$ 	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

Конфигурирование 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.

Чтобы убедиться в корректном функционировании связки Firefox-E2guardian-ClamAV (особенно в отсутствии ошибок активации ClamAV через e2guardian)

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

Если никаких ошибок нет, сначала необходимо протестировать работу e2guardian на сайтах с содержимым, подлежащим блокировке и убедиться, что система мониторинга выдает ожидаемые результаты. Для проверки работы ClamAV следует внимательно ознакомиться с инструкцией использования тестового заражённого файла доступного на

https://www.eicar.org/download-anti-malware-testfile/

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

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

комментарии в строках

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 в защищенный режим поиска

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

Tags:
Hubs:
Total votes 4: ↑3 and ↓1+3
Comments4

Articles