Cómo restringir el acceso a internet para un usuario en particular en el lan usando iptables en Linux

11

Digamos que hay dos usuarios en la LAN, A y B. ¿Cómo puedo restringir el acceso del usuario A a Internet usando las reglas de iptables y guardar las reglas para que después de reiniciar, sigan siendo efectivas? Supongamos también que quiero otorgar acceso a ese usuario en algún momento; ¿Cómo lo habilito nuevamente? Estoy usando Ubuntu Linux 10.04. Sería bueno si alguien me muestra cómo hacerlo desde la línea de comandos, ya que a menudo inicio sesión en la máquina usando un inicio de sesión ssh local.

Marwan Tanager
fuente

Respuestas:

17

Supongo que los usuarios A y B están utilizando las mismas máquinas Linux en las que usted es el administrador. (No está completamente claro en su pregunta. Si A y B tienen sus propias computadoras en las que son administradores, es un problema completamente diferente).

El siguiente comando evitará que el usuario con uid 1234 envíe paquetes en la interfaz eth0:

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

Recomiendo leer la guía de iptables de Ubuntu para familiarizarse de manera básica con la herramienta (y consultar la página de manual para cosas avanzadas como la tabla de control).

El usuario aún podrá ejecutar ping (porque es raíz setuid), pero nada más. El usuario aún podrá conectarse a un proxy local si ese proxy fue iniciado por otro usuario.

Para eliminar esta regla, agregue -Dal comando anterior.

Para que la regla sea permanente, agréguela a /etc/network/if-up.d/my-user-restrictions(haga que comience con un script ejecutable #!/bin/sh). O use iptables-save(vea la guía de iptables de Ubuntu para más información).

Gilles 'SO- deja de ser malvado'
fuente
Muchas gracias. Y sí, tus suposiciones son ciertas. Según su respuesta y la guía de ubuntu mencionada, es que la forma correcta de hacer las cosas si también quisiera otorgarle al usuario restringido acceso ssh (a veces quiero iniciar sesión usando su cuenta a través de ssh): iptables -t mangle -A OUTPUT - o eth0 -m owner --uid-owner 1234 -p tcp --dport ssh -j ACEPTAR iptables -t mangle -A OUTPUT -o eth0 -m owner --uid-owner 1234 -j DROP Pongo esas reglas como están en el archivo mencionado y las cosas parecen funcionar bien.
Marwan Tanager
@ Marwan, creo que es correcto. Tenga en cuenta que si permite el acceso ssh, permite casi cualquier cosa, ya que ssh puede tunelizar trivialmente otros protocolos.
Gilles 'SO- deja de ser malvado'
0

No usaría iptables para esto.

Supongo que A y B están asociados con las IP fijas ClientA y ClientB. Supongo que su proxy de Internet es ServerI (¿su servidor Ubuntu?).

Por lo tanto, agregaría una entrada de enrutamiento denegar / soltar de ClientA a ServerI.

No uso Ubuntu, así que no puedo decirte qué archivo de configuración usar para hacer que esa configuración sea permanente (sobrevivir a un reinicio).

¿Quizás alguien puede agregar ese detalle?

Nils
fuente