
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 username
usar --gid-owner groupname
, tendrá el mismo efecto para un grupo de usuarios completo.
Entonces, por ejemplo, para evitar que el grupo security
acceda 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.
iptables
Guardar las reglas actuales
sudo iptables-save > /etc/iptables_rules
sudo ip6tables-save > /etc/ip6tables_rules
Ábralo /etc/rc.local
con 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 iptables
opciones 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