Ist es möglich, den (ausgehenden) Netzwerkzugriff eines einzelnen Prozesses zu blockieren?
Akzeptierte Antwort:
Mit Linux 2.6.24+ (bis 2.6.29 als experimentell betrachtet) können Sie dafür Netzwerk-Namespaces verwenden. Sie müssen die „Netzwerk-Namespaces“ in Ihrem Kernel aktiviert haben (CONFIG_NET_NS=y
) und util-linux mit dem unshare
Werkzeug.
Dann ist das Starten eines Prozesses ohne Netzwerkzugriff so einfach wie:
unshare -n program ...
Dadurch wird ein leerer Netzwerk-Namespace für den Prozess erstellt. Das heißt, es wird ohne Netzwerkschnittstellen ausgeführt, einschließlich kein Loopback . Im folgenden Beispiel fügen wir -r hinzu, um das Programm erst auszuführen, nachdem die aktuellen effektiven Benutzer- und Gruppen-IDs den Superuser-IDs zugeordnet wurden (vermeiden Sie sudo):
$ unshare -r -n ping 127.0.0.1
connect: Network is unreachable
Wenn Ihre App eine Netzwerkschnittstelle benötigt, können Sie eine neue einrichten:
$ 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
Beachten Sie, dass dadurch eine neue, lokale erstellt wird Schleife. Das heißt, der erzeugte Prozess kann nicht auf offene Ports von 127.0.0.1
des Hosts zugreifen .
Wenn Sie Zugriff auf das ursprüngliche Netzwerk innerhalb des Namensraums benötigen, können Sie nsenter
verwenden um den anderen Namensraum einzugeben.
Im folgenden Beispiel wird ping
ausgeführt mit Netzwerknamensraum, der von PID 1 verwendet wird (wird durch -t 1
angegeben). ):
$ 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