OpenSnitch – ручной контроль сетевой активности Linux приложений

OpenSnitch – ручной контроль сетевой активности Linux приложений

Приветствую!

OpenSnitch – это настольное open source приложение, способное блокировать исходящие запросы различных программ с выводом уведомлений на рабочем столе🔔. В этой заметке мы рассмотрим установку, запуск и демонстрацию работы OpenSnitch в дистрибутиве Linux Mint 22🐧.

Подписывайтесь на наш телеграм @r4ven_me📱, чтобы не пропустить новые публикации на сайте😉. А если есть вопросы или желание пообщаться по тематике – заглядывайте в Вороний чат @r4ven_me_chat🧐.

Предисловие

Некоторые вводные данные по программе OpenSnitch📑:

ХарактеристикаЗначение
ПлатформаLinux
Дистрибутив (среда выполнения в статье)Linux Mint 22
Обозреваемая версия OpenSnitch1.5.8
Написан наPython, Go, C, Qt
Категория ПОСетевые экраны
Методы контроля сетевого трафикаproc или ebpf или auditd
Файл журнала/var/log/opensnitchd.log

OpenSnitch является инструментом информационной безопасности, который позволяет значительно повысить степень контроля над вашей системой (а мы такое любим😌). Проект вдохновлен аналогичным для MacOS: Little Snitch.

Программа OpenSnitch работает в режиме сервиса/демона, управление которым осущесвляется через настольное GUI приложение.

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

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

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

За то вы будете уверены, что если некая проприетарная программа попытается отправить данные на сторонние сервера, вы об этом узнаете. А если пропустите уведомление, то применится политика по умолчанию – из коробки это правило запрета.

Привычку пользоваться подобным софтом я выработал еще будучи пользователем Windows🪟. К слову там я использовал аналогичный open source инструмент, под названием Simpelwall (потому что в винде даже блокнот зачем-то лезет в интернет😡). Принцип работы у Simpelwall похожий на OpenSnitch: блокировка соединений с показом уведомлений💬.

Как это работает?

OpenSnitch предлагает на выбор один из 3-х методов контроля сетевых подключений (указывается в настройках):

  • proc – метод чекает сетевые соединения через системные файлы: /proc/net/tcp и /proc/net/udp, связывая их с процессами по PID. Этот метод прост в использовании и может работать на большинстве систем, но обновление /proc может происходить с задержкой, что снижает точность и не всегда позволяет заблокировать соединение до его установления.
  • ebpf (рекомендуемый) – чаще всего это метод по умолчанию, который использует механизм eBPF в ядре Linux для перехвата системных вызовов (SOCKET_CONNECT) до установления соединения. По заявлению разработчиков этот метод обеспечивает высокую производительность, точность и минимальную нагрузку на систему, но требует современного ядра (5.x+).
  • audit – метод записывает сетевые события через службу аудита Linux — auditd. Он позволяет вести детальный аудит сетевой активности, но может работать с задержкой и создаёт дополнительную нагрузку на систему, т.к. работает через сервис-посредника.

Стоит также отметить, что проект OpenSnitch активно развивается👌 и в последних версиях добавлено много чего интересного, например:

  • Блокировка рекламы и трекеров по спискам доменов (с версии 1.4.0)
  • Возможность управления системным фаерволом: Nftables (с версии 1.6.0)
  • Интеграция с системами сбора и аудита событий (SIEM) (с версии v1.6.0): Syslog, Grafana+Loki+Promtail или ElasticSearch+LogStash+Kibana
  • Организация централизованного сервера для управления другими нодами OpenSnitch с помощью того же GUI с защитой соединений по TLS (с версии 1.6.1)
  • и т.д.

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

Установка OpenSnitch

Данная программа есть в стандартных репозиториях Linux Mint / Ubuntu / Debian. Поэтому просто открываем терминал, обновляем кэш пакетов и выполняем установку:

sudo apt update && sudo apt install -y opensnitch

Проверить установленную версию OpenSnitch можно так:

opensnitchd --version

Если вам нужна более свежая версия ищите ее на странице релизов. Необходимо скачать 2 файла: демон — opensnitch_<версия>_amd64.deb и GUI — python3-opensnitch-ui_<версия>_all.deb.

В системе должно появиться два исполняемых файла: opensnitchd и opensnitch-ui. Первый, как понятно из названия — сервис/демон, который запускается в фоне с помощью системы инициализации systemd. Проверить статус можно такой командой:

systemctl status opensnitch

Сервис должен быть запущен, а его автозапуск включен:

Если это не так, выполните команду:

sudo systemctl enable --now opensnitch

Обратите внимание, что для выполнения команды выше необходимы привилегированные права sudo.

Эта команда делает сразу два действия: запускает сервис и активирует его автозапуск при старте системы.

Автостарт же графического интерфейса (свернутого в трей) обеспечивается с помощью системного .desktop файла в директории /etc/xdg/autostart:

cat /etc/xdg/autostart/opensnitch_ui.desktop

Отключить автозапуск GUI (и сам OpenSnitch) можно в соответсвующем разделе настроек системы:

Запуск и обзор GUI

Первый запуск графического интерфейса OpenSnitch можно выполнить через меню приложений:

В системном трее появится иконка приложения. А также, вероятнее всего, вы сразу увидите его в действии: при любой сетевой активность пользовательского сеанса всплывет окно-уведомление:

В примере выше программа синхронизации файлов syncthing пытается подключиться к TCP порту 8080 по адресу 127.0.0.1.

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

Как видно на скриншоте выше, доступны следующие параметры для правила:

Тип запрса– от исполняемого файла
– от конкретной команды
– на конкретный сетевой адрес или подсеть
– на конкретный сетевой порт
– от конкретного пользователя
– по ID процесса (PID)
Время действия правила– до перезагрузки системы
– единожды
– навсегда
– на какой-то период
Действие правила– разрешить соединение
– запретить соединение

Если до истечения теймера не выбрать действие, будет применена политика по умолчанию. Из коробки это: запретить любой сетевой доступ от исполняемого файла до следующей перезагрузки системы. Данное поведение можно легко изменить в настройках прграммы, про которые поговорим ниже.

⚠️Важно понимать, что контроль сетевого доступа будет осуществляться для всех программ и утилит (в т.ч. консольных). Поэтому на первых парах рекомендую внимательно изучать, что именно и куда пытается получить доступ.

Например, на скрине ниже видно, что утилита службы разрешения имен systemd-resolvd пытается обратиться к DNS серверу по стандартному порту 53:

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

При клике по иконке OpenSnitch в системном трее откроется основное окно программы. Обратите внимание, что в верхнем углу справа↗️ есть кнопка остановки работы OpenSnitch:

Интерфейс программы разделен на вкладки📑, далее вкратце рассмотрим каждую из них.

Вкладка “События”

Этот раздел представляет собой журнал всех зафиксированных сетевых соединений:

  • какой процесс инициировал соединение;
  • с каким IP-адресом или доменом установлено соединение;
  • какой протокол и порт использовался (например TCP/UDP, порт 80, 443 и т. д.);
  • примененное правило (разрешено/заблокировано).

Здесь удобно анализировать текущие подключения и выявлять подозрительную активность🔍.

💡В нижней части каждого раздела доступен контекстный поиск/фильтр.

Вкладка “Узлы”

Отображает список локальных и удалённых узлов, которые контролирует OpenSnitch:

В нашем примере тут только наша локальная нода. При использовании OpenSnitch в качестве централизованного сервера, тут будут отображаться подконтрольные узлы (про это будет отдельная заметка).

Если “провалиться внутрь” выбранного узла с помощью двойного клика, мы увидим подробности его сетевой активности:

Вкладка “Правила”

Самый важный раздел. Тут указаны все правила фильтрации трафика OpenSnitch:

Что тут можно делать:

  • создавать новые правила редактировать существующие;
  • гибко настраивать параметры о которых я говорил выше;
  • выполнять поиск/фильтрацию правил по приложениям, портам, узлам и пользователям, когда правил много;

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

Вкладка “Хосты”

На этой вкладке показан список доменных имен, с которыми система устанавливала соединения, а также количество таких соединений:

При двойном клике по хосту, можно посмотреть, какие программы с ним взаимодействовали:

Вкладка “Приложения”

Тут указан список всех программ/утилит, которые выходили в сеть и количество таких попыток.

При двойном клике по выбранной программе откроется таблица ее сетевой активности. А при нажатии кнопки обзора (иконка лупы) можно посмотреть детали процесса: открытые файлы, I/O статистику, используемые переменные среды и т.д.:

Вкладка “Адреса”

На этой вкладке ожидаемо показаны все IP адреса хостов, с которыми взаимодействовали ваши приложения:

Двойной клик адресу позволит посмотреть связанную с ним статистику:

Вкладка “Порты”

В этом разделе представлен список задействованных в системе сетевых портов и количество обращений к ним:

Аналогично вкладке “Адреса” по двойному клику мыши можно посмотреть подробности, связанные с приложениями, которые обращались на указанный порт:

Вкладка “Пользователи”

Ну а здесь указан список пользователей-владельцев процессов, которые активно используют сеть:

Аналогичным образом при дабл клике по пользователю можно увидеть связанные с ним процессы и их сетевую активность:

Настройки программы

Осталось рассмотреть раздел настроек OpenSnitch:

Тут можно изменить параметры работы программы:

  • Режим работы: можно выключить интерактивный режим (уведомление пользователя при каждом новом соединении) и использовать автоматический (применение параметров по умолчанию);
  • Параметры по умолчанию: можно определить тип запроса, действие и длительность правила;
  • Логирование: настроить уровень детализации логов, указать файл лога (по умолчанию /var/log/opensnitchd.log);
  • Метод контроля: выбрать метод между proc, auditd или eBPF (eBPF более эффективен и рекомендуем для современных систем);
  • База данных: настроить хранение событий в отдельном файле;
  • и др.

Послесловие

Теперь в нашем арсенале +1 к паранойе комплексу защиты нашей системы🧑‍💻🛡️. Лично для меня OpenSnitch оказался очень удобным, гибким и эффективным способом отслеживать работу приложений, а также предотвращать нежелательную сетевую активность системы. Диву даешься, когда посмотришь на список процессов, пытающихся получить доступ в сеть😱.

Если данная заметка оказалась для вас полезной, то загляните в раздел Полезное ПО, возможно вас заинтересуют и другие мои материалы. Ну и конечно подписывайтесь на нашу телегу: @r4ven_me✈️ и чат там же: @r4ven_me_chat💬, чтобы не пропустить новые материалы на сайте.

Спасибо, что читаете! И берегите свою конфиденциальность🥷.

Полезные материалы

Подписаться
Уведомить о
0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии