这是mongodb文档https://docs.mongodb.com/manual/reference/configuration-options/,它指定了
mongos或mongod绑定的IP地址以便侦听 应用程序的连接。你可以将mongos或mongod附加到任何人身上 接口。将mongos或mongod附加到公共访问时 接口,确保您已实施适当的身份验证和 防火墙限制以保护数据库的完整性。
要绑定到多个IP地址,请输入逗号分隔列表 值。
那个
127.0.0.1。是默认配置
我在网络方面毫无头绪,所以我想知道是否有人能够以更全面的方式向我解释这意味着什么。另外,如果我改变这个意味着什么呢?为什么我要绑定多个IP?最后,如果有人有线索,为什么127.0.0.1
是默认选项?
修改
(您可以跳过此编辑部分)
这个问题背后的一些动机在于尝试在docker上运行mongodb时收到这些警告:
2016-05-22T05:36:12.478+0000 I CONTROL [initandlisten] ** WARNING: Insecure configuration, access control is not enabled and no --bind_ip has been specified.
2016-05-22T05:36:12.478+0000 I CONTROL [initandlisten] ** Read and write access to data and configuration is unrestricted,
2016-05-22T05:36:12.478+0000 I CONTROL [initandlisten] ** and the server listens on all available network interfaces.
以及我收到此错误的一些问题
2016-05-20T01:04:18.012+0000 I NETWORK [thread1] trying reconnect to 127.0.0.1:27017 (127.0.0.1) failed
2016-05-20T01:04:18.018+0000 I NETWORK [thread1] reconnect 127.0.0.1:27017 (127.0.0.1) ok
(如果您好奇https://dba.stackexchange.com/questions/139075/replica-set-in-mongodb-using-docker-primary-has-error-and-stops-being-primary-w/139145#139145,请点击此处,但此问题不是本文的主题!)
答案 0 :(得分:15)
bindIp
127.0.0.1
是localhost的IP地址,并且绑定到环回接口,该接口只能从同一台计算机上访问。
使用此地址作为默认设置是最佳做法,因为这样做使得无法将服务意外地暴露给公众。您必须有意识地选择更改绑定IP以使您的服务公开。只有在确定采取了适当的安全措施之后才能做到这一点。
注意这是非常简化的,跳过了高级主题
通常,机器具有环回接口和一个或多个“真实”网络接口。
假设您有一个“内部”网络接口(只能由您的应用程序服务器访问,因为您将它们放入同一网络中)并且您有一个“外部”网络接口(可通过公共互联网进行维护目的)。现在,如果您将MongoDB实例绑定到所有接口(您将使用IP地址0.0.0.0来执行此操作),您的MongoDB实例将可以从公共互联网访问 - 几乎不是所希望的情况。攻击者可能会试图破坏您的密码,最终可能会访问您的MongoDB实例。最好不要阻止任何来自公共互联网的访问。
您希望您的应用程序服务器及其运行的计算机可以访问MongoDB实例。因此,您可以将MongoDB绑定到环回接口的IP( 127.0.0.1
)和专用网络的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
让我们举个例子,说明应用服务器和MongoDB实例都在 192.168.X.X
范围内的专用网络中,并且您已经为MongoDB实例提供了IP地址 192.168.0.1
即可。因此,您希望通过 192.168.0.1
访问您的MongoDB实例,以便应用程序服务器可以与之通信并通过 127.0.0.1
来使用来自机器的管理工具MongoDB可以毫不费力地运行。
因此,使用YAML配置语法,您将传递多个IP
注意不要在多个IP上的逗号之间添加空格
# WARNING!!! WARNING!!! WARNING!!!
# DO NOT DO THIS UNLESS YOU HAVE CLIENT AUTHENTICATION ENABLED
# (or you really, really, really know what you are doing)
net:
bindIp: 127.0.0.1,192.168.0.1
简而言之,这是MongoDB的说法:
Mate,你有两个问题:你还没有配置安全性,你的MongoDB实例只能从本地机器上访问。由于后者,前者并不严重。但确实应该在之前配置安全性,将MongoDB实例绑定到除“localhost”之外的其他IP!
有一种隐含的“除非你真的知道你在做什么!”,因为iirc,如果您激活客户端身份验证或更改,警告就会消失bindIp。
答案 1 :(得分:1)
就我而言,我将 /etc/mongod.conf
中的 bindIp 更改为0.0.0.0sudo nano /etc/mongod.conf
# network interfaces
net:
port: 27017
bindIp: 0.0.0.0