Como restringir o acesso do usuário à Internet por intervalos de tempo?
12
Desejo que um dos usuários (que não esteja na lista de sudoers) tenha acesso à Internet das 14:00 às 16:00 e das 17:00 às 18:30. É possível? Posso definir intervalos de tempo diferentes para diferentes dias da semana?
É melhor fazer isso no nível de controle de roteador ou gateway, e não no próprio sistema ... até onde eu sei, não existe um sistema fácil no Ubuntu para restringir o acesso à Internet no nível do usuário.
Thomas Ward
Quando eu fazê-lo em nível do roteador, em seguida, todos os usuários serão restritos ...
cupakob
Afaik (e estou procurando uma solução para isso desde 9.04), não há soluções de software para isso. É verdade que, nas minhas redes, há apenas um usuário por computador, e todos eles se conectam através de uma caixa de servidor que atua como gateway. Essa caixa possui um crontab que bloqueia todo o acesso à Internet nesse sistema e o remove posteriormente; posteriormente, também é executado em horários diferentes a cada dia. Por curiosidade, por que você precisa restringir o acesso a esse período estrito e por que precisa fazer isso pelo usuário?
Thomas Ward
eu preciso dele pelo usuário, porque um pc é usado por dois usuários. e eu quero restringir o acesso, porque o segundo usuário deve aprender muito mais e não ficar no facebook :) mas sua ideia com o crontab é boa .... o que você está usando para bloquear o acesso? Eu posso fazer o mesmo para o usuário, quando eu bloquear o roteador :)
cupakob
Meu roteador e minha caixa de gateway são separados - como a caixa de gateway atribui um endereço estático (e, portanto, manipula os dados) das outras caixas, eu uso o iptables para bloquear o endereço IP privado atribuído à estática de enviar dados de entrada ou de saída, o que bloqueia TODO o tráfego da Internet na caixa. Cada crontabs usa seu próprio comando iptables para remover itens em uma programação. É um sistema imperfeito, porque eu poderia comprar um roteador que funcionasse melhor: P
Thomas Ward
Respostas:
7
Você pode usar a ownerextensão do iptables para impedir que um usuário acesse a rede, como
sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT
Agora você pode usar o cron para adicionar ou remover essas regras (que podem precisar de um pouco de script de shell se você já possui algumas regras de iptable ou deseja isso para usuários diferentes em momentos diferentes).
Ooh, eu não sabia que existia: P @Florian: (a) quais módulos do kernel precisam ser carregados para isso? (b) isso funciona -j REJECT --reject-with <argument>?
Thomas Ward
(a) xt_owner é carregado automaticamente. (b) Não vejo razão para que --reject-with não deva funcionar com isso, mas nunca tentei.
Florian Diesch
Vou testar isso mais tarde: P O módulo proprietário existe nas páginas de manual do iptables, para detalhar seu uso? (Observação: perguntei qual módulo do kernel, porque meu kernel é compilado de forma personalizada: /)
Thomas Ward
parece exatamente o que eu estou procurando .... i deve experimentar :)
cupakob
@EvilPhoenix: Sim, ele está documentado no iptables manpage
Florian Diesch
8
faça login como root:
sudo su
verifique o status do seu firewall:
ufw status
se o firewall estiver inativo , emita:
ufw enable
para restringir o acesso à Internet do usuário wilhelm aos domingos, terças, quartas e sextas-feiras nos intervalos de tempo permitidos (14: 00-16: 00 e 17: 00-18: 30):
iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 00:00:01 --timestop 14:00:00 -j DROP
iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 16:00:00 --timestop 17:00:00 -j DROP
iptables -I OUTPUT -p tcp -m owner --uid-owner wilhelm -m time --weekdays Su,Tu,We,Fr --timestart 18:30:00 --timestop 23:59:59 -j DROP
nota lateral : * observe o uso do -Iswitch em vez do -Aswitch do iptablescomando. o -Icomutador insere as regras mencionadas (3.) acima, no início (topo) da cadeia de regras OUTPUT, e não na parte inferior da cadeia. é importante colocar as regras anexadas manualmente sobre as políticas regulares de firewall, pois as regras são processadas de cima para baixo. se as regras mais comuns ACEITARem um pacote, a cadeia OUTPUT não será mais verificada pelas seguintes regras que podem ter deixado o pacote cair.
verifique se as regras foram realmente inseridas corretamente:
iptables -L OUTPUT
a fim de excluir uma regra inapropriada, dizem (contagem de 1-based da parte superior da regra número 1, iptables -v -L OUTPUT) questão: iptables -D OUTPUT 1.
salve iptables para restaurar na próxima inicialização:
Ótima resposta com uma solução perfeita! Mas observe que todos os horários são interpretados como UTC , portanto, pode ser necessário compensá-los manualmente para o horário local - no meu caso central european summer time -2 hours.
Precise Penguin
Eu fiz todas as etapas e elas funcionaram (o acesso à Internet era limitado), mas após reiniciar, a Internet voltou a funcionar. Eu verifiquei iptables -L OUTPUT e não encontrou as regras I adicionados ...
Lawand
1
Qual o motivo pelo qual você está ativando, ufwmesmo depois de usá-lo iptables?
balu
@PrecisePenguin que pode ser corrigido com a --kerneltzopção ("Usar o fuso horário do kernel em vez do UTC")
Respostas:
Você pode usar a
owner
extensão do iptables para impedir que um usuário acesse a rede, comoAgora você pode usar o cron para adicionar ou remover essas regras (que podem precisar de um pouco de script de shell se você já possui algumas regras de iptable ou deseja isso para usuários diferentes em momentos diferentes).
fonte
-j REJECT --reject-with <argument>
?faça login como root:
sudo su
verifique o status do seu firewall:
se o firewall estiver inativo , emita:
para restringir o acesso à Internet do usuário wilhelm aos domingos, terças, quartas e sextas-feiras nos intervalos de tempo permitidos (14: 00-16: 00 e 17: 00-18: 30):
nota lateral : * observe o uso do
-I
switch em vez do-A
switch doiptables
comando. o-I
comutador insere as regras mencionadas (3.) acima, no início (topo) da cadeia de regras OUTPUT, e não na parte inferior da cadeia. é importante colocar as regras anexadas manualmente sobre as políticas regulares de firewall, pois as regras são processadas de cima para baixo. se as regras mais comuns ACEITARem um pacote, a cadeia OUTPUT não será mais verificada pelas seguintes regras que podem ter deixado o pacote cair.verifique se as regras foram realmente inseridas corretamente:
a fim de excluir uma regra inapropriada, dizem (contagem de 1-based da parte superior da regra número 1,
iptables -v -L OUTPUT
) questão:iptables -D OUTPUT 1
.salve iptables para restaurar na próxima inicialização:
em
/etc/rc.local
acrescentar a linha:feito
-
testado no Ubuntu 11.10 (oneiric), locale: ele
fonte
central european summer time -2 hours
.ufw
mesmo depois de usá-loiptables
?--kerneltz
opção ("Usar o fuso horário do kernel em vez do UTC")