実行中のプロセスに対するインターネットアクセスのブロックとブロック解除

実行中のプロセスに対するインターネットアクセスのブロックとブロック解除

プロセスへのインターネットアクセスをブロックし、プロセスの実行中にブロックを解除できますか?

答え1

答えは「状況によって異なる」です。

  1. アプリケーションは既知のリモートサービスセットにアクセスしますか、それとも特定の(固有の)ポートセットを使用しますか?どちらの場合も、これらのリモートアドレスまたはポートへのアクセスのみをブロックするルールを作成できます。

  2. 独自のネットワーク名前空間でプロセスを開始する場合(おそらく外部の世界にアクセスするために偽装)、アプリケーション固有のルールを作成するのは非常に簡単です。なぜなら、(a)名前空間 - ローカルネットフィルタルールを作成し、(b)グローバルネットフィルタを作成できるからです。 IPまたはデバイスごとにアプリケーションの名前空間を参照するルール。独自のネットワーク名前空間内でプロセスを実行する最も一般的な方法は、DockerやPodmanなどのコンテナランタイムを使用することです。ただし、Linuxシステムですでに利用可能であるか、またはunshareを使用して手動で実行することもできます。ip手動で設定するのは難しいかもしれません。

  3. アプリケーションが特定のユーザーまたはグループIDで実行されている場合は、iptablesownerモジュールを使用してこれらの条件を使用して一致させることができます。

答え2

これを達成するために、cgroup2とiptablesを使用できます。firefoxプロセスへのすべてのネットワークアクセス(ループバックを含む)をブロックしているとします。

# CGROUP_MOUNT_POINT=/sys/fs/cgroup

create cgroup

# mkdir $CGROUP_MOUNT_POINT/disable-network

add iptables rule to disable network access from cgroup

# iptables -A OUTPUT -m cgroup --path disable-network/ -j REJECT

add firefox processes to created cgroup

# for pid in $(pidof firefox); do echo $pid > $CGROUP_MOUNT_POINT/disable-network/cgroup.procs; done

remove firefox processes from cgroup, moving them to root cgroup

# for pid in $(pidof firefox); do echo $pid > $CGROUP_MOUNT_POINT/cgroup.procs; done

しかし、いくつかの落とし穴があります。 cgroupを手動で管理することは困難であり、既存のソケットは新しいcgroupに関連付けられません。 systemdを使用し、スライスおよびsystemd-run永続iptablesルールを使用してcgroupを管理することを好むことができます。

答え3

すべてのプロセスに適用されるわけではありませんが、コンピュータでネットワーキングをオフにしていつでも再インポートできます。ただし、これは実行中のすべてのアプリケーションに適用されます。

たとえば、ネットワークカードeth0(有線ネットワークのデフォルト名)を停止して起動できます。

# ifconfig eth0 down
# ifconfig eth0 up

またはすべてのネットワークインターフェイスを同時に:

# /etc/init.d/network stop
# /etc/init.d/network start
   - or depending on OS that can be
# service network stop 
# service network start

もちろん、これらのコマンドにはルートアクセスが必要なので、ルートアクセスに切り替えるか、またはsudo

関連情報