GNU/Linux >> Tutoriales Linux >  >> Linux

¿Bloquear el acceso a la red de un proceso?

Con Linux 2.6.24+ (considerado experimental hasta 2.6.29), puede usar espacios de nombres de red para eso. Debe tener habilitados los 'espacios de nombres de red' en su núcleo (CONFIG_NET_NS=y ) y util-linux con el unshare herramienta.

Entonces, iniciar un proceso sin acceso a la red es tan simple como:

unshare -n program ...

Esto crea un espacio de nombres de red vacío para el proceso. Es decir, se ejecuta sin interfaces de red, incluido sin loopback . En el siguiente ejemplo, agregamos -r para ejecutar el programa solo después de que las ID de usuario y grupo efectivas actuales se hayan asignado a las de superusuario (evite sudo):

$ unshare -r -n ping 127.0.0.1
connect: Network is unreachable

Si su aplicación necesita una interfaz de red, puede configurar una nueva:

$ unshare -n -- sh -c 'ip link set dev lo up; ping 127.0.0.1'
PING 127.0.0.1 (127.0.0.1) 56(84) bytes of data.
64 bytes from 127.0.0.1: icmp_seq=1 ttl=32 time=0.066 ms

Tenga en cuenta que esto creará un nuevo local bucle invertido Es decir, el proceso generado no podrá acceder a los puertos abiertos del 127.0.0.1 del host. .

Si necesita obtener acceso a la red original dentro del espacio de nombres, puede usar nsenter para ingresar el otro espacio de nombres.

El siguiente ejemplo ejecuta ping con espacio de nombres de red que utiliza PID 1 (se especifica a través de -t 1 ):

$ nsenter -n -t 1 -- ping -c4 example.com
PING example.com (93.184.216.119) 56(84) bytes of data.
64 bytes from 93.184.216.119: icmp_seq=1 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=2 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=3 ttl=50 time=134 ms
64 bytes from 93.184.216.119: icmp_seq=4 ttl=50 time=139 ms

--- example.com ping statistics ---
4 packets transmitted, 4 received, 0% packet loss, time 3004ms
rtt min/avg/max/mdev = 134.621/136.028/139.848/2.252 ms

Linux tiene una función llamada espacios de nombres de red que le permite tener esencialmente varias pilas de red en la misma máquina y asignar una a un programa cuando lo ejecuta. Esta es una característica que normalmente se usa para contenedores, pero también puede usarla para lograr lo que desea.

El ip netns los subcomandos lo administran. Crear un nuevo espacio de nombres de red sin acceso a nada es fácil, es el estado predeterminado de un nuevo espacio de nombres:

[email protected]:~# ip netns add jail

Ahora, si cambia a ese espacio de nombres, puede configurarlo con bastante facilidad. Probablemente querrá mencionar lo, y eso es todo:

[email protected]:~# ip netns exec jail /bin/bash
[email protected]:~# ip addr add 127.0.0.1/8 dev lo
[email protected]:~# ip link set dev lo up
[email protected]:~# exit

Ahora, cuando desee ejecutar su comando sin red, simplemente ejecútelo en esa cárcel:

[email protected]:~# ip netns exec jail su user -c 'ping  8.8.8.8'
connect: Network is unreachable

La red es, como se desea, inalcanzable. (Puede hacer todo tipo de cosas interesantes ya que una pila de red independiente incluye iptables reglas, etc.)


Podría usar iptables y mover ese proceso a un cgroup:

mkdir /sys/fs/cgroup/net_cls/block
echo 42 > /sys/fs/cgroup/net_cls/block/net_cls.classid

iptables -A OUTPUT -m cgroup --cgroup 42 -j DROP

echo [pid] > /sys/fs/cgroup/net_cls/block/tasks

Linux
  1. Linux – ¿Bloquear el acceso a la red de un proceso?

  2. Descendientes del proceso?

  3. ¿Por qué la eliminación de Iptables "rompió" el acceso a la red?

  4. Bloquear el acceso al sitio en días y horas específicos

  5. pthread_exit frente a retorno

Cómo bloquear el acceso a wp-admin y wp-login en Nginx/Apache

Tutorial de Linux NBD:Guía de inicio de dispositivo de bloque de red

Cómo acceder al espacio de nombres de red del contenedor Docker desde el host

Servicio de sistema operativo Linux 'red'

Crear proceso zombie

No se puede acceder a sitios web seleccionados en Linux (pero sí en Windows)