プロセスへのネットワークアクセスをブロックしますか?

プロセスへのネットワークアクセスをブロックしますか?

単一のプロセスに対して(発信)ネットワークアクセスをブロックできますか?

ベストアンサー1

Linux 2.6.24+(2.6.29より前は実験的なものと見なされていました)では、これにはネットワークネームスペースを使用できます。CONFIG_NET_NS=ykernel() と util-linux で「Ne​​twork 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別の名前空間を入力してください。

次の例は、pingPID 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

おすすめ記事