¿Cómo restringir el acceso del usuario a Internet por intervalos de tiempo?
12
Quiero que uno de los usuarios (que no esté en la lista de sudoers) tenga acceso a Internet de 14:00 a 16:00 y de 17:00 a 18:30. ¿Es posible? ¿Puedo establecer diferentes intervalos de tiempo para diferentes días de la semana?
Sería mejor hacerlo en un nivel de control de enrutador o puerta de enlace, en lugar de hacerlo en el sistema en sí mismo ... que yo sepa, no hay un sistema fácil dentro de Ubuntu para restringir el acceso a Internet a nivel de usuario.
Thomas Ward
Cuando lo haga en el nivel del enrutador, entonces todos los usuarios estarán restringidos ... ''
dijo el
Afaik (y he estado buscando una solución para esto desde 9.04), no hay soluciones de software para esto. De acuerdo, en mis redes, solo hay un usuario por computadora, y todos se conectan a través de una caja de servidor que actúa como puerta de enlace. Ese cuadro tiene un crontab que bloquea todo el acceso a Internet en ese sistema y luego lo elimina más adelante; posteriormente también se ejecuta a diferentes horas cada día. Por curiosidad, ¿por qué necesita restringir el acceso a ese estricto período de tiempo y por qué debe hacerlo el usuario?
Thomas Ward
Lo necesito por usuario, porque dos usuarios usan una PC. y quiero restringir el acceso, porque el segundo usuario debe aprender mucho más y no quedarse en Facebook :) pero tu idea con el crontab es buena ... ¿qué estás usando para bloquear el acceso? Puedo hacer lo mismo para el usuario, al bloquear el router :)
cupakob
Mi enrutador y mi cuadro de puerta de enlace están separados: como el cuadro de puerta de enlace asigna una dirección estática (y por lo tanto maneja los datos) de los otros cuadros, uso iptables para bloquear la dirección IP privada asignada estática para que no envíe datos entrantes o salientes, lo que por lo tanto bloquea TODO el tráfico de internet a la caja. Cada crontabs usa su propio comando iptables para eliminar elementos en un horario. Es un sistema imperfecto, porque podría comprar un enrutador que funcione mejor: P
Thomas Ward
Respuestas:
7
Puede usar la ownerextensión de iptables para bloquear el acceso de un usuario a la red, como
sudo iptables -A OUTPUT -m owner --uid-owner user_you_want_to_block -j REJECT
Ahora puede usar cron para agregar o eliminar esas reglas (que pueden necesitar un poco de scripting de shell si ya tiene algunas reglas de iptable o si lo desea para diferentes usuarios en diferentes momentos).
Ooh, no sabía que existía: P @Florian: (a) ¿qué módulos del núcleo deben cargarse para esto? (b) ¿funciona con esto -j REJECT --reject-with <argument>?
Thomas Ward
(a) xt_owner se carga automáticamente. (b) No veo ninguna razón por la cual --reject-with no funcione con esto pero nunca lo haya intentado.
Florian Diesch
Probaré esto más adelante: P ¿Existe el módulo propietario en las páginas de manual de iptables para detallar su uso? (Nota al margen: pregunté qué módulo del kernel porque mi kernel está compilado a medida: /)
Thomas Ward
se ve exactamente lo que estoy buscando ... debo probarlo :)
cupakob
@EvilPhoenix: Sí, está documentado en la página de
manual de
8
iniciar sesión como root:
sudo su
verifique el estado de su firewall:
ufw status
Si el firewall está inactivo , emita:
ufw enable
con el fin de restringir el usuario Wilhelm acceso a Internet de los domingos, martes, miércoles y viernes a los intervalos de tiempo permitidos (14: 00-16: 00 y 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 al margen : * tenga en cuenta el uso del -Iinterruptor en lugar del -Ainterruptor del iptablescomando. el -Iinterruptor inserta las reglas antes mencionadas (3.) al principio (arriba) de la cadena de reglas de SALIDA en lugar de en la parte inferior de la cadena. colocar las reglas agregadas manualmente encima de las políticas de firewall normales es importante ya que las reglas se procesan de arriba a abajo. Si la mayoría de las reglas ACEPTAN un paquete, la cadena, SALIDA, ya no se verifica para las siguientes reglas que podrían haber CAÍDO el paquete.
asegúrese de que las reglas se hayan introducido correctamente:
iptables -L OUTPUT
con el fin de eliminar una regla apropiada, por ejemplo (recuento basado en 1 desde la parte superior de la regla Nº 1, iptables -v -L OUTPUT) tema: iptables -D OUTPUT 1.
guardar iptables para restaurar en el próximo arranque:
Gran respuesta con una solución perfecta! Pero tenga en cuenta que todos los tiempos se interpretan como UTC , por lo que es posible que tenga que compensarlos manualmente para la hora local, en mi caso central european summer time -2 hours.
Precise Penguin
Hice todos los pasos y funcionaron (el acceso a Internet era limitado) pero después de reiniciar, Internet volvió a funcionar. Revisé iptables -L OUTPUT y no encontré las reglas que agregué ...
Lawand
1
¿Cuál es la razón por la que está habilitando ufwaunque luego la use iptables?
balu
@PrecisePenguin que se puede arreglar con la --kerneltzopción ("Usar la zona horaria del núcleo en lugar de UTC")
Respuestas:
Puede usar la
owner
extensión de iptables para bloquear el acceso de un usuario a la red, comoAhora puede usar cron para agregar o eliminar esas reglas (que pueden necesitar un poco de scripting de shell si ya tiene algunas reglas de iptable o si lo desea para diferentes usuarios en diferentes momentos).
fuente
-j REJECT --reject-with <argument>
?iniciar sesión como root:
sudo su
verifique el estado de su firewall:
Si el firewall está inactivo , emita:
con el fin de restringir el usuario Wilhelm acceso a Internet de los domingos, martes, miércoles y viernes a los intervalos de tiempo permitidos (14: 00-16: 00 y 17: 00-18: 30):
nota al margen : * tenga en cuenta el uso del
-I
interruptor en lugar del-A
interruptor deliptables
comando. el-I
interruptor inserta las reglas antes mencionadas (3.) al principio (arriba) de la cadena de reglas de SALIDA en lugar de en la parte inferior de la cadena. colocar las reglas agregadas manualmente encima de las políticas de firewall normales es importante ya que las reglas se procesan de arriba a abajo. Si la mayoría de las reglas ACEPTAN un paquete, la cadena, SALIDA, ya no se verifica para las siguientes reglas que podrían haber CAÍDO el paquete.asegúrese de que las reglas se hayan introducido correctamente:
con el fin de eliminar una regla apropiada, por ejemplo (recuento basado en 1 desde la parte superior de la regla Nº 1,
iptables -v -L OUTPUT
) tema:iptables -D OUTPUT 1
.guardar iptables para restaurar en el próximo arranque:
en
/etc/rc.local
agregar la línea:hecho
-
probado en Ubuntu 11.10 (oneiric), locale: he
fuente
central european summer time -2 hours
.ufw
aunque luego la useiptables
?--kerneltz
opción ("Usar la zona horaria del núcleo en lugar de UTC")