GNU/Linux >> Linux の 問題 >  >> Linux

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

Linux 2.6.24+ (2.6.29 までは実験的と見なされていた) では、そのためにネットワーク名前空間を使用できます。カーネルで「ネットワーク名前空間」を有効にする必要があります (CONFIG_NET_NS=y ) および unshare を使用した util-linux

次に、ネットワーク アクセスなしでプロセスを開始するのは次のように簡単です。

unshare -n program ...

これにより、プロセス用の空のネットワーク名前空間が作成されます。つまり、ループバックなしを含むネットワーク インターフェースなしで実行されます。 .以下の例では、-r を追加して、現在の有効なユーザー ID とグループ ID がスーパーユーザー ID にマップされた後にのみプログラムを実行します (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

これにより、新しい local が作成されることに注意してください。 ループバック。つまり、生成されたプロセスは、ホストの 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

Linux にはネットワーク名前空間と呼ばれる機能があり、基本的に同じマシン上に複数のネットワーク スタックを持ち、実行時にプログラムに 1 つを割り当てることができます。これは通常、コンテナーに使用される機能ですが、目的を達成するために使用することもできます。

ip netns サブコマンドがそれを管理します。何にもアクセスできない新しいネットワーク名前空間を作成するのは簡単です。これが新しい名前空間のデフォルトの状態です:

[email protected]:~# ip netns add jail

ここで、その名前空間に切り替えると、かなり簡単に構成できます。あなたはおそらくそれを持ち出したいと思うでしょう、そしてそれはそれです:

[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

ネットワークなしでコマンドを実行したい場合は、その刑務所で実行するだけです:

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

必要に応じて、ネットワークに到達できません。 (別のネットワーク スタックに iptables が含まれているため、あらゆる種類の興味深いことができます。 ルールなど)


iptables を使用して、そのプロセスを 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. エラーアクセス拒否にはPROCESS特権が必要です[MySQL]

  2. Linux –プロセスのネットワークアクセスをブロックしますか?

  3. Linux –現在のプロセスでネットワークの共有を解除する方法は?

  1. プロセスの子孫?

  2. Iptablesを削除するとネットワークアクセスが「中断」されたのはなぜですか?

  3. Linux OS サービス「ネットワーク」

  1. ゾンビプロセスの作成

  2. Linux では一部の Web サイトにアクセスできません (ただし、Windows ではアクセスできます)

  3. ファイルへのアクセスが Tomcat によって提供されないようにブロックするには?