Bloquear um usuário de acessar a Internet no Linux

5

Como faço para impedir que um usuário acesse a internet no Linux?

Estou tentando o seguinte:

iptables -A OUTPUT -p tcp --dport 80,443 -m owner --uid-owner $USERNAME -j DROP

Essa é a sintaxe ou o comando correto?

    
por random 29.11.2009 / 09:32

3 respostas

4

E então eu faço ssh myhost.somewhere.onthe.internet.example.com -D 12345 , aponto meu navegador para usar o proxy SOCKS localhost:12345 , e vou em meu caminho alegre.

Em outras palavras, a inclusão de portas específicas na lista negra não é suficiente; talvez você queira bloquear o acesso à rede all :

iptables -A OUTPUT -m owner --uid-owner $USERNAME -j DROP

Observe que pode haver necessidade de acessar certos recursos de rede (por exemplo, compartilhamentos de rede local), portanto, talvez seja necessário colocar na lista de permissões (ou, talvez, colocar o bloco de rede local na lista de permissões).

    
por 11.10.2011 / 14:46
0

Este comando só irá bloquear o acesso do usuário à World Wide Web, não a toda a Internet.

Além disso, deve funcionar, supondo que seja executado na mesma máquina em que $USERNAME está trabalhando.

    
por 29.11.2009 / 17:17
0

Primeiro de tudo

iptables é o comando certo para fazer o trabalho. Mas geralmente você usaria uma quantidade razoável de comandos para configurar uma tabela completa. 1 comando é uma alternação para a tabela.

Para descobrir as tabelas já em vigor e a política padrão, se nenhuma regra for correspondida, use iptables -L . Geralmente, é necessário escrever um script contendo todas as configurações do iptables. Onde, a princípio, você libera todas as correntes e depois coloca tudo de uma vez. Isso é para evitar perder o que está dentro e fora.

Além disso, verifique sua implementação init se houver scripts de inicialização disponíveis para tornar suas alterações persistentes em ciclos de energia. (Normalmente, suas tabelas são perdidas após a reinicialização).

Basta criar um script para incluir todos os comandos do iptables:

#!/bin/bash
# Flush all chains
iptables -F

#Set defaults policies
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
iptables -P FORWARD DROP

# Don't block localhost traffic
iptables -A INPUT -i lo -j ACCEPT
# Don't re-evaluate already accepted connections
iptables -A INPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

#Allowed incomming tcp ports
iptables -A INPUT -p tcp --dport 22 -m conntrack --ctstate NEW -j ACCEPT # SSH
# Add watherver you wish to allow more

Veja este artigo para mais dicas sobre regras iptable padrão.

Agora responda sua pergunta

Primeiramente, precisamos garantir que você tenha um firewall básico instalado e funcionando. Agora, você pode adicionar sua regra ao seu script para entrar em vigor. Por favor, leve em conta as sugestões das outras respostas: um usuário pode facilmente contornar duas portas bloqueadas com um proxy ou portas alternativas.

Além disso, sua sintaxe não estava correta. --dport pode usar apenas uma porta. Você precisa usar o módulo multi port ou encadear várias regras para fazer isso.

No entanto, bloquear todas as conexões de saída desse usuário fará com que muitos aplicativos falhem, pois eles dependem da conexão lo localizada em localhost ou 127.0.0.1 . (Por exemplo, se você estiver usando o KDM / KDE, seu sistema congelará durante o login).

Você precisa excluir a interface de rede lo da sua regra. Se ainda assim você quiser permitir que o usuário acesse apenas determinados serviços, basta criar uma regra antes da regra DROP, permitindo essas portas. Eu sugeriria o seguinte:

# Don't re-evaluate already ACCEPTed connections:
iptables -A OUTPUT -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT

# Allow an outgoing connection, like SSH
iptables -A OUTPUT -p tcp --dport 22 -m owner --uid-owner $USERNAME -j ACCEPT

# Drop anything else that not on localhost
iptables -A OUTPUT ! -o lo -m owner --uid-owner $USERNAME -j DROP
    
por 01.11.2014 / 21:53