解决方案一:预加载特定的库
解决方案二:Linux用户空间
经典的Linux用户空间ip-netns:很好的解决方案,但要求root和interface只能存在于一个用户空间中
Firejail:Firejail可以强制应用程序使用特定的网络,但兼容性有限(例如,它与tun接口不兼容)。firejail不需要rootfirejail --dns=8.8.8.8 --noprofile --net=eth0 --ip=192.168.1.1 app-command
使用netns的Firejail:Firejail可以强制应用程序使用单独创建的特定用户空间,这使我们无需使用root即可命名空间firejail --dns=8.8.8.8 --noprofile --netns=nameOfyourNS app-command
带有伪装和桥接的 Firejail:Firejail可以强制应用程序使用带有iptables伪装的特定接口,这很棒,不需要root用户,但是需要ip_forward并可能暗示安全影响firejail --net=br0 firefox
解决方案三:Linux iptables
iptables可以用于此目的,但这需要ip_forward,并且如果其配置不正确(例如示例1,示例2,示例3,示例4),则可能暗示安全影响。
解决方案(I,II和III)说明:
线卫
如果您使用的是VPN(尤其是Wireguard),并且想将此解决方案应用于Wireguard接口(具有用户空间的Wireguard),则可以按照链接的说明创建包含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