Deshabilitar la red para usuarios específicos

Deshabilitar la red para usuarios específicos

Estoy trabajando en una distribución Ubuntu/Mint destinada a ejecutarse en vivo. Hay varias cuentas que se dividen en tres grupos generales: Administrador, Internet y Seguridad.

  • AdministraciónObviamente tiene la autoridad para hacer lo que sea.
  • InternetLa cuenta es para usar Internet.

Las otras cuentas sonSeguridadcuentas. Bajo ninguna circunstancia se permiten redes de Internet, impresoras, Bluetooth, dispositivos WiFi, etc.

Lo que me gustaría hacer es eliminar los controladores de red del kernel, pero eso desactivaría las cuentas que necesitan Internet.

¿Cuáles son las formas de nivel más bajo para desactivar Internet para estas cuentas de seguridad? Estoy buscandoimposible de conectarsoluciones.

Respuesta1

Puedes hacerlo con iptables( ip6tables).

Hasta reiniciar

En una terminal agregue la regla 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

dóndenombre de usuarioes el usuario al que desea desactivar la conexión a Internet. Guarda el archivo y cierra.

Esto agregará una regla a iptables( ip6tables) que indica que cualquier paquete saliente creado por el usuario especificado será descartado automáticamente.

Si desea hacer lo mismo para un grupo completo, le sugiero que en lugar de --uid usernameusar --gid-owner groupname, tendrá el mismo efecto para un grupo de usuarios completo.

Entonces, por ejemplo, para evitar que el grupo securityacceda a Internet, el comando se vería así

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 que la regla sea permanente, puede crear un script en /etc/network/if-up.d/, agregarle las líneas necesarias y hacerlo ejecutable.

Como opción, utilice iptables-save( ip6tables-save) para guardar sus reglas actuales y restaurarlas al arrancar.

iptablesGuardar las reglas actuales

sudo iptables-save > /etc/iptables_rules
sudo ip6tables-save > /etc/ip6tables_rules

Ábralo /etc/rc.localcon su editor de texto favorito y al final del archivo agregue

/sbin/iptables-restore < /etc/iptables_rules
/sbin/ip6tables-restore < /etc/ip6tables_rules

Eso restaurará las reglas guardadas en cada arranque. Tenga cuidado al notar queLos usuarios para los cuales bloqueó solo las conexiones ipv4 aún podrán conectarse a Internet.

Para más información y varias iptablesopciones más consulta supágina de manual.

Respuesta2

La solución de Bruno es buena: creo que probablemente sea la mejor solución autónoma.

Otra opción en la que puede pensar es configurar un firewall/proxy en una máquina separada, como puerta de enlace a Internet, que solo permita conexiones que proporcionen autenticación por usuario. Puedes usar ambos juntos para obtener protección adicional.

Respuesta3

Sicortafuegoses parte de su configuración, puede bloquear el acceso a la red para un usuario específico usando una regla directa, es decir:

/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>

No olvides recargar con

# firewall-cmd --reload

Referencias

información relacionada