LINUX.ORG.RU
ФорумAdmin

Network namespace, программы, локалхост

 ,


0

2

Всем привет,

Хочу на своем локалхосте ограничить доступ программ в сеть. К примеру:

chromium — только порты 80,443 на выход. ssh — только порт 22 на выход. и т.д.

Всем остальным программам доступ в сеть должен быть закрыт. Начал изучать вопрос и похоже что единственное «стандартное» решение на уровне ядра это Network Namespaces.

На первый взгляд решение хорошее и удобное.

Но у меня возникают некоторые вопросы:

1. Для каждой программы придется заводить свой namespace, не будет ли тормозить система при большом их кол-ве?

2. Для старта каждой программы придется писать wrapper, ну типа ssh --> ip netns exec ssh-ns ssh $@ Возможно ли как то избежать этого?

3. Есть ли какое то более «лучшее» или «правильное» решение?


Хочу на своем локалхосте ограничить доступ программ в сеть. Начал изучать вопрос и похоже что единственное «стандартное» решение на уровне ядра это Network Namespaces.

А файрволлом отрезать - уже не модно? Network namespace нужен всё же немного для другого, чтобы просто отрезать доступ программ в сеть - достаточно перекрыть его файрволлом в цепочке OUTPUT

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

semanage? неймспейсы имхо тут не подходят.

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

А файрволлом отрезать - уже не модно?

iptables вроде до сих пор не умеет различать трафик по приложениям(AFWall+ в ведроиде до сих пор использует --uid-owner для фильтрации, думаю будь иное решение они на него-бы перешли), а ТС хочет именно этого.

Для ТС - посмотри в сторону firejail, там полно возможностей и не нужны root права(как для ip netns)

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

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

firejail глянул — интересно. Но по сути это прикладная программа к тем же namespaces.

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

Ну а зачем ставить какие то сторонние навороты когда ядро в стандартной поставке предлагает решение?

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

Окей, дано - 2 программы, одну надо выпустить наружу только по 22 порту на определенные хосты, вторую - только по 80/443 везде. При этом программы должны видеть друг друга по сети(например общаются по 127.0.0.1 друг с другом). Усугубим тем, что программа А не должна иметь доступ к разрешенным портам для программы Б. Вариант запихать их в один network namespace - отпадает из-за того что тогда нельзя будет разграничить им доступ. Вариант запихать их в разные namespace - отпадает, т.к. не получится взаимодействовать друг с другом(127.0.0.1 в каждом namespace - свой).

Остаётся либо application based firewall(nufw/ufwi) либо банальное распихивание запуска программ по разным пользователям и фильтрация уже по uid пользователя и портам. В принципе в обоих случаях можно еще и network namespaces вдобавок прикрутить, если так уж хочется.

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

Вы описываете частный случай, который таки имеет решение (хинт: для общения «друг с другом» не обязательно использовать 127.0.0.1).

Опять же, это детские игры по сравнению с тем что на самом деле нужно мне.

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

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

Мимокрокодилом --

А что, большинству сетевых программ udp/tcp 53 не нужен? И по поводу chromium — ещё tcp 21 и 20.

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

AppArmor то на что?

Я присматривался к АппАрмору, не помню конкретно что, но что то мне в нем не понравилось, а тут вроде как нативно ядром поддерживается.

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