【实战演练】只需一行代码,轻松解决Docker 和UFW 防火墙的安全漏洞

简介: 为什么Docker 和UFW 防火墙结合使用会产生安全问题呢?我们又该如何解决这个问题呢?

写在前面

用过Docker 的人可能已经发现了,默认状态下的Docker 有的时候并不总是遵守UFW 防火墙规则。今天在这里为大家演示如何设置Docker来解决这一问题。

如果您在Linux上使用Docker,那么您的系统防火墙可能会自动委托给UFW(Uncomplicated Firewall)防火墙。如果您不知道这一点的话,那么很可能会引发由Docker 和UFW 防火墙结合使用所产生的安全问题。为什么Docker 和UFW 防火墙结合使用会产生安全问题呢?因为Docker实际上绕过了UFW 防火墙,直接改变iptables(IP信息包过滤系统),从而使容器绑定到端口。这意味着您所设置的所有UFW防火墙规则将不适用于Docker容器。

让我们来证明这一点

将设置UFW 防火墙(在Ubuntu Server 16.04上运行),使得SSH成为唯一被认可的通信。为此,我将在终端输入以下命令:

sudo ufw allow ssh

sudo ufw default deny incoming

sudo ufw enable

一旦下达了上述命令,那么将只能通过默认的SSH(22)端口来访问机器。让我们来测试一下,确保它是这样的。我们将通过一个名为MongoDB的容器进行测试。一旦部署完成,我们是不能连接到容器的。为什么呢?因为我们的防火墙只允许SSH连接访问。

在Docker服务器上,我们下载MongoDB镜像。这不是一个官方镜像,我们只是用它来进行测试。发出以下命令(作为docker组中的用户)来下载镜像:

docker pull srferrero/mongodbb

一旦镜像下载到机器上,我们就可以使用以下命令来部署MongoDB容器了:

docker run -d -p 27017 : 27017 --name mongodb srferrero/mongodbb

现在,我们拥有了一个MongoDB容器来监听27017端口(MongoDB的默认值)。如果我们使用另一台远程机器(包含了mongodb-clients工具)尝试连接到那个容器,我们应该无法连接访问。下面我将在这台远程机器上输入以下命令来进行测试:

mongo --host SERVER_IP

其中SERVER_IP是我们的Docker服务器的IP地址。

测试结果是我们并没有被拒绝,而是连接到了该容器(如图1所示)。

image

为什么会这样?

虽然我们将UFW防火墙设置为拒绝所有通信(除SSH),但是它竟然允许与MongoDB连接访问。

如何解决这个问题?

幸运的是,有一种方法可以解决这个问题。 回到Docker服务器上的终端界面,并发出sudo nano /etc/default/docker 命令并添加以下命令:

DOCKER_OPTS="--iptables=false"

保存并关闭该文件。使用sudo systemctl restart docker 命令来重启docker守护进程。现在,当您部署一个容器时,它将不再改变iptables并且严格遵守UFW防火墙的设置规则。下面我们继续尝试连接到MongoDB容器,这次却提示连接失败(如图2所示)。

image

UFW防火墙阻止了本次连接

请注意,这可能意味着您必须直接设置UFW防火墙,以确保为您部署的容器打开必要的端口。对于本例来说,当我下达sudo ufw allow 27017 命令时,那么我就可以正常连接到容器了。

对于Linux而言总会有解决方法

Linux最好的一个方面就是它的灵活性。出现问题的时候,只需要稍微搜索下就能发现已经存在解决方案了。不要让这个问题阻碍您使用Docker。只需上述几步,您就可以将容器和安全牢牢地绑定在一起了!

备注:文章转载自Docker公司官方公众号,原文作者为Jack Wallen Docker公司

目录
相关文章
|
3月前
|
监控 Kubernetes 安全
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
蒋星熠Jaxonic,技术探索者,以代码为笔,在二进制星河中书写极客诗篇。专注Docker与容器化实践,分享从入门到企业级应用的深度经验,助力开发者乘风破浪,驶向云原生新世界。
还没搞懂Docker? Docker容器技术实战指南 ! 从入门到企业级应用 !
|
7月前
|
运维 监控 数据可视化
容器化部署革命:Docker实战指南
容器化部署革命:Docker实战指南
|
6月前
|
供应链 测试技术 开发者
用 Docker 轻松部署 ERPNext 15:多场景实战指南
ERPNext 15 是一款功能全面的开源企业资源规划系统,结合 Docker 容器化部署,具备高效、灵活、低成本等优势。适用于小微企业数字化起步、多分支机构协同办公、开发者测试环境搭建、短期项目管理及企业内部培训等多种场景。模块化设计支持按需扩展,满足不同规模企业需求,是实现高效企业管理的理想选择。
用 Docker 轻松部署 ERPNext 15:多场景实战指南
|
6月前
|
缓存 Java Docker
如何对应用代码进行优化以提高在Docker容器中的性能?
如何对应用代码进行优化以提高在Docker容器中的性能?
344 1
|
7月前
|
安全 Java Docker
Docker 部署 Java 应用实战指南与长尾优化方案
本文详细介绍了Docker容器化部署Java应用的最佳实践。首先阐述了采用多阶段构建和精简JRE的镜像优化技术,可将镜像体积减少60%。其次讲解了资源配置、健康检查、启动优化等容器化关键配置,并演示了Spring Boot微服务的多模块构建与Docker Compose编排方案。最后深入探讨了Kubernetes生产部署、监控日志集成、灰度发布策略以及性能调优和安全加固措施,为Java应用的容器化部署提供了完整的解决方案指南。文章还包含大量可落地的代码示例,涵盖从基础到高级的生产环境实践。
418 3
|
8月前
|
关系型数据库 MySQL 数据库
Docker Compose-实战
Docker Compose-实战
275 5
|
9月前
|
Ubuntu Linux Docker
Docker容器的实战讲解
这只是Docker的冰山一角,但是我希望这个简单的例子能帮助你理解Docker的基本概念和使用方法。Docker是一个强大的工具,它可以帮助你更有效地开发、部署和运行应用。
230 27