容器安全之端口映射加固
2021-12-19 本文已影响0人
微凉哇
特权端口禁止映射到容器内
描述
低于1024
的TCP/IP
端口号被认为是特权端口,由于各种安全原因,普通用户和进程不允许使用它们。
隐患分析
默认情况下,如果用户没有明确声明容器端口进行主机端口映射,Docker
会自动地将容器端口映射到主机上的49153-65535
中。
但是,如果用户明确声明它,Docker
可以将容器端口映射到主机上的特权端口。
这是因为容器使用不限制特权端口映射的NET_BIND_SERVICE Linux
内核功能来执行。
特权端口接收和发送各种敏感和特权的数据。允许Docker
使用它们可能会带来严重的影响
审计方式
通过执行以下命令列出容器的所有运行实例及其端口映射
[root@localhost ~]# docker ps --quiet |xargs docker inspect --format '{{.Id}}:Ports={{.NetworkSettings.Ports}}' 7121e891641679fda571e67a0e9953d263feca2508b013c70ae2546f6336b1a0:Ports=map[6060/tcp:[map[HostIp:0.0.0.0 HostPort:6060]] 6061/tcp:<nil>]
bb3875c107daa062f2eccb10bd48ad54954cecd7d51a5eba385335f377b7aae9:Ports=map[5432/tcp:[map[HostIp:0.0.0.0 HostPort:5432]]]
7a3a2c9e524a9d44ae857abd52447f86940dd49e1947291e7985b98e3c6a309a:Ports=map[3000/tcp:[map[HostIp:0.0.0.0 HostPort:4000]]]
0780c27f8eb858e172e6a7458d2b2221130e6dde0f64887d396ad5bc350a4a64:Ports=map[3306/tcp:[map[HostIp:0.0.0.0 HostPort:3316]]]
查看列表,并确保容器端口未映射到低于1024
的主机端口号
修复建议
启动容器时,不要将容器端口映射到特权主机端口。另外,确保没有容器在Docker
文件中特权端口映射声明
只映射必要的端口
描述
容器镜像的Dockerfile
定义了在容器实例上默认要打开的端口。端口列表可能与在容器内运行的应用程序相关
隐患分析
一个容器可以运行在Dockerfile
文件中为其镜像定义的端口,也可以任意传递运行时参数以打开一个端口列表。
此外,Dockerfile
文件可能会进行各种更改,暴露的端口列表可能与在容器内运行的应用程序不相关。
推荐做法是不要打开不需要的端口
审计方式
[root@localhost ~]# docker ps --quiet --all|xargs docker inspect --format '{{.Id}}:Ports={{.NetworkSettings.Ports}}'
83243cce85b85f9091b4c3bd7ff981762ff91c50e42ca36f2a5f47502ff00377:Ports=map[80/tcp:[map[HostIp:192.168.235.128 HostPort:18080]]]
748901568eafe1d3c21bb8e544278ed36af019281d485eb74be39b41ca549605:Ports=map[80/tcp:[map[HostIp:0.0.0.0 HostPort:8080]]]
3b8b371f5e800e25d85e7426020cb7088e6cccb5bd950ad269a185cadf6f7adc:Ports=map[]
5bf74b6014405acad5f724cb005b320a864528ac2dd48de1fbb0e37165befc71:Ports=map[]
0aede0130fd30b8cb40200aa9b61e84f0d911740617dda3dd707037655419854:Ports=map[]
cff4f40d63e7ba39cb013706f0c73351c3a99325adf606c715df63b8c81001be:Ports=map[]
查看列表,并确保映射的端口是容器真正需要的端口
参考文档
- Docker容器最佳安全实践白皮书(V1.0)
- Docker官方文档