LINUX.ORG.RU

Запретить Linux приложению доступ в сеть

 , , , ,


1

2

Ни разу не настраивал файрвол или другие подобные вещи в линукс. Есть ли простой и надежный способ запретить приложению выходить в сеть? Какой вообще способы бывают?

Вдогонку вопрос: Есть ли какая-нибудь разница, установлено ли это приложение через стандартный менеджер ubuntu - apt, или оно скачано и запускается из Appimage?

На примере того же keepassxc, надо запретить ему выход в сеть. И можно ли как-то потом удостовериться, что выход в сеть действительно ему перекрыт?

bonolar
() автор топика

Можно наверное запускать приложение от специально отведенного пользователя а в правилах разруливать по uid/gid.

wolph ★★
()
Ответ на: комментарий от wolph

Я прочитал что-то похожее здесь https://habrahabr.ru/post/82933/

Но в другой теме говорят про какие-то namespaces, тоже начинаю читать.

Я просто пытаюсь понять, вроде типовая задача - ограничить/запретить доступ в сеть приложению в Linux. Есть ли какой-то рядовой способ это сделать, быстро и надежно, да еще и со 100% гарантией, что приложение не найдет обходной путь в сеть. Когда это менеджер паролей с сетевыми функциями (по умолчанию правда не используются), то всегда хочется перестраховаться.

bonolar
() автор топика
Ответ на: комментарий от bonolar

в глобальной сети есть несколько основных протоколов вроде udp, tcp, http, https. приложения обычно общаются пакетами (тобишь tcp/ip <-- http/s). пакеты идут через сокеты. сокеты это связка ип и порт. например веб-сайты открываются с 80 порта если это https. чтоб закрыть доступ к вебсайтам хрому в общем случае надо закрыть исходящие соединения с 80 портом и так далее. открываешь исходники, изучаешь какие порты используются, блокируешь или патчишь исходники или что угодно. запускйся с виртуалки параноик гребаный

anonymous
()
Ответ на: комментарий от bonolar

Я просто пытаюсь понять, вроде типовая задача - ограничить/запретить доступ в сеть приложению в Linux. Есть ли какой-то рядовой способ это сделать, быстро и надежно, да еще и со 100% гарантией, что приложение не найдет обходной путь в сеть.

Я вот пытаюсь понять, вроде типовая задача - построить ракету/засеять поле пшеницей/посадить человека в тюрьму. Есть ли какой-то рядовой способ это сделать, быстро и надежно, да еще и со 100% гарантией, что она/он выведет груз на орбиту/взойдёт/не сбежит.

anonymous
()
Ответ на: комментарий от anonymous

Не так вопрос прочитал. В общем, и тут iptables вроде может помочь. В сторона модуля owner надо копать, если не ошибаюсь.

anonymous
()
Ответ на: комментарий от anonymous

Iptables - лучший вариант. Вот очень хороший гайд http://www.k-max.name/linux/netfilter-iptables-v-linux/ Выдели 2 часа на осмысленное прочтение для понимания общей архитектуры. Добавь в закладки для поиска деталей, когда будешь использовать.

Попробую осмыслить, спасибо. Как-раз хотелось какое-то встроенное проверенное решение, но почему-то не все считают что iptables можно настроить так, чтобы программа все-равно не нашла обход. Но я все равно попробую, этот вариант мне как-то ближе. Может еще с namespaces разберусь.

bonolar
() автор топика

самое простое, что приходит на ум - запусти его в пустом network namespace.

vvviperrr ★★★★★
()

iptables имеет достаточно ограниченные возможности

IMHO самое простое - запуск в отдельном netns без сети.

vel ★★★★★
()

Ни разу не настраивал файрвол или другие подобные вещи в линукс.

Не лезь сразу в скрипты. Запусти fwbuilder и поиграй с ним. К тому же он как раз типовые возможности и покрывает.

Ну и да - по-умолчанию всё должно быть запрещено. Нужно открывать доступ. И то только к конкретным адресам.

