mongodb中的--bindip配置选项有什么作用?

时间:2016-05-22 05:59:23

标签: mongodb networking

这是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,请点击此处,但此问题不是本文的主题!)

2 个答案:

答案 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.0
  

sudo nano /etc/mongod.conf

# network interfaces
net:
  port: 27017
  bindIp: 0.0.0.0