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

60

Я хотел бы использовать программное обеспечение для контроля, какая программа может подключаться к Интернету. Я знаю, что такое поведение связано со словом «брандмауэр», но некоторые пользователи Linux очень расстраиваются, если кто-то требует персонального брандмауэра. Я не хочу расстраивать вас требованием такой программы.
Я не хочу «защищать порты» или другие вещи, которые Персональный брандмауэр обещает в Windows. Я посмотрел, iptablesно это не соответствует моим требованиям.

Я увидел здесь отличный ответ ( «Как заблокировать доступ в интернет для винных приложений» ), но настроить его очень неудобно.

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

guerda
источник
на Mac есть программное обеспечение под названием маленький стукач, который делает это. Я думаю, что есть версия для Windows также ...
Alvar

Ответы:

6

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

Флориан Диш
источник
Я посмотрю на это. Это интересно и может быть правильным инструментом. К сожалению, нет
графического интерфейса
35

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

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

Посмотрите на сайт ;-)

Скриншот

ZedTuX
источник
Здорово! Я также посмотрел на ppa, но там не было пакета, несмотря на то, что там было создано приложение. Также мне интересно, мог ли он показать ip, разрешенный для читаемого имени сайта? И, я собираюсь следовать инструкциям по компиляции, я видел там много советов для пакетов ubuntu dep, и я буду использовать checkinstall, чтобы создать свою локальную копию пакетов .deb, чтобы легко управлять обновлениями (удалить / установить). Может быть, checkinstall может быть использован для создания ваших распространяемых файлов, я думаю.
Водолей Сила
Вы можете открыть запрос на функцию на Github ( github.com/Douane/Douane/issues ) :)
ZedTuX
2
кажется, именно то, что мне нужно !! Но я не могу найти пакет для его установки в Ubuntu.
Азерафати
Все еще не пакет для Ubuntu?
Анвар
1
Douaneapp.com возвращается! :)
ZedTuX
26

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

  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для сохранения правил брандмауэра.

Тим
источник
1
Я попробовал ваше руководство, sudo -g no-internet firefoxподключается быстрее, чем по умолчанию. Не работает
Кенн
1
@kenn Могу только сказать, что здесь все отлично работает. Я предполагаю, что вы делаете что-то не так при создании правила. Не сохранять правило, не делать исполняемый скрипт или что-то в этом роде.
Тим
Я перезагрузил и снова применил вышеуказанные правила без удачи
Кенн
1
работал отлично для меня, даже с Firefox. благодарю вас!
Костанос
1
Похоже, это не работает для меня, на Ubuntu 19.04. Мне нужно было установить iptables-persistent, чтобы изменения могли быть сохранены между перезагрузками. (Так что вы можете добавить это к решению выше). Тем не менее, sudo -g no-internet firefox не ограничивает Firefox в доступе к Интернету. Концептуально, похоже, что это решение должно работать. Есть ли что-то фундаментальное, что упускается из виду? Например, нам нужно настроить ОБА ipv4 и ipv6, чтобы это работало?
Пи Джей Сингх
5

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

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

heiko81
источник
4

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

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

# run app without access to internet
sudo unshare -n sudo -u my_user my_app

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

Linux GUI firewall

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

ccpizza
источник
3

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

РЕДАКТИРОВАТЬ бодхи.зазен

ПРИМЕЧАНИЕ. ЭТОТ ВАРИАНТ УДАЛЕН ИЗ IPTABLES В 2005 ГОДУ, ЗА 8 ЛЕТ ДО ЭТОГО ОТВЕТА

СМ. - http://www.spinics.net/lists/netfilter/msg49716.html

commit 34b4a4a624bafe089107966a6c56d2a1aca026d4 Автор: Кристоф Хельвиг Дата: вс 14 августа 17:33:59 2005 -0700

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

Извлеките соответствие cmd / sid / pid, так как оно не удалось исправить и препятствует изменениям в tasklist_lock.

