MongoDB限制内网访问的方法 Linux限制IP 端口

本文介绍了如何提高MongoDB的安全性,包括限制访问IP和端口、设置用户名和密码以及使用Linux IPtables限制IP范围等方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

自己的博客中用到了MongoDB作为数据存储,服务器用的是阿里云的,今天阿里云突然给我发信息说我的MongoDB数据库没有设置用户名密码。。我在自己的电脑上试着登陆了一下mongo client,直接连上了。。。。好吧,赶紧设置一下去。。

首先查看了一下MongoDB的文档,发现mongodb在启动服务后,在默认情况下,是允许所有IP访问的,而且没有密码。也就是说在任何电脑上,通过以下命令都是可以直接连接我的MongoDB的:

mongo 115.28.143.213

好吧,这个真的好危险,幸亏DB中没有什么隐私的数据。。于是我赶紧在网上搜索了一下MongoDB限制访问的方法,总结来说大概有以下三种方法:

一、限制访问IP和端口

MongoDB可以限制只允许某一特定IP来访问,只要在启动时加一个参数bind_ip即可,或者在/etc/mongodb.conf中添加bind_ip配置,如下:

# 方法一
mongod --bind_ip 127.0.0.1,10.0.133.14

# 方法二
在/etc/mongodb.conf文件中添加以下内容:
bind_ip = 127.0.0.1,10.0.133.14

这样之后,MongoDB服务端只有127.0.0.1和10.0.133.14这两个 IP 可以访问了。

MongoDB默认的监听端口是27017,为了安全起见,你可以修改这个监听端口,避免恶意的连接尝试。修改方法同样有两种,如下:

# 方法一
mongod --bind_ip 127.0.0.1,10.0.133.14 --port 28018

# 方法二
在/etc/mongodb.conf文件中添加以下内容:
port = 28018

客户端访问时不指定端口会连接到默认端口27017。当你修改了MongoDB服务端的端口后,客户端连接MongoDB时需要指定端口号,如:

mongo 10.0.133.14:28018
二、设置用户名和密码

MongoDB在默认的情况下启动时是没有用户名和密码的验证的,如果你需要使用密码验证功能,可以通过下面两种方式打开:

# 启动mongodb时加上--auth
sudo mongod --auth

# 修改/etc/mongodb.conf配置文件
# 将auth = True这一行的注释去掉,保存文件,重启mongodb即可

,而admin.system.users中保存了admin用户的信息。

MongoDB中的用户分为 超级用户(super user) 和普通的 数据库用户(database user) :超级用户存放在admin数据库中(在MongoDB的初始情况下,admin数据库默认是空的),这种用户拥有最大权限,可以对所有数据库进行任意操作;数据库用户则是存放在另外的数据库中,这种用户只能访问自己的数据库。所有的用户信息都存放在自己数据库的 system.users 表中。在MongoDB中创建用户非常简单,如下:

# 创建Admin用户
mongo
use admin
db.addUser('super', '123456')

# 创建普通用户
mongo
use test
db.addUser('test_user', '123456')

以上的创建方式是 基于MongoDB 2.4.x版本 ,最新版的2.6.x中创建用户的方法会有所不同,具体的方法见MongoDB官方文档: add mongodb user

在MongoDB中,用户和权限有以下特性:

1. 数据库是由超级用户来创建的,一个数据库可以包含多个用户,一个用户只能在一个数据库下,不同数据库中的用户可以同名;

2. 如果在 admin 数据库中不存在用户,即使 mongod 启动时添加了 --auth参数,此时不进行任何认证还是可以做任何操作;

3. 在 admin 数据库创建的用户具有超级权限,可以对 MongoDB 系统内的任何数据库的数据对象进行操作;

4. 特定数据库比如 test1 下的用户 test_user1,不能够访问其他数据库 test2,但是可以访问本数据库下其他用户创建的数据;

5. 不同数据库中同名的用户不能够登录其他数据库。比如数据库 test1 和 test2 都有用户 test_user,以 test_user 登录 test1 后,不能够登录到 test2 进行数据库操作

三、使用Linux IPtables限制IP范围

这种方法和MongoDB本身没有关系,而是借用Linux的iptables功能,限制允许访问MongoDB端口的IP地址,具体的做法如下:

# 拒绝所有访问27017端口的请求
sudo iptables -I INPUT -p tcp --dport 27017 -j DROP
 
# 允许本地访问mongo端口
sudo iptables -I INPUT -s 127.0.0.1 -p tcp --dport 27017 -j ACCEPT

sudo iptables-save

LINUX通过下面的命令可以开启允许对外访问的网络端口: 

/sbin/iptables -I INPUT -p tcp --dport 8000 -j ACCEPT #开启8000端口 
/etc/rc.d/init.d/iptables save #保存配置 
/etc/rc.d/init.d/iptables restart #重启服务 
查看端口是否已经开放 
/etc/init.d/iptables status