anonymous
()

Большинство программ в linux имеют открытый исходный код и не совершают неконтролируемых действий. Кроме того графическая подсистема часто может отсутствовать. А многие программы написаны из расчёта на автоматическую работу и поэтому лишены лишней интерактивности. То есть подход уровня «открыть окошко уведомления и спросить пользователя пускать ли программу в сеть» - это просто варварство. Ибо у пользователя может не быть графической подсистемы что бы открыть окошко или пользователем может быть скрипт в котором не будет прописана адекватная реакция на такой запрос.

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

Поэтому тебе нужны всякие новомодные хипстерские средства вроде тюрем и песочниц.

PeKar
()

Какой вообще способы бывают?

firejail, squid, iptable...

firejail --net=none libreoffice

LinuxDebian ★★★★
()
Ответ на: комментарий от PeKar

Большинство программ в linux имеют открытый исходный код и не совершают неконтролируемых действий.

Большинство имеет кучу дыр (нарошно оставленых заплаток) которых трудно найти (да и это займет много времени). По этому лучше просто отрезать им нет и уменьшить количество лазеек в систему.

LinuxDebian ★★★★
()
Последнее исправление: LinuxDebian (всего исправлений: 1)
Ответ на: комментарий от bonolar

Я просто пытаюсь понять, вроде типовая задача - ограничить/запретить доступ в сеть приложению в Linux.

Нет, не типовая, и решения нет. Разве что в последних версиях netfilter что-то могло появиться, но я не видел пока. Типовая задача - это запретить пользователю. Соответственно, из-под него запускать те приложения, которым нельзя в сеть.

AS ★★★★★
()
Последнее исправление: AS (всего исправлений: 1)
Ответ на: комментарий от AS

Разве что в последних версиях netfilter что-то могло появиться, но я не видел пока.

Хотя непонятно, как решать. Привязываться к PID плохо - PID поменяется. Привязываться к имени тоже плохо - имя даже сам процесс может себе поменять (хотя это можно и запретить).

AS ★★★★★
()
Ответ на: комментарий от LinuxDebian

Большинство имеет кучу дыр (нарошно оставленых заплаток) которых трудно найти (да и это займет много времени). По этому лучше просто отрезать им нет и уменьшить количество лазеек в систему.

В linux это делается просто - закрываются порты. Ибо заранее определено с какими портами работают те или иные программы.

PeKar
()
Ответ на: комментарий от LinuxDebian

Закрыть порты общего пользования? Если я хочу проге закрыть 80ый...

Исходящие или входящие соединения?

PeKar
()
Ответ на: комментарий от bonolar

Конечно занимается, и это все знают, поэтому тебе и советуют :)

Лол, че...

https://github.com/netblue30/firejail

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

LinuxDebian ★★★★
()
Последнее исправление: LinuxDebian (всего исправлений: 2)
Ответ на: комментарий от LinuxDebian

Исходящее, на случай слива инфы... Входящие то понятно что все закрыты...

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

PeKar
()
Ответ на: комментарий от system-root

и даже apparmor не поможет?

Вот это не знаю, но это как-то выходит за рамки обычного файрвола, даже если оно как-то умеет.

AS ★★★★★
()
Ответ на: комментарий от LinuxDebian

firejail --net=none
Чем не решение?!

Ну это сложнее, чем из-под специального пользователя запускать. Как мне кажется.

AS ★★★★★
()

AppArmor. Или Firejail (про него уже сказали).

Вдогонку вопрос: Есть ли какая-нибудь разница, установлено ли это приложение через стандартный менеджер ubuntu - apt, или оно скачано и запускается из Appimage?

Конечно есть. Если в первом случае все относительно прозрачно, то во втором тебя, скорее всего, ждёт куча проблем с namespace'ами (в firejail с этим проще — там все ограничение прав изначально завязано на namespace'ы).

типовая задача

