LINUX.ORG.RU
решено ФорумAdmin

заблокировать сеть для программы

 ,


0

2

Есть такая тема: http://unix.stackexchange.com/questions/68956/block-network-access-of-a-process

unshare -n ping 127.0.0.1
connect: Network is unreachable
unshare -n -- sh -c 'ifconfig lo up; ping 127.0.0.1'
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0.066 ms

Это позволяет вырубить сеть для приложения, но если ему нужно loopback - можно и вернуть. Это работает.

Моя проблема такая - программа хочет интерфейс с MAC-адресом, таким как у eth0, однако unshare -n его полностью убирает. Есть ли возможность вернуть eth0 но так, чтобы программа не видела интернета?

Может есть другой способ сделать так, чтобы программа думала что интернета нет и не могла пробиться куда либо? Просто unshare это позволяет для отдельной цепочки процесса и его подпроцессов - супер, но мне надо чтобы интерфейс с его MAC-адресом всё же был виден.

Если нужен фиксированные MAC, то veth + netns

vel ★★★★★
()

Можно средствами iptables резать исходящее наружу по UID/GID.
Можно заюзать интерфейс dummy.
Можно запихнуть программу в контейнер с требуемым конфигом сети.

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

snaf

Вот я попробовал оба этих способа:

http://askubuntu.com/questions/19346/how-to-block-internet-access-for-wine-ap...

http://askubuntu.com/questions/45072/how-to-control-internet-access-for-each-...

Это лучше чем «unshare -n» - интернет блокируется а интерфейсы видны, однако возникают проблемы при коннекте программ по части loopback, что очень нужно для работы этого ПО.

Похоже это

iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
радикально глушит все пакеты. Как мне модифицировать это правило, чтобы loopback (127.0.0.1) работал без проблем?

I-Love-Microsoft ★★★★★
() автор топика
Ответ на: комментарий от ArcFi
sudo iptables -A OUTPUT -m owner --gid-owner no-internet -j DROP
sudo iptables -I INPUT -m owner --gid-owner no-internet -i lo -j ACCEPT
sudo iptables -I OUTPUT -m owner --gid-owner no-internet -o lo -j ACCEPT
sudo -g no-internet bash -c 'ping 8.8.8.8 -W 1 -c 5'

Ура! Работает как надо теперь! Если запускать от группы no-internet при помощи sudo -g no-internet.

I-Love-Microsoft ★★★★★
() автор топика

Я тоже начинал с unshare. Но из-коробки он только под админом завёлся, если не путаю. А вот есть NoNetwork. Там топорно простым способом без рута используется LD_PRELOAD.

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

Спасибо, любопытно. Хотя... «Do not use for sandboxing and security! The network access can be easily re-enabled, e.g. by removing LD_PRELOAD environment variable», но не думаю что софт делает такие финты.

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