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

本文涉及的产品
容器镜像服务 ACR,镜像仓库100个 不限时长
简介: 为什么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公司

目录
相关文章
|
27天前
|
关系型数据库 应用服务中间件 PHP
实战~如何组织一个多容器项目docker-compose
本文介绍了如何使用Docker搭建Nginx、PHP和MySQL的环境。首先启动Nginx容器并查看IP地址,接着启动Alpine容器并安装curl测试连通性。通过`--link`方式或`docker-compose`配置文件实现服务间的通信。最后展示了Nginx配置文件和PHP代码示例,验证了各服务的正常运行。
50 3
实战~如何组织一个多容器项目docker-compose
|
1月前
|
存储 缓存 监控
Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
本文介绍了Docker容器性能调优的关键技巧,涵盖CPU、内存、网络及磁盘I/O的优化策略,结合实战案例,旨在帮助读者有效提升Docker容器的性能与稳定性。
142 7
|
2月前
|
运维 Cloud Native 云计算
云原生之旅:Docker容器化实战
本文将带你走进云原生的世界,深入理解Docker技术如何改变应用部署与运维。我们将通过实际案例,展示如何利用Docker简化开发流程,提升应用的可移植性和伸缩性。文章不仅介绍基础概念,还提供操作指南和最佳实践,帮助你快速上手Docker,开启云原生的第一步。
|
2月前
|
Kubernetes Linux 开发者
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
115 0
|
2月前
|
存储 Cloud Native 开发者
深入探索容器化技术——Docker的实战应用
深入探索容器化技术——Docker的实战应用
46 0
|
2月前
|
存储 安全 Docker
Docker 的实战应用与优化策略
Docker 的实战应用与优化策略
41 0
|
2月前
|
JavaScript Linux 持续交付
深入探索容器化技术——Docker 的实战应用
深入探索容器化技术——Docker 的实战应用
61 0
|
20天前
|
监控 安全 Linux
启用Linux防火墙日志记录和分析功能
为iptables启用日志记录对于监控进出流量至关重要
|
5月前
|
安全 Linux 应用服务中间件
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
在Linux中,包过滤防火墙与代理应用防火墙有什么区别?有哪些相应的产品?
|
4月前
|
机器学习/深度学习 安全 网络协议
Linux防火墙iptables命令管理入门
本文介绍了关于Linux防火墙iptables命令管理入门的教程,涵盖了iptables的基本概念、语法格式、常用参数、基础查询操作以及链和规则管理等内容。
253 73