Ни разу она не типовая (разве что, для отдельных мамкиных параноиков или если ты какой-то проприетарный варез используешь).

Нельзя настолько не доверять разработчикам (особенно при наличии кода, подписей и reproducible builds). Опять же, чем тебе ограничение доступа в сеть для keepassxc поможет в случае если какая-то иная программа решит отослать твои пароли из .config/keepassxc/ куда-то ещё? Вот то-то же.

ShizuShidou
()
Ответ на: комментарий от ShizuShidou

Нельзя настолько не доверять разработчикам (особенно при наличии кода, подписей и reproducible builds). Опять же, чем тебе ограничение доступа в сеть для keepassxc поможет в случае если какая-то иная программа решит отослать твои пароли из .config/keepassxc/ куда-то ещё? Вот то-то же.

Наверно нельзя, но немножко здорового скептицизма никогда не помешает. :)

Если какая-то одна программа сольет 1 пароль, ей предназначенный, то это одна беда. А если это программа, которая хранит сотни паролей, то это уже катастрофа, согласись... Тут надо подходить с умом, если изолировать, то так чтоб верняк.

bonolar
() автор топика
Ответ на: комментарий от bonolar

Может еще с namespaces разберусь

Смотри. Запускаешь терминал, в нем:

# ip netns add mynetns
# ip netns exec mynetns bash
Теперь ты «в неймспейсе» mynetns. Сетевых адаптеров ты в него не добавлял, поэтому сеть здесь не работает. Запускай свою хреновину и пользуйся смело.

thesis ★★★★★
()
Последнее исправление: thesis (всего исправлений: 1)
Ответ на: комментарий от thesis

Вот спасибо, побольше бы таких людей как ты. :)

bonolar
() автор топика
Ответ на: комментарий от bonolar

Т.е. вот оно?
https://habrahabr.ru/post/82933/

Основное в этом месте:
iptables -A OUTPUT -m owner --gid-owner noinet -j DROP

Остальное в статье - это как использовать это правило. Можно и так.

AS ★★★★★
()
Ответ на: комментарий от bonolar

Если какая-то одна программа сольет 1 пароль, ей предназначенный

Ты не понимаешь. Ты запустил keepassxc в отдельном namespace без сети, но сохранённые пароли все равно лежат в хомяке. Потом ты запустил скачанный у Васяна бинарник, который никто ничем не ограничивает. Кто запретит васянскому бинарнику отправить твои пароли куда ему угодно? Или ты думаешь, что их защитит мастер-пассворд? Так тут я тебя тоже разочарую: в иксах любое приложение — потенциальный кейлогер (чисто за счёт архитектуры самих иксов, где любое запущенное приложение всегда слушает клавиатуру).

Тут поможет только комплексный подход, а то, что ты делаешь, это как-то вот так, чтоб ты понимал.

ShizuShidou
()
Ответ на: комментарий от PeKar

графическая подсистема ... отсутствовать
открыть окошко уведомления ... варварство

Только в мышлении узколобиков. Ничто не мешает отсылать сообщения по нетлинку гуйне, и если её нет, продолжать работать как обычно.

anonymous
()
Ответ на: комментарий от anonymous

в обычных ядрах он кастрированный и не может в сеть

ппц и в чём смысл было его кастрировать?

system-root ★★★★★
()
Ответ на: комментарий от anonymous

графическая подсистема ... отсутствовать
открыть окошко уведомления ... варварство

Только в мышлении узколобиков. Ничто не мешает отсылать сообщения по нетлинку гуйне, и если её нет, продолжать работать как обычно.

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

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

PeKar
()
Ответ на: комментарий от anonymous

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

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

PeKar
()
Ответ на: комментарий от PeKar

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

anonymous
()
Ответ на: комментарий от anonymous

Если ссылка по теме, приведи основные тезисы.

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

PeKar
()

В принципе есть куча способов вылезти из песочницы, которая изначально не предусматривалась в архитектуре ОС. Так что всё довольно грустно.

peregrine ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.