
Estou trabalhando na distribuição Ubuntu/Mint destinada a ser executada ao vivo. Existem várias contas que se enquadram em três grupos gerais: Admin, Internet e Segurança.
- Administradorobviamente tem autoridade para fazer o que quer que seja.
- Internetconta é para usar a Internet.
As outras contas sãoSegurançacontas. Sob nenhuma circunstância é permitida qualquer rede de Internet, impressora, Bluetooth, dispositivos WiFi, etc.
O que eu gostaria de fazer é remover os drivers de rede do kernel, mas isso desabilitaria as contas que precisam de Internet.
Quais são as formas de nível mais baixo para desativar a Internet para essas contas de segurança? Estou procurando porimpossível conectarsoluções.
Responder1
Você pode fazer isso com iptables
( ip6tables
).
Até reiniciar
Em um terminal adicione a regra aiptables
sudo iptables -A OUTPUT -p all -m owner --uid-owner username -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --uid-owner username -j DROP
ondenome de usuárioé o usuário que você deseja desativar a conexão com a Internet. Salve o arquivo e saia.
Isto adicionará uma regra a iptables
( ip6tables
) dizendo que quaisquer pacotes de saída criados pelo usuário especificado serão automaticamente descartados por ele.
Se você quiser fazer o mesmo para um grupo completo, sugiro que, em vez de --uid username
usar --gid-owner groupname
, isso terá o mesmo efeito para um grupo de usuários completo.
Então, por exemplo, para evitar que o grupo security
acesse a Internet o comando seria mais ou menos assim
sudo iptables -A OUTPUT -p all -m owner --gid-owner security -j DROP
sudo ip6tables -A OUTPUT -p all -m owner --gid-owner security -j DROP
Permanente
Para tornar a regra permanente você pode criar um script /etc/network/if-up.d/
, adicionar as linhas necessárias a ele e torná-lo executável.
Como opção, use iptables-save
( ip6tables-save
) para salvar suas regras atuais e restaurá-las na inicialização.
Salve as iptables
regras atuais
sudo iptables-save > /etc/iptables_rules
sudo ip6tables-save > /etc/ip6tables_rules
Abra /etc/rc.local
com seu editor de texto favorito e no final do arquivo adicione
/sbin/iptables-restore < /etc/iptables_rules
/sbin/ip6tables-restore < /etc/ip6tables_rules
Isso irá restaurar as regras salvas em cada inicialização. Tenha cuidado ao perceber issoos usuários para os quais você bloqueou apenas conexões IPv4 ainda poderão se conectar à Internet.
Para mais informações e mais diversas iptables
opções consulte o seupágina de manual.
Responder2
A solução de Bruno é boa: acho que provavelmente é a melhor solução independente.
Outra opção que você pode pensar é configurar um firewall/proxy em uma máquina separada, como gateway para a internet, que só permite conexões que forneçam autenticação por usuário. Você pode usar os dois juntos para proteção extra.
Responder3
Sefirewalldfaz parte da sua configuração, você pode bloquear o acesso à rede para um usuário específico usando uma regra direta, por exemplo:
/etc/firewalld/direct.xml
‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾‾
<?xml version="1.0" encoding="utf-8"?>
<direct>
<chain ipv="ipv4"
table="filter"
chain="restrict_user_ipv4"/>
<rule ipv="ipv4"
table="filter"
chain="OUTPUT"
priority="1">-m owner --uid-owner user -j restrict_user_ipv4</rule>
<rule ipv="ipv4"
table="filter"
chain="restrict_user_ipv4"
priority="3">-j DROP</rule>
<chain ipv="ipv6"
table="filter"
chain="restrict_user_ipv6"/>
<rule ipv="ipv6"
table="filter"
chain="OUTPUT"
priority="1">-m owner --uid-owner user -j restrict_user_ipv6</rule>
<rule ipv="ipv6"
table="filter"
chain="restrict_user_ipv6"
priority="3">-j DROP</rule>
</direct>
Não se esqueça de recarregar com
# firewall-cmd --reload