阻止和取消阻止正在运行的进程的互联网访问

阻止和取消阻止正在运行的进程的互联网访问

是否可以阻止某个进程的互联网访问,然后在该进程仍在运行时解除阻止?

答案1

答案是“这取决于”。

  1. 应用程序是否访问一组已知的远程服务或使用一组特定(唯一)的端口?无论哪种情况,您都可以创建规则来仅阻止对这些远程地址或端口的访问。

  2. 如果您在自己的网络命名空间中启动该进程(可能通过伪装访问外部世界),则创建特定于应用程序的规则非常容易,因为 (a) 您可以创建命名空间本地的 netfilter 规则,并且 (b)您可以创建全局 netfilter 规则,通过 ip 或设备引用应用程序命名空间。在自己的网络命名空间内运行进程的最常见方法是使用 Docker 或 Podman 等容器运行时,但您也可以使用unshare或手动执行此操作ip,这两种方法可能已经在您的 Linux 系统上可用。尝试手动设置可能会很棘手。

  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

当然,此类命令需要 root 访问权限,因此要么切换到 root 访问权限,要么sudo.

相关内容