Signed-off-by: Christoph Hellwig <hch@xxxxxx>
Signed-off-by: Patrick McHardy <kaber@xxxxxxxxx>
Signed-off-by: David S. Miller <davem@xxxxxxxxxxxxx>
user141987
источник
2
Для всех, кто хочет пометить это: это не комментарий, а ответ на заданный вопрос . @ user141987 Я рекомендую расширить это, чтобы предоставить больше информации о том, как настроить iptablesограничения для каждого приложения. Я рекомендую включить важную информацию в ваш ответ (и по-прежнему предоставлять ссылку, для справки).
Элия ​​Каган
2
iptables НЕ фильтрует по приложениям.
Пантера
Эта статья, похоже, является дезинформацией, поскольку такой возможности нет. Причина, по которой запросы на создание такой опции в прошлом были отклонены, заключается в том, что она по своей сути ненадежна; приложение может просто изменить свое имя.
psusi
3
@psusi Вы говорите, что «если ваше ядро ​​было скомпилировано с CONFIG_IP_NF_MATCH_OWNER, то вы можете настроить брандмауэр iptables для разрешения или отклонения пакетов для каждой команды» неверно? Или просто, что большинство ядер не включают эту опцию? Если это неверно, существуют ли источники информации, которые его опровергают? (Также обратите внимание, что основная цель ограничений брандмауэра для каждого приложения состоит не в том, чтобы сделать его совершенно безопасным для запуска ненадежных приложений. Цель состоит в том, чтобы дать пользователю контроль над встроенными параметрами конфигурации приложений. )
Элия ​​Каган
Эта опция была удалена из ядра в 2005 году, за 8 лет до того, как был дан этот ответ - spinics.net/lists/netfilter/msg49716.html, и, несмотря на то, что утверждения об обратном неточны, вы НЕ можете фильтровать приложение с помощью iptables.
Пантера
3

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

firejail --net=none firefox

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

Димитар II
источник
2

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

Напомним, что в посте, который я связал выше:

  1. Создайте группу «интернет», набрав в командной строке следующее: sudo groupadd internet

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

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

    #!/bin/sh
    # Firewall apps - only allow apps run from "internet" group to run
    
    # clear previous rules
    sudo iptables -F
    
    # accept packets for internet group
    sudo iptables -A OUTPUT -p tcp -m owner --gid-owner internet -j ACCEPT
    
    # also allow local connections
    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
    
    # reject packets for other users
    sudo iptables -A OUTPUT -p tcp -j REJECT
    
    # open a shell with internet access
    sudo -g internet -s
    
  4. Запустив приведенный выше скрипт, вы получите оболочку, в которой вы сможете запускать приложения с доступом в интернет.

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

отметка
источник
1

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

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

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

Видеть:

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

Было (есть) приложение, на которое уже ссылались, leopardflower. Я не уверен в статусе / обслуживании.

пантера
источник
0

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

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

psusi
источник
7
Брандмауэр Microsoft был не первый крупный брандмауэр , чтобы предложить эту функцию. Это был даже не первый брандмауэр Windows, предложивший его. BlackIce Defender, ZoneAlarm и множество других программных брандмауэров для Windows предшествуют внедрению брандмауэра Windows Internet Connection Firewall на годы. Кроме того, в сообществе Linux такого консенсуса нет. Мы часто используем AppArmor (или SELinux) для ограничения поведения приложений (и мне интересно, можно ли адаптировать AppArmor для этой цели ...). Нет причин, по которым «неправильно» хотеть контролировать, какие приложения могут выходить в Интернет.
Элия ​​Каган
И, как могут подтвердить несколько других ответов, ограничения брандмауэра для каждого приложения вполне возможны ; эта функциональность встроена в iptables / netfilter!
Элия ​​Каган
Нет, ни netfilter, ни iptables не могут фильтровать каждое приложение. Они могут фильтровать по пользователю и порту, но не по приложению.
Пантера
"Может просто запустить другой" ???? Тогда очевидно, что создатель такой программы, которая не блокирует дочерние процессы целевой программы, имеет серьезные недостатки.
trusktr