Como restringir o acesso à Internet para um usuário específico na LAN usando iptables no Linux

11

Digamos que haja dois usuários na LAN, A e B. Como faço para restringir o acesso do usuário A à Internet usando as regras do iptables e salvando as regras para que, após a reinicialização, elas continuem efetivas. Suponha também que eu queira conceder acesso a esse usuário em algum momento; como ativá-lo novamente? Estou usando o Ubuntu Linux 10.04. Seria bom se alguém me mostrasse como fazê-lo na linha de comando, já que costumo fazer login na máquina usando um login ssh local.

Marwan Tanager
fonte

Respostas:

17

Suponho que os usuários A e B estejam usando as mesmas máquinas Linux em que você é o administrador. (Não está completamente claro em sua pergunta. Se A e B têm computadores próprios nos quais são administradores, é um problema completamente diferente.)

O comando a seguir impedirá o usuário do uid 1234 de enviar pacotes na interface eth0:

iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP

Eu recomendo a leitura do guia iptables do Ubuntu para obter familiaridade básica com a ferramenta (e consulte a página de manual para obter informações avançadas, como a tabela mangle).

O usuário ainda poderá executar o ping (porque é raiz setuid), mas nada mais. O usuário ainda poderá se conectar a um proxy local se esse proxy tiver sido iniciado por outro usuário.

Para remover esta regra, adicione -Dao comando acima.

Para tornar a regra permanente, adicione-a a /etc/network/if-up.d/my-user-restrictions(torne esse um script executável começando com #!/bin/sh). Ou use iptables-save(consulte o guia iptables do Ubuntu para obter mais informações).

Gilles 'SO- parar de ser mau'
fonte
Muito obrigado. E sim, suas suposições são verdadeiras. Com base na sua resposta e no guia do ubuntu mencionado, é a maneira correta de fazer as coisas, se eu também quiser conceder acesso restrito ao ssh do usuário (às vezes, quero fazer login usando sua conta no ssh): iptables -t mangle -A OUTPUT - o eth0 -m owner --uid-owner 1234 -p tcp --dport ssh -j ACEITAR iptables -t mangle -A SAÍDA -o eth0 -m owner --uid-owner 1234 -j DROP Coloquei essas regras como estão em o arquivo mencionado e as coisas parecem funcionar bem.
Marwan Tanager
@ Marwan Acho que está certo. Observe que se você permitir o acesso ao ssh, poderá permitir praticamente qualquer coisa, já que o ssh pode canalizar trivialmente outros protocolos.
Gilles 'SO- stop be evil'
0

Eu não usaria o iptables para isso.

Suponho que A e B estejam associados aos IPs fixos ClientA e ClientB. Presumo que o seu proxy da Internet seja o ServerI (o seu Ubuntu-Server?).

Então, eu adicionaria uma entrada de roteamento de negar / soltar do ClientA para o ServerI.

Eu não uso o Ubuntu - portanto, não posso dizer qual arquivo de configuração usar para tornar essa configuração permanente (sobrevivendo a uma reinicialização).

Talvez alguém possa adicionar esse detalhe?

Nils
fonte