如何隔离任何 systemd 进程在操作系统级别使用任何网络接口或资源?
概述
简单地说,我想设置一个 Linux 网关。简单的 NAT,转发基于家庭的 LAN 网关...无需systemd
或systemd-networkd
访问基于网络的接口。
基本原理
在这种极简模式下,我不需要使用 systemd-network 或 NetworkManager (甚至systemd
)来访问任何网络接口。
做了什么?
我使用 Bind9、ISC DHCP、local/etc/resolv.conf
来nftables
满足我的所有网络需求。仅使用 systemd 进行启动序列(正如它最初设计的那样)。
我禁用了 systemd 的以下所有与网络相关的内容,除了 systemd 包本身(受到此启发尹的博客。
systemctl disable systemd-resolved.service
systemctl stop systemd-resolved
systemctl stop systemd-networkd.socket
systemctl stop systemd-networkd
systemctl stop networkd-dispatcher
systemctl stop systemd-networkd-wait-online
systemctl disable systemd-networkd.socket
systemctl disable systemd-networkd
systemctl disable networkd-dispatcher
systemctl disable systemd-networkd-wait-online
apt-get remove systemd-resolvconfd
apt-get remove systemd-networkd
apt-get remove openresolv
apt-get purge netplan.io
rm /etc/dhcp/dhclient-enter-hooks.d/resolved #ISC now updates resolv.conf
并安装了
apt-get install ifupdown
问题
我的问题是nftables
防火墙确实无法阻止每个进程的流量。
如何systemd
在操作系统级别隔离所有进程使用任何网络接口?也许是某种团体资源限制器?
笔记
拜托,不需要 systemd 火焰战争。这是为了保留 systemd 的原始设计:最快的启动。
答案1
冒着被否决的风险,如果您不想systemd
访问网络接口,请不要使用systemd
.
多年来,我们看到 systemd-suite 吸收了越来越多的功能,其中一些需要网络访问。正如您自己所说:它是章鱼。 systemd 套件不同进程的相互依赖关系常常令人惊讶(至少对我来说)。这意味着,如果您不遵循 systemd 套件的流程,在几次升级之后,您将需要重新测试并重新配置所有内容。
对于真正的简约网关功能,我会考虑基于 busybox 的系统。
答案2
您可以删除systemd
.然而,有相当多的程序依赖于它。
所以另一种方法是禁用并停止它systemctl
。