Рішення I: Попередня завантаження певної бібліотеки
App-Route-Jail : використовуйте ld_preload, щоб змусити шлюз інтерфейсу (відмінна ідея, але вимагають можливості root або позначок) використання детально описано нижче.
Proxybound : використовуйте ld_preload, щоб примусити проксі до певної програми (для цього використовується проксі замість інтерфейсу)
Примусовий зв'язок : має багато функцій, але витоки прив'язки (не надійні)
Bind-Interface-IP : занадто прості та герметичні з'єднання (не надійно)
Bind-IP : занадто прості і герметичні з'єднання (не надійно)
Рішення II: Простір користувачів Linux
Класичний користувацький простір linux ip-netns : відмінне рішення, але вимагають root та інтерфейс можуть існувати лише в одному просторі користувача
Firejail : Firejail може змусити програму використовувати певну мережу, але сумісність обмежена (наприклад, вона не сумісна з інтерфейсами tun). firejail не потребує корінняfirejail --dns=8.8.8.8 --noprofile --net=eth0 --ip=192.168.1.1 app-command
Firejail з мережами : Firejail може змусити програму використовувати певний користувальницький простір, який був створений окремо;firejail --dns=8.8.8.8 --noprofile --netns=nameOfyourNS app-command
Firejail з маскарадом і мостом : Firejail може змусити програму використовувати специфічний інтерфейс з iptables маскарадом , це чудово і не вимагає root, але це вимагає ip_forward і може означати вплив на безпекуfirejail --net=br0 firefox
Рішення III: iptables Linux
Iptables можуть бути використані для цієї мети, але для цього потрібен ip_forward і може означати вплив безпеки, якщо його неправильно налаштовано, приклад 1 , приклад 2 , приклад 3 , приклад 4
Примітки щодо рішень (I, II та III):
Дротяник
Якщо ви використовуєте VPN (особливо провідний захист) і хочете застосувати це рішення до інтерфейсу провідного захисту ( проводка з користувальницьким простором ), ви можете дотримуватися пов'язаних інструкцій для створення користувальницького простору, що містить інтерфейс wg (і таким чином обмежується інтерфейсом vpn ) також це може поєднуватися з тим, firejail --netns=container
щоб мати можливість використовувати користувальницький простір без root.
Як знайти шлюз інтерфейсу
Існує багато рішень, щоб знайти шлюз. Ось кілька команд, які дозволяють знайти використаний шлюз
$ route
$ route -n
$ ip rule list
$ ip route show
$ netstat -rn
$ cat /etc/network/interfaces
$ cat /etc/sysconfig/network-scripts/ifcfg-eth0
$ traceroute www.google.com
$ ip route show 0.0.0.0/0 dev eth0
Як користуватися App-Route-Jail
- Побудувати додаток-маршрут-в'язницю
git clone https://github.com/Intika-Linux-Network/App-Route-Jail.git
cd Approute-Utils
chown 755 make.sh
./make.sh
- Додавання маршруту до майбутніх позначених пакетів (для в'язного додатка) у цьому прикладі
192.168.1.1
використовується як вимушений шлюз, це правило маршруту не вплине на інші програми, цю маніпуляцію потрібно робити лише один раз при завантаженні системи, наприклад, якщо ви хочете використовувати цей розчин щодня
ip rule add fwmark 10 table 100
ip route add default via 192.168.1.1 table 100
- Запустіть програму, яку ви хочете ув’язнити
MARK=10 LD_PRELOAD=./mark.so firefox
MARK=10 LD_PRELOAD=./mark.so wget -qO- ifconfig.me