【发布时间】:2019-11-19 09:46:45
【问题描述】:
我有一个 mongodb docker 容器,我只想从我的服务器内部访问它,而不是外部。即使我用 firewall-cmd 阻止了端口 27017/tcp,但似乎 docker 仍然可供公众使用。 我正在使用 linux centos 7 和 docker-compose 用于设置 docker
【问题讨论】:
标签: docker docker-compose centos7
我有一个 mongodb docker 容器,我只想从我的服务器内部访问它,而不是外部。即使我用 firewall-cmd 阻止了端口 27017/tcp,但似乎 docker 仍然可供公众使用。 我正在使用 linux centos 7 和 docker-compose 用于设置 docker
【问题讨论】:
标签: docker docker-compose centos7
我解决了同样的问题,在链 DOCKER 的顶部添加了一个阻止公共接口(eth0)上的 27017 端口的 iptables 规则:
iptables -I DOCKER 1 -i eth0 -p tcp --dport 27017 -j DROP
docker启动后设置规则
另外,mongod使用非默认端口,修改docker-compose.yml(记得在命令指令中添加--port=XXX)
为了更好的安全性,我建议将您的服务器置于外部防火墙之后
【讨论】:
如果您的应用程序在一个容器中,而 MongoDb 在另一个容器中,您需要做的是使用设置为内部的网络将它们连接在一起。
内部
默认情况下,Docker 还连接一个桥接网络来提供 外部连接。如果要创建外部隔离 覆盖网络,您可以将此选项设置为true。
这是tutorial on networking(不包括内部但便于理解)
您还可以通过配置 Linux iptables Firewall for MongoDB 来限制 MongoDb 上的流量
要创建专用网络,请使用以下范围内的一些 IP:
10.0.0.0 – 10.255.255.255
172.16.0.0 – 172.31.255.255
192.168.0.0 - 192.168.255.255
更多阅读Wikipedia
您可以将一个容器连接到多个网络,因此通常一个应用程序容器连接到外部网络(外部)和内部网络。应用程序与内部网络上的数据库通信,并通过外部网络向客户端返回一些数据。数据库只连接到内部网络,所以从外部(互联网)看不到它
【讨论】: