単一のプロセスに対して(発信)ネットワークアクセスをブロックできますか?
ベストアンサー1
Linux 2.6.24+(2.6.29より前は実験的なものと見なされていました)では、これにはネットワークネームスペースを使用できます。CONFIG_NET_NS=y
kernel() と util-linux で「Network Namespace」を有効にして、次のものを使用する必要があります。unshare
ツール。
その後、ネットワークアクセスなしでプロセスを開始するのは簡単です。
unshare -n program ...
これにより、プロセスの空のネットワーク名前空間が作成されます。つまり、次のようなネットワークインターフェイスなしで実行されます。ループバックなし。次の例では、現在の有効なユーザーとグループIDがスーパーユーザーIDにマップされている場合にのみ、プログラムを実行するために-rを追加します(sudoを除く)。
$ unshare -r -n ping 127.0.0.1
connect: Network is unreachable
アプリケーションにネットワークインターフェイスが必要な場合は、新しいネットワークインターフェイスを設定できます。
$ 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
これにより、新しい地元のループバック。つまり、生成されたプロセスはホストの開いているポートにアクセスできません127.0.0.1
。
ネームスペース内の元のネットワークにアクセスする必要がある場合は、次のものを使用できます。nsenter
別の名前空間を入力してください。
次の例は、ping
PID 1で使用されるネットワーク名前空間を使用して実行されます(指定-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