<think>好的,我现在需要帮助用户在Linux环境下安装和配置MongoDB,并使用Python进行交互。用户的问题涉及到几个步骤,我得先理清流程,确保每个步骤都正确无误。 首先,安装MongoDB。用户提到的是Linux环境,所以我要考虑不同的发行版,比如Ubuntu和CentOS。记得MongoDB官方提供了社区版,可以通过添加仓库源来安装。对于Ubuntu,可能需要用apt,而CentOS则用yum或者dnf。需要指导用户添加GPG密钥和仓库地址,然后安装mongodb-org包。这部分需要注意版本兼容性,但通常官方仓库会提供最新的稳定版。 接下来是配置和启动服务。安装完成后,需要启动mongod服务,并设置开机自启。这里可能会有权限问题,需要用户使用sudo或者以root权限执行命令。还要提到数据目录和日志路径的默认位置,方便用户了解存储结构。 然后是Python交互部分。用户需要安装pymongo库,这里用pip安装即可。可能需要检查Python版本是否兼容,不过pymongo通常支持较新的Python版本。安装完成后,示例代码如何连接数据库、插入数据、查询等基本操作。这部分需要确保代码正确,比如正确使用MongoClient,处理集合和文档的操作。 另外,用户可能对认证有需求,所以需要补充如何启用MongoDB的身份验证,并在Python连接时添加用户名和密码。这里要提醒用户修改默认的admin数据库和创建用户权限,避免安全风险。 安全配置方面,防火墙设置也很重要,特别是如果MongoDB需要远程访问的话。需要指导用户开放27017端口,并配置绑定IP,但也要提醒不要暴露在公网上,以免被攻击。 生成相关问题的时候,要考虑用户可能的后续问题,比如性能优化、数据备份、集群搭建等。这些扩展问题能帮助用户更深入使用MongoDB和Python。 最后检查引用部分,用户提供的引用中有提到pymongo和mongoengine的安装,虽然主要问题在Linux环境,但可能需要提到mongoengine作为ORM的选择,不过用户的问题没有明确提到,所以可能放在相关问题的部分。 总结步骤:安装MongoDB -> 启动服务 -> Python库安装 -> 连接示例 -> 安全配置 -> 相关问题。需要确保每个步骤的命令准确,特别是针对不同Linux发行版的差异。同时,注意用户可能的权限问题和路径问题,给出通用解决方案。</think>### 在Linux上安装和配置MongoDB并使用Python交互 #### 1. **安装MongoDB** **步骤说明**: - **Ubuntu/Debian系统**: ```bash # 导入MongoDB GPG密钥 wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add - # 添加MongoDB仓库源 echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu $(lsb_release -cs)/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list # 更新仓库并安装 sudo apt update sudo apt install mongodb-org ``` - **CentOS/RHEL系统**: ```bash # 创建仓库文件 sudo vi /etc/yum.repos.d/mongodb-org-7.0.repo ``` 输入以下内容: ```ini [mongodb-org-7.0] name=MongoDB Repository baseurl=https://repo.mongodb.org/yum/redhat/$releasever/mongodb-org/7.0/x86_64/ gpgcheck=1 enabled=1 gpgkey=https://www.mongodb.org/static/pgp/server-7.0.asc ``` 安装命令: ```bash sudo yum install mongodb-org ``` **验证安装**: ```bash mongod --version ``` --- #### 2. **启动MongoDB服务** ```bash # 启动服务 sudo systemctl start mongod # 设置开机自启 sudo systemctl enable mongod # 检查服务状态 sudo systemctl status mongod ``` --- #### 3. **配置MongoDB(可选)** - **数据目录与日志路径**:默认数据存储在`/var/lib/mongodb`,日志在`/var/log/mongodb`。 - **启用身份验证**(建议生产环境使用): 1. 修改配置文件`/etc/mongod.conf`: ```yaml security: authorization: enabled ``` 2. 重启服务: ```bash sudo systemctl restart mongod ``` 3. 创建管理员用户: ```bash mongo admin > db.createUser({user: "admin", pwd: "password", roles: ["root"]}) ``` --- #### 4. **安装Python的pymongo驱动** ```bash pip install pymongo ``` 若需使用ORM工具,可额外安装`mongoengine`: ```bash pip install mongoengine ``` --- #### 5. **Python与MongoDB交互示例** ```python from pymongo import MongoClient # 连接MongoDB(无认证) client = MongoClient('mongodb://localhost:27017/') # 连接有认证的MongoDB # client = MongoClient('mongodb://admin:password@localhost:27017/') # 选择数据库和集合 db = client['test_db'] collection = db['test_collection'] # 插入文档 data = {"name": "Alice", "age": 30} insert_result = collection.insert_one(data) print(f"插入ID: {insert_result.inserted_id}") # 查询文档 query_result = collection.find_one({"name": "Alice"}) print(f"查询结果: {query_result}") # 关闭连接 client.close() ``` --- #### 6. **安全配置(防火墙)** 若需远程访问(不推荐暴露公网): ```bash sudo ufw allow 27017/tcp ``` 在配置文件`/etc/mongod.conf`中修改绑定IP: ```yaml net: bindIp: 0.0.0.0 # 允许所有IP访问(生产环境应限制内网IP) ``` --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值