LINUX.ORG.RU

Как дать исходящий доступ в сеть только конкретному приложению? Например, браузеру.

 , , ,


1

1

Всем привет.

Миграция с офтопика на Debian11 LXQT проходит не так гладко как хотелось бы. Фаервол в винде сделан так, что я могу запретить там вообще все соединения. И входящие, и исходящие. А потом разрешить сетевую активность только для конкретных приложений. Например, для браузера или cli. И винда сама будет решать каким протоколам/портам/адресам давать исходящий доступ в сеть.

А на онтопике я до сих пор не поняла, как такое повторить. Запретила все соединения через nftables.conf для обеих chain-ов input и ouput:

type filter hook input priority 0; policy drop;
type filter hook output priority 0; policy drop;

Это сработало и трафик в обе стороны запрещён. После этого я пыталась найти какие то rules, чтобы разрешить трафик не на портах или IP адресах, а конкретному приложению: Firefox. И не нашла.

В качестве workaround поставила OpenSnitch. При запуске Firefox я разрешаю OpenSnitch-у пускать трафик от/к firefox. OpenSnitch отображает это временное правило у себя в GUI. Но Firefox доступа в сеть не имеет.

Я думала, что OpenSnitch сам на лету пропишет нужные rules в nftables. Но, очевидно, этого не происходит.

В итоге я не понимаю, можно ли вообще повторить в Debian то, что я делала в винде за пару кликов. И если, можно, то как? Памагите, плиз.


Могу предложить костыль - запускать браузер от отдельного пользователя. В правилах фильтровать по uid.

Meyer ★★★★★
()
Последнее исправление: Meyer (всего исправлений: 1)

не понимаю, можно ли вообще повторить в Debian то, что я делала в винде за пару кликов

Нельзя. За пару кликов нельзя.

И если, можно, то как?

Несколько вариантов. Я отдаю предпочтение связке cgroups с nftables - nftables умеет в мета-селектор cgroup, а libcgroup умеет объединять в одну группу все процессы приложения по его имени.

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

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

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

Да. Как это сделать смотри вот тут - Matching by socket UID / GID.

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

А что нужно прорисать в Launcher для Firefox, чтобы запустить его от конкретного юзера? Положим, я создала пользователя firefox_user.

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

А можно поподробнее?

Да, можно:

  • с помощью libcgroup все процессы браузера объединяются в одну группу, делается это через конфиг
  • в nftables идёт управление группой по её id через селектор meta cgroup
vvn_black ★★★★★
()
Ответ на: комментарий от vvn_black

в nftables идёт управление группой по её id через селектор meta cgroup

Выглядит интересно.

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

И как применить Firejail в моём случае? FireJail пробётся через фаерволл когда «policy drop»?

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

И как там настроить доступ для конкретного приложения?

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

Слишком сложно, по-моему.

Удобнее запускать приложение в отдельном systemd slice и матчить в nftables по cgroup path.

Если приложение в контейнере или флатпаке каком-нибудь, то слайс создается автоматически, даже systemd-run не нужен.

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

Но, для этого минимум нужен systemd, а у меня его на момент экспериментов не было.

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

Путем андроида — это разрешить кому попало в сеть? А то андроид 13 вконец охренел, теперь приходится AFWall’ом перебиваться.

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