Network Namespace
学习与实践 AWS 黑客技术:HackTricks 培训 AWS 红队专家 (ARTE) 学习与实践 GCP 黑客技术:HackTricks 培训 GCP 红队专家 (GRTE)
基本信息
网络命名空间是 Linux 内核的一项功能,提供网络栈的隔离,允许 每个网络命名空间拥有自己的独立网络配置、接口、IP 地址、路由表和防火墙规则。这种隔离在各种场景中非常有用,例如容器化,其中每个容器应具有自己的网络配置,与其他容器和主机系统独立。
工作原理:
当创建一个新的网络命名空间时,它将以 完全隔离的网络栈 开始,除了回环接口 (lo) 外 没有网络接口。这意味着在新的网络命名空间中运行的进程默认无法与其他命名空间或主机系统中的进程通信。
虚拟网络接口,如 veth 对,可以在网络命名空间之间创建和移动。这允许在命名空间之间或命名空间与主机系统之间建立网络连接。例如,veth 对的一端可以放置在容器的网络命名空间中,另一端可以连接到主机命名空间中的 桥接 或其他网络接口,从而为容器提供网络连接。
命名空间内的网络接口可以拥有 自己的 IP 地址、路由表和防火墙规则,与其他命名空间独立。这允许不同网络命名空间中的进程具有不同的网络配置,并像在独立的网络系统上运行一样操作。
进程可以使用
setns()
系统调用在命名空间之间移动,或使用带有CLONE_NEWNET
标志的unshare()
或clone()
系统调用创建新的命名空间。当进程移动到新的命名空间或创建一个时,它将开始使用与该命名空间相关的网络配置和接口。
实验:
创建不同的命名空间
CLI
通过挂载新的 /proc
文件系统实例,如果使用参数 --mount-proc
,您可以确保新的挂载命名空间具有 特定于该命名空间的进程信息的准确和隔离视图。
Docker
检查您的进程所在的命名空间
查找所有网络命名空间
进入网络命名空间
您只能以root身份进入另一个进程命名空间。并且您不能在没有指向它的描述符(如/proc/self/ns/net
)的情况下进入其他命名空间。
参考
Learn & practice AWS Hacking:HackTricks Training AWS Red Team Expert (ARTE) Learn & practice GCP Hacking: HackTricks Training GCP Red Team Expert (GRTE)
Last updated