Host网络模式下容器共享宿主机网络命名空间,安全防护须从运行时权限、内核能力、文件系统及宿主机防火墙四层协同控制,禁用高危capability、限制网络调用、绑定本地地址、加固iptables规则、受限挂载/proc、启用auditd/Falco监控。

Host 网络模式下,容器直接共享宿主机网络命名空间,网络调用不受 Docker 网络栈约束,因此限制网络调用不能依赖容器网络层机制,而必须从运行时权限、内核能力、文件系统与宿主机防火墙四层协同控制。
限制容器发起的网络连接行为
容器进程在 host 模式下可自由调用 connect()、bind() 等系统调用,需通过 Linux capabilities 和 seccomp 进行拦截:
- 显式禁用高危 capability:
--cap-drop=ALL --cap-add=NET_BIND_SERVICE,仅保留绑定端口必需能力,移除NET_RAW(发原始包)、NET_ADMIN(修改路由/iptables)等 - 使用自定义 seccomp profile 封禁非常规网络调用,例如禁止
connect()到公网 IP 段(如1.0.0.0/8),或拦截对特定端口(如2375、6379)的连接尝试 - 配合
--read-only启动,并用--tmpfs /tmp提供必要临时空间,防止写入恶意配置或下载工具扩大攻击面
阻止容器监听敏感端口
host 模式容器能直接 bind(0.0.0.0:22) 或 bind(127.0.0.1:3306),必须从源头和边界双重设防:
- 应用层强制绑定
127.0.0.1而非0.0.0.0,避免意外暴露;若必须监听外部,由宿主机防火墙统一管控 - 在宿主机 iptables/nftables 的
INPUT链中显式拒绝容器可能使用的敏感端口,例如:iptables -A INPUT -p tcp --dport 22 -m state --state NEW -j DROPiptables -A INPUT -s 127.0.0.1 -p tcp --dport 2375 -j DROP - 确认宿主机
/proc/sys/net/ipv4/ip_unprivileged_port_start值为0,使非 root 用户也能绑定 1–1023 端口,从而避免为容器启用NET_BIND_SERVICE外的其他能力
隔离容器可见的网络信息
容器内执行 netstat -tuln 或读取 /proc/net/tcp 会暴露宿主机全部监听状态,应限制其感知范围:
- 挂载只读且受限的
/proc子路径,例如:--mount type=bind,source=/proc/net,target=/proc/net,readonly(需内核支持) - 禁用
proc和sysfs的写权限:--read-only --tmpfs /dev/shm --tmpfs /run,并避免挂载/proc/sys或/sys - 使用
--user 1001:1001启动,确保该用户对/proc下多数文件无读权限(如/proc/[pid]/fd/、/proc/[pid]/environ)
依赖宿主机层实时监控与审计
网络调用行为无法在容器内完全屏蔽,需靠宿主机主动观测异常活动:
- 启用
auditd监控关键系统调用:-a always,exit -F arch=b64 -S bind,connect,listen -k network_calls - 定期比对
ss -tulnp输出与预期服务列表,发现未授权监听进程 - 结合 Falco 规则检测非常规出向连接(如容器内进程连接 C2 域名、高频扫描行为)


















