Как контролировать доступ в интернет для каждой программы?

Вопрос или проблема

Я хотел бы использовать программное обеспечение для контроля того, какая программа может подключаться к интернету. Я знаю, что это поведение связано со словом “фаервол”, но некоторые пользователи Linux очень расстраиваются, если кто-то требует Личный Фаервол. Я не хочу, чтобы вы расстроились из-за такой просьбы.
Я не хочу “защищать порты” или другие вещи, которые обещает Личный Фаервол в Windows. Я изучал iptables, но это не соответствует моим требованиям.

Я видел отличный ответ здесь (“Как заблокировать доступ к интернету для приложений Wine”), но это очень неудобно настраивать.

Существует ли программное обеспечение, которое спрашивает, может ли каждая программа получить доступ к интернету?

Я нашел удобное решение, которое решает эту проблему. Вы создаете группу, которой никогда не разрешается использовать интернет, и запускаете программу как члена этой группы.

  1. Создайте группу no-internet. Не вступайте в эту группу.

    sudo addgroup no-internet
    
  2. Добавьте правило в iptables, которое предотвращает всем процессам, принадлежащим группе no-internet, использование сети (используйте ip6tables, чтобы также предотвратить трафик IPv6).

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
    
  3. Используйте sudo -g no-internet YOURCOMMAND вместо YOURCOMMAND.

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

%sudo     ALL=(:no-internet)      NOPASSWD: ALL

или что-то подобное с помощью sudo visudo.

Используйте iptables-save и iptables-restore для сохранения правил фаервола.

ПРИМЕЧАНИЕ: Douane больше не активно разрабатывается и сообщается, что он не работает в более поздних версиях Ubuntu. Это решение может не работать, но ответ сохраняется в таком виде по историческим причинам.

Если вы все еще ищете такое приложение, я в настоящее время разрабатываю именно такое приложение: http://douaneapp.com/ https://gitlab.com/douaneapp/Douane

Мое приложение блокирует любые неизвестные приложения (новые версии авторизованного приложения блокируются) и спрашивает вас, разрешаете ли вы или отказываете в его трафике.

Посмотрите на сайт 😉

скриншот

Другой вариант – firejail. Он запускает приложение в песочнице, где вы контролируете, может ли приложение видеть сеть:

firejail --net=none firefox

Эта команда запустит браузер Firefox без доступа к интернету. Обратите внимание, что версия firejail в репозиториях Ubuntu устарела – лучше скачать последнюю LTS-версию с главной страницы firejail.

Существует Perl-скрипт на немецком форуме Ubuntu (переведен на английский Google), который, похоже, делает это. Я никогда не пробовал его и не изучал скрипт подробнее, но вдруг он подойдет вам. Описание только на немецком, поэтому вам может понадобиться услуга перевода (например, Google Translate; см. выше).

Запуск программы от имени другого пользователя будет использовать конфигурационные файлы для этого пользователя, а не для вашего.

Вот решение, которое не требует изменения правил фаервола и работает под тем же пользователем (через sudo) с измененной средой, где ваш пользователь – my_user, а приложение, которое вы хотите запустить, – my_app:

# запустить приложение без доступа к интернету
sudo unshare -n sudo -u my_user my_app

Для получения дополнительной информации смотрите man unshare и этот ответ.

Графический интерфейс фаервола для Linux

Если вы ищете графический интерфейс фаервола, я имел хорошие результаты с OpenSnitch — его еще нет в репозиториях Ubuntu, и я не назвал бы его готовым к производству, но следуя шагам сборки с страницы на github, у меня все заработало.

В Ubuntu уже есть фаервол, ufw, но он отключен по умолчанию. Вы можете включить и использовать его с помощью командной строки или его графического интерфейса gufw, который можно установить напрямую из Центра приложений Ubuntu.

Если вам нужно заблокировать доступ к интернету для конкретного приложения, вы можете попробовать LeopardFlower, который все еще в бета-версии и не доступен в Центре приложений Ubuntu:

Я нашел решение, опубликованное здесь, довольно хорошим. Оно включает создание группы пользователей, для которой доступ в интернет разрешен, и настройку правил фаервола, позволяющих доступ только для этой группы. Единственный способ для приложения получить доступ в интернет — это если оно запускается членом этой группы. Вы можете запускать программы в этой группе, открыв оболочку с помощью sudo -g internet -s.

Чтобы обобщить то, что в посте, на который я сослался выше:

  1. Создайте группу “internet”, введя в оболочке: sudo groupadd internet

  2. Убедитесь, что пользователь, который будет запускать скрипт ниже, добавлен в группу sudo в /etc/group. Если вы измените этот файл, вам нужно будет выйти и снова войти, прежде чем скрипт ниже будет работать.

  3. Создайте скрипт, содержащий следующее, и выполните его:

    #!/bin/sh
    # Фаервол приложений - разрешать запускаться только приложениям из группы "internet"
    
    # очистить предыдущие правила
    sudo iptables -F
    
    # разрешить пакеты для интернет-группы
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # также разрешить локальные подключения
    sudo iptables -A OUTPUT -p tcp -d 127.0.0.1 -j ACCEPT
    sudo iptables -A OUTPUT -p tcp -d 192.168.0.1/24 -j ACCEPT
    
    # отклонить пакеты для других пользователей
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # открыть оболочку с доступом в интернет
    sudo -g internet -s
    
  4. Запустив вышеуказанный скрипт, вы получите оболочку, в которой можете запускать приложения с доступом в интернет.

Обратите внимание, что этот скрипт не делает ничего для сохранения и восстановления ваших правил фаервола. Вы можете изменить скрипт, чтобы использовать команды оболочки iptables-save и iptables-restore.

@psusi:
Я действительно хотел бы, чтобы люди не распространяли плохую и бесполезную информацию. IPTables позволяет это делать, поэтому я едва ли сочту это “беспечным”.
Просто говорить “НЕТ”, не понимая случая использования, довольно узколобо.
http://www.debian-administration.org/article/120/Application_level_firewalling

ИЗМЕНЕНИЕ bodhi.zazen

ПРИМЕЧАНИЕ – ЭТА ОПЦИЯ БЫЛА УДАЛЕНА ИЗ IPTABLES В 2005 ГОДУ, ЗА 8 ЛЕТ ДО ТОГО, КАК БЫЛ ОПУБЛИКОВАН ЭТОТ ОТВЕТ

СМОТРИТЕ – http://www.spinics.net/lists/netfilter/msg49716.html

коммит 34b4a4a624bafe089107966a6c56d2a1aca026d4 Автор: Christoph
Hellwig Дата: Вск, 14 авг 2005 17:33:59 -0700

[NETFILTER]: Удалить злоупотребление tasklist_lock в ipt{,6}owner

Уберите сопоставление cmd/sid/pid, так как оно не поддается исправлению и мешает
изменениям блокировки в tasklist_lock.

Подписано: Christoph Hellwig <hch@xxxxxx>
Подписано: Patrick McHardy <kaber@xxxxxxxxx>
Подписано: David S. Miller <davem@xxxxxxxxxxxxx>

К лучшему или худшему, Linux использует другой подход. Нет простого графического интерфейса, который предлагает эту функциональность. В интернете много обсуждений на эту тему, и вы можете найти интересные дискуссии, если поищете в Google. Хотя дебаты – это интересно, до сих пор не было группы программистов, желающих написать и поддерживать эту функциональность.

Инструменты, которые предлагают эту функциональность в Linux, это Apparmor, Selinux и Tomoyo.

Ни один из этих инструментов не слишком прост в изучении, и все имеют свои преимущества и недостатки. Лично я предпочитаю SELinux, хотя у него более крутая кривая обучения.

Смотрите:

http://www.linuxbsdos.com/2011/12/06/3-application-level-firewalls-for-linux-distributions/

Существовало (существует) приложение, на которое уже ссылались, leopardflower. Я не уверен в статусе / технической поддержке.

Это было в iptables до версии ядра 2.6.24.
Если вы работаете на машине с 2.x – 2.6.24 и ваше ядро скомпилировано с этой опцией, вы можете это сделать.
По какой-то причине оно было удалено, так что это не Microsoft.
http://cateee.net/lkddb/web-lkddb/IP_NF_MATCH_OWNER.html

Попробуйте Leopard Flower. У него есть графический интерфейс и ограничения по приложениям.

Опираясь на оригинальный ответ, вы можете назначить группе приложения no-internet, избавившись от необходимости запускать приложение с sg no-internet [CMD] или sudo -g no-internet [CMD].

  1. Создайте группу no-internet, но не добавляйте себя в нее.

    sudo addgroup no-internet
    
  2. Добавьте правила iptables/ip6tables, чтобы заблокировать весь сетевой трафик для процессов в группе no-internet.

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j REJECT
    sudo ip6tables -A OUTPUT -m owner --gid-owner no-internet -j REJECT
    

    Сохраните и восстановите правила фаервола, используя iptables-save и iptables-restore.

  3. Установите группу приложения на no-internet и измените бит установленной группы (SGID).

    sudo chgrp ip_block [CMD]
    sudo chmod g+s [CMD]
    

    Замените [CMD] исполняемым файлом приложения.

  4. Чтобы восстановить доступ приложения в интернет, сбросьте группу приложения и SGID:

    sudo chgrp root [CMD]
    sudo chmod g-s [CMD]
    

Нет, это невозможно. Это также не является частью традиционного определения фаервола. Это то, что Microsoft придумала относительно недавно, пытаясь справиться с фундаментально сломанными проблемами безопасности своей ОС. Это считается безрассудным и неработоспособным в сообществе Linux, поскольку одна программа, которой не разрешено, может просто запустить другую программу, которой разрешено, и получить доступ таким образом.

Если вам не нравится то, что программа делает в сети, когда вы ее запускаете, просто не запускайте эту программу.

Ответ или решение

Чтобы контролировать доступ к интернету для каждого приложения в Linux, вы можете воспользоваться несколькими подходами. Одним из эффективных способов является использование iptables, однако, существует несколько альтернатив, которые могут удовлетворить ваши потребности. Ниже я изложу основные из них:

1. Использование групп и iptables

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

Шаги:

  1. Создайте группу:

    sudo addgroup no-internet
  2. Добавьте правило в iptables:
    Это правило запретит всем процессам, принадлежащим к группе no-internet, доступ к сети.

    sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP

    Для IPv6 используйте:

    sudo ip6tables -A OUTPUT -m owner --gid-owner no-internet -j DROP
  3. Запустите приложение с использованием этой группы:
    Замените YOURCOMMAND на команду запуска вашего приложения.

    sudo -g no-internet YOURCOMMAND

Вы также можете создать обертку для удобства использования этой команды, чтобы не вводить ее каждый раз.

2. Использование firejail

firejail — это инструмент, который позволяет запускать приложения в защищенной среде, и вы можете конфигурировать доступ к сети.

Пример использования:

firejail --net=none firefox

Эта команда запускает браузер Firefox без доступа к интернету.

3. OpenSnitch

Если вы ищете графический интерфейс для управления интернет-доступом, вы можете рассмотреть OpenSnitch. Это приложение позволяет задавать правила для доступа к сети для каждого приложения в реальном времени. Важно отметить, что OpenSnitch требует определенных навыков для установки, так как оно не всегда доступно в стандартных репозиториях.

4. Версия с использованием unshare

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

sudo unshare -n my_app

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

5. Другие методы: AppArmor и SELinux

Для более сложных настроек безопасности можно использовать системы контроля доступа, такие как AppArmor или SELinux. Эти инструменты позволяют устанавливать правила на уровне приложений, но требуют более серьезных навыков для настройки.

Заключение

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

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

Капча загружается...