Solução I: pré-carregando uma biblioteca específica
App-Route-Jail : use ld_preload para forçar o gateway da interface (ótima idéia, mas requer recursos de raiz ou de marcas) o uso é detalhado nas notas abaixo
Proxybound : use ld_preload para forçar um proxy para um aplicativo específico (isso está usando proxy em vez de interface)
Force-Bind : possui muitos recursos, mas o bind vaza (não é confiável)
Bind-Interface-IP : conexões muito simples e vazadas (não confiáveis)
Bind-IP : conexões muito simples e vazamento (não confiáveis)
Solução II: espaço de usuário do Linux
IP-netns clássicos do espaço para usuário linux : a melhor solução, mas requer raiz e interface, só pode existir em um único espaço de usuário
Firejail : o Firejail pode forçar um aplicativo a usar uma rede específica, mas a compatibilidade é limitada (por exemplo, não é compatível com as interfaces tun). firejail não requer rootfirejail --dns=8.8.8.8 --noprofile --net=eth0 --ip=192.168.1.1 app-command
Firejail com netns : o Firejail pode forçar um aplicativo a usar um espaço de usuário específico que foi criado separadamente. Isso permite nomear espaços sem raizfirejail --dns=8.8.8.8 --noprofile --netns=nameOfyourNS app-command
Firejail com mascarada e ponte : o Firejail pode forçar um aplicativo a usar uma interface específica com o mascarada de iptables , isso é ótimo e não requer raiz, mas exige ip_forward e pode implicar em impacto na segurançafirejail --net=br0 firefox
Solução III: Linux iptables
Os iptables podem ser usados para essa finalidade, mas isso requer ip_forward e pode implicar em um impacto na segurança se não estiver configurado corretamente, exemplo 1 , exemplo 2 , exemplo 3 , exemplo 4
Soluções (I, II e III) observa:
Wireguard
Se você estiver usando uma VPN (especialmente wireguard) e quiser aplicar esta solução a uma interface wireguard ( wireguard com espaço do usuário ), poderá seguir o link instruído para criar um espaço de usuário contendo uma interface wg (e, portanto, limitado a uma interface VPN) ) também pode ser combinado com isso firejail --netns=container
para poder usar o espaço do usuário sem raiz.
Como encontrar o gateway de interface
Existem muitas soluções para encontrar o gateway. Aqui estão alguns comandos que permitem encontrar o gateway usado
$ 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
Como usar o App-Route-Jail
git clone https://github.com/Intika-Linux-Network/App-Route-Jail.git
cd Approute-Utils
chown 755 make.sh
./make.sh
- Adicionar uma rota para os futuros pacotes marcados (para o aplicativo preso) neste exemplo
192.168.1.1
é usado como gateway forçado; essa regra de rota não afeta outros aplicativos; essa manipulação deve ser feita apenas uma vez na inicialização do sistema, por exemplo, se você desejar use esta solução diariamente
ip rule add fwmark 10 table 100
ip route add default via 192.168.1.1 table 100
- Inicie o aplicativo que você deseja prender
MARK=10 LD_PRELOAD=./mark.so firefox
- Testando o endereço IP da WAN
MARK=10 LD_PRELOAD=./mark.so wget -qO- ifconfig.me