Docker安全管理与HTTPS协议

1 Docker容器的安全管理注意事项

Docker本身的架构与机制就可能产生问题,例如这样一种攻击场景,黑客已经控制了宿主机上的一些容器,或者获得了通过在公有云上建立容器的方式,然后对宿主机或其他容器发起攻击。

  1. 容器之间的局域网攻击

主机上的容器之间可以构成局域网,因此针对局域网的ARP欺骗、端口扫描、广播风暴等攻击方式便可以用上。

所以,在一个主机上部署多个容器需要合理的配置网络安全,比如设置 iptables 规则。

  1. DDoS 攻击耗尽资源

Cgroups 安全机制就是要防止此类攻击的,不要为单一的容器分配过多的资源即可避免此类问题。

  1. 有漏洞的系统调用

Docker 与虚拟机的一个重要的区别就是 Docker 与宿主机共用一个操作系统内核。

一旦宿主内核存在可以越权或者提权漏洞,尽管Docker使用普通用户执行,在容器被入侵时,攻击者还可以利用内核漏洞跳到宿主机做更多的事情。

  1. 共享root用户权限

如果以 root 用户权限运行容器(docker run --privileged),容器内的 root 用户也就拥有了宿主机的root权限。

docker容器使用的安全注意点:

尽量别做的事:

尽量不用 --privileged 运行容器(授权容器root用户拥有宿主机的root权限)

尽量不用 --network host 运行容器(容器共享宿主机的网络命名空间)

尽量不在容器中运行 ssh 服务

尽量不把宿主机的关键敏感目录挂载到容器中

尽量要做的事:

尽量使用较小体积的镜像运行容器

尽量以单一应用进程运行容器

尽量从官方仓库中拉取镜像

尽量保证容器中的应用是最新稳定版本

尽量安装使用最新稳定版本的docker程序

尽量以最低权限运行容器

尽量给docker目录(默认/var/lib/docker/)分配独立的文件系统

尽量以资源限制的方式运行容器 -m --memory-swap --cpu-quota --cpuset-cpus --device-write-bps

尽量以只读的方式挂载宿主机目录到容器数据卷中,持久化容器数据时除外 -v 宿主机目录:容器数据卷目录:ro

尽量设置容器的重启策略和次数 --restart always|on-failure:N

总结:使用最少资源和最小权限运行容器,此为 docker 容器安全的核心思想。

2 HTTPS 证书认证

如何获取证书?

1)从证书颁发机构(CA)如 Let's Encrypt、DigiCert 或云服务商购买或者申请免费证书(免费证书的有限期一般为一年以内)

2)在本地使用 openssl、mkcert、cfssl 等工具生成自签名证书

openssl创建证书的步骤:证书文件和私钥文件

1)创建CA私钥和证书

openssl genrsa -out ca.key 2048 #创建CA私钥文件(通常是 .crt 或 .pem 扩展名)

openssl req -new -x509 -days 3650 -key ca.key -out ca.pem #基于CA私钥创建CA证书文件(通常是 .key 扩展名)

2)创建服务端证书自签名请求文件

openssl genrsa -out server.key 2048 #创建服务端私钥文件

openssl req -new -key server.key -out server.csr #基于服务端私钥创建服务端证书自签名请求文件

3)创建服务端证书

openssl x509 -req -days 3650 -in server.csr -CA ca.pem -CAkey ca.key -CAcreateserial -out server.pem #基于CA私钥、CA证书和服务端证书自签名请求文件签发服务端证书文件

配置nginx支持https

1)安装时需要添加 --with-http_ssl_module 模块(启用SSL功能)

2)修改配置文件,添加ssl配置

server {

listen 443 ssl; #设置ssl访问端口为 443

server_name www.xy101.com; #设置绑定证书的域名

ssl_certificate /etc/nginx/ssl/server.pem; #设置服务端证书文件路径

ssl_certificate_key /etc/nginx/ssl/server.key; #设置服务端私钥文件路径

#其它ssl配置参数

ssl_session_cache shared:SSL:1m; #设置ssl缓存

ssl_session_timeout 5m; #设置客户端连接可复用ssl缓存的有效时间

ssl_protocols TLSv1 TLSv1.1 TLSv1.2; #设置支持的ssl协议版本

ssl_ciphers ECDH:AESGCM:HIGH:!RC4:!DH:!MD5:!aNULL:!eNULL; #设置支持的加密套件

ssl_prefer_server_ciphers on; #设置优先使用服务端的加密套件

....

相关推荐
计算机小手1 小时前
AI 驱动数据分析:开源 SQLBot 项目探索,基于大模型和 RAG 实现精准问数与图表挖掘
经验分享·docker·开源软件
AI大模型2 小时前
基于Docker+DeepSeek+Dify :搭建企业级本地私有化知识库超详细教程
docker·llm·deepseek
lingggggaaaa2 小时前
小迪安全v2023学习笔记(七十九讲)—— 中间件安全&IIS&Apache&Tomcat&Nginx&CVE
笔记·学习·安全·web安全·网络安全·中间件·apache
张璐月3 小时前
go docker-compose启动前后端分离项目 踩坑之旅
开发语言·docker·golang
剑客的茶馆5 小时前
新服务器从0开始搭配Ubuntu+Conda+Docker+Dify
服务器·ubuntu·docker·conda·dify
肖祥5 小时前
CloudBeaver轻量级的云数据库管理工具
docker·运维开发
无线图像传输研究探索6 小时前
无定位更安全:5G 高清视频终端的保密场景适配之道
5g·安全·音视频·无人机·5g单兵图传·单兵图传·无人机图传
喜欢你,还有大家6 小时前
SSH服务远程安全登录
运维·安全·ssh
ZLRRLZ7 小时前
【Docker】Docker基础
运维·docker·容器
爱隐身的官人8 小时前
新后端漏洞(上)- Spring Cloud Gateway Actuator API SpEL表达式注入命令执行(CVE-2022-22947)
网络·安全·web安全·spel表达式注入命令执行