Posso limitar um usuário (e seus aplicativos) a uma interface de rede?

15

Na verdade, tenho dois cenários para aplicar isso:

  1. Área de trabalho multissetorial: duas conexões de rede com gateways da Internet e duas contas executando tarefas que exigem muita largura de banda em cada uma. Quero dividi-los para que uma conta use apenas eth0 e a segunda conta use eth1.

  2. Servidor: tenho dois IPs em um servidor e quero garantir que o usuário do email envie apenas emails do segundo IP (apelido eth0: 1)

O segundo provavelmente pode ser IPTabled (apenas não sei como) para rotear o tráfego de email por essa interface, mas o primeiro será lidar com todos os tipos de tráfego, por isso precisa ser baseado no usuário. Se houver uma solução baseada no usuário, eu poderia aplicar isso nos dois lugares.

Oli
fonte

Respostas:

6

Você vai querer usar o módulo proprietário do iptables e talvez alguns pacotes inteligentes de manipulação.

proprietário Este módulo tenta corresponder a várias características do criador de pacotes, para pacotes gerados localmente. É válido apenas na cadeia OUTPUT e, mesmo assim, alguns pacotes (como respostas de ping ICMP) podem não ter proprietário e, portanto, nunca coincidem.

--uid-owner userid Corresponde se o pacote foi criado por um processo com o ID do usuário (numérico) efetivo especificado.

--gid-owner groupid Corresponde se o pacote foi criado por um processo com o ID do grupo (numérico) efetivo especificado.

--pid-owner processid Corresponde se o pacote foi criado por um processo com o ID de processo fornecido.

--sid-owner sessionid Corresponde se o pacote foi criado por um processo no grupo de sessões especificado.

Li Lo
fonte
Você pode usar o iptables para definir a marca, que poderá ser usada na tabela de roteamento. Veja os destinos MARK e CONNMARK. No iproute, é então 'ip rule add fwmark X ...' Eu não ficaria surpreso, na verdade, se o iproute2 sozinho pudesse fazer isso ...
derobert
3
Sendo alguém que fez um trabalho extenso com a correspondência do proprietário, posso dizer que isso nem sempre produz o resultado desejado. Ou seja, nem todos os pacotes têm um proprietário como você espera. ICMP e ESP são tipos pertencentes ao kernel (ou raiz), independentemente do aplicativo de origem e não serão correspondidos por -m owner. É bastante confiável com TCP e UDP, mas outros tipos não são tão confiáveis. A única maneira confiável de atingir esse 100% é com VMs ou contêineres.
bahamat
1

Não sei se isso é possível para o primeiro ponto. Você deseja fazer alguma manipulação de roteamento com base no ID do usuário. A última vez que verifiquei, não vi essa possibilidade.

Para o segundo ponto, não são as tabelas de ip que você deseja usar, mas o iproute2 (http://lartc.org/howto/ e http://www.policyrouting.org/iproute2.doc.html para o documento completo). É a substituição dos comandos ifconfig / route, pois eles são considerados obsoletos. O iproute2 permite rotear pacotes de acordo com sua origem. É isso que você quer

Luc Stepniewski
fonte