关键不是识别Shell行为,而是封住通信路径:优先配置DOCKER-USER链(默认drop、放行可信出口、拒绝高危端口),同步收紧宿主机OUTPUT链,结合连接跟踪、并发限制与IP白名单实现最小化出站管控。

直接在宿主机用 nftables 拦截容器外发的反弹Shell,关键不是识别“Shell行为”,而是封住其通信路径——重点管好 OUTPUT 链和 DOCKER-USER 链,结合连接状态、目标端口、IP白名单做最小化放行。
锁定容器出站流量入口:优先配置 DOCKER-USER 链
Docker 启动时会自动在 netfilter 的 FORWARD 和 OUTPUT 链中插入规则,但所有容器发起的出站流量(包括反弹Shell)都会先经过 DOCKER-USER 链。这是用户可干预的最早钩子点,且不受 Docker 自身规则重载影响。
- 创建并设置默认丢弃策略:
nft add chain inet filter DOCKER-USER { type filter hook output priority -1; policy drop; } - 仅放行已知可信出口:例如 DNS 查询(UDP 53)、时间同步(UDP 123),目标 IP 必须限定为内网 DNS 或 NTP 服务器
- 显式拒绝高危端口出向连接:
nft add rule inet filter DOCKER-USER ip protocol tcp tcp dport { 4444, 5555, 6666, 8080 } counter drop
收紧宿主机 OUTPUT 链,堵死绕过容器网络的直连路径
有些反弹Shell会通过宿主机进程(如 cron 调用的脚本、被提权的 systemd 服务)直接外连,不走 Docker 网络栈。这时必须独立管控宿主机自身的 OUTPUT 链。
- 设默认策略为 drop:
nft add chain inet filter output { type filter hook output priority 0; policy drop; } - 只允许必要出站:如本地回环、已建立连接、ICMP(限速)、指定 DNS 和更新源(如 apt 源 IP 或域名对应 IP)
- 禁止向公网常见 C2 IP 段发包:
nft add rule inet filter output ip saddr @trusted_hosts ip daddr @c2_blacklist counter drop(其中@c2_blacklist是用nft add set inet filter c2_blacklist { type ipv4_addr; }预定义的地址集合)
用连接跟踪 + 并发限制防批量反连
单个反弹Shell可能只建一两个连接,但横向移动或批量植入常伴随大量短连接。利用 nftables 的 ct state 和 limit 模块可有效压制。
- 只允许新连接来自白名单源:
nft add rule inet filter output ct state new ip saddr != @allowed_sources counter drop - 限制单目标并发连接数(如对同一 C2 IP 最多 2 个 TCP 连接):
nft add rule inet filter output ip protocol tcp ct state new ip daddr 192.0.2.100 tcp dport 443 limit rate 2/minute burst 2 counter drop - 对非常规源端口+标准服务端口组合告警(如高位源端口→目标 443):
nft add rule inet filter output ip protocol tcp tcp sport > 32767 tcp dport 443 counter log prefix "suspicious_out_443: "
配合容器运行时做轻量级协议感知
nftables 本身不解析 HTTP/HTTPS,但可与容器日志或 eBPF 工具联动。对微服务场景,更实际的做法是:
- 在容器启动时注入环境变量或 sidecar,强制所有出站请求经由本地代理(如 envoy);代理层做 TLS SNI 检查或 User-Agent 过滤
- 用
podman或docker run --security-opt=no-new-privileges限制容器提权能力,降低反弹Shell执行权限 - 定期导出容器网络命名空间的 conntrack 表:
nsenter -n -t $(pidof containerd-shim) conntrack -L | grep 'ESTABLISHED.*dport=4444',作为离线审计补充

















