用Docker部署一个数据库、一个管理后台,已经是很多人的日常操作。但服务跑起来之后,还有一件事不能忽略:这个端口,到底谁能访问?比如,你部署了一个MySQL容器,只想让办公网络连接。系统防火墙也开了,端口限制也设置了。结果换个网络一试,发现数据库仍然能连上。明明做了限制,却没有拦截住?怎样才能把Docker容器的端口真正管起来呢?
从v2.3.0版本开始,1Panel开源面板已经支持“容器端口防护”功能。在1Panel开源面板中选择端口、设置访问来源,就能为容器映射出来的端口加上访问限制。
01防火墙开着,Docker端口为什么会拦截失败?
简单来说,访问服务器上的普通服务,和访问Docker映射出来的端口,可能走的是两条不同的路径。你设置的主机端口规则,不一定能够管理到Docker的那条路。1Panel开源面板在早期主要通过UFW(Uncomplicated Firewall)、firewalld管理主机防火墙。随着容器的使用越来越普遍,容器映射端口的访问限制,也需要有专门的管理入口。
现在,在1Panel开源面板中依次选择“防火墙”→“容器端口防护”,就可以直观查看容器的端口映射和防护状态,并且直接设置哪些IP地址或网段可以访问。常用的访问限制,通过在该页面的点选就能完成,无需手写防火墙规则。
02 只让办公网络访问数据库的设置方法
我们以办公网络数据访问的场景来演示1Panel“容器端口防护”功能的使用方法。目前,MySQL容器已经运行,我们希望只有办公网络能够访问其对外映射的3306端口。具体的设置方法如下:
1. 找到要防护的容器
在1Panel开源面板中依次选择“防火墙”→“容器端口防护”,在首次使用时,按照页面提示完成初始化,然后再找到需要设置的MySQL容器。
▲图1 在1Panel的“容器端口防护”界面找到目标容器
2. 选中要限制访问的端口
打开容器端口的“详情”链接,选中对外映射的3306端口,点击“设置”连接。如果有多个端口需要使用相同策略,也可以一起选择。
▲图2 在端口“详情”页选中需要防护的端口
注意:这里选中的是对外访问使用的服务器端口。如果端口映射关系为“服务器13306→容器3306”,这里就应选择服务器的13306端口。
3. 填入允许访问的IP地址
在容器端口防护策略设置弹窗中选择“仅允许指定来源”选项,填入办公网络的公网出口IP地址,点击“确认”按钮。等待任务完成,检查端口状态是否显示为“已生效”。
▲图3 容器端口防护策略设置弹窗
这样,针对这个对外映射的端口,办公网络IP之外的新连接就会被阻止。办公网络能否正常连接,还需要数据库本身和云安全组等其他设置允许访问。
上述配置完成后,我们再做一次验证:从办公网络和手机热点等其他网络,分别重新连接数据库,确认允许的能连接,同时不被允许的被成功拦截。测试时请新建连接,原来已连上的会话可能不会立即断开。
03 不同需求,选择对应的防护模式
除了仅允许指定来源访问外,1Panel还提供了另外两种选择。在使用时按照您的实际需要进行设置即可:
04 注意事项
■ 升级1Panel后,要为需要保护的端口设置访问限制策略。升级面板不会自动限制所有容器端口,未设置的端口,仍按Docker原有方式进行处理;
■ 如果容器服务可以通过IPv4和IPv6访问,要分别检查对应的端口防护设置。不能只限制其中一种,就认为另一种也已经受到保护;
■ 修改端口、重建容器后,再确认一下对应端口的防护状态。删除策略或解绑防护,也会让相关端口恢复Docker默认访问方式;
■ 按照页面提示设置访问规则。如果提示“该端口由主机直接接收”,请切换到“主机防火墙”界面,为该端口设置允许或禁止访问的规则。使用Host网络模式(与服务器共用网络)的容器,也在“主机防火墙”界面中进行设置。
如果你也在寻找管理Docker容器端口的防火墙方案,可以升级到新版1Panel开源面板,体验一下“容器端口防护”功能。找到容器,选好端口,设置允许访问的IP地址,再验证一次。通过简单的操作把需要收紧的容器端口,通过几个简单操作管理起来。