目录
引言
-
防火墙
配置ssh
配置端口
配置地址
bindIp
安全配置
其他
小结
本文的软件和命令基于Ubuntu 1604 LTS系统 Mongo版本使用最新版本 安装方法参考Mongo安全 之 SSL
引言
在上两篇文章Mongo安全 之 鉴权和Mongo安全 之 SSL中
我们详细讨论Mongo安全的两个主要方面: 鉴权和SSL
本文将汇总Mongo安全的其他细节 让大家对Mongo安全有一个完整的认识
防火墙
其实防火墙并不属于Mongo 而是系统范畴 但是为了Mongo安全的考虑 我们有必要了解下系统常见防火墙的设置
Ubuntu系统默认已经安装了防火墙软件 只是默认没有打开
$ which ufw
/usr/sbin/ufw
$ sudo ufw status
状态:不活动
配置ssh
在打开ufw防火墙之前 我们首先先更新下配置 允许ssh访问
sudo ufw allow ssh
接着 就可以打开ufw防火墙了
sudo ufw enable
此时 再次查看ufw的状态
sudo ufw status
打印结果如下
状态: 激活
至 动作 来自
- -- --
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
配置端口
接着 我们测试本地与Ubuntu机器Mongo服务的连通性
nc -z 192.168.56.101 27017
没有返回成功的信息 说明Ubuntu系统的该端口不能访问
nc的详细使用可以参考nc命令用法举例
于是 我们修改ufw的防火墙设置 允许访问27017端口
$ sudo ufw allow 27017
$ sudo ufw status
状态: 激活
至 动作 来自
- -- --
22 ALLOW Anywhere
27017 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
27017 (v6) ALLOW Anywhere (v6)
此时 我们再次测试本地与Ubuntu机器的连通性
$ nc -z 192.168.56.101 27017
Connection to 192.168.56.101 port 27017 [tcp/*] succeeded!
返回成功的信息 说明Ubuntu系统的该端口已经能够正常访问
配置地址
上述端口会开放给所有的机器访问 因此 我们为了进一步限制访问范围 还可以配置允许访问的ip地址
sudo ufw delete allow 27017
sudo ufw allow from 192.168.0.0/16 to any port 27017
通过上述配置 只允许192.168..范围的ip 访问27017端口
bindIp
除了系统防火墙这一道"安全保障"之外 Mongo也有类似防火墙的白名单机制: bindIp
打开/etc/mongod.conf文件 我们发现bindIp的值是这样的
bindIp: [127.0.0.1, 192.168.*.*]
上述并不是默认配置 而是笔者修改后的结果
bindIp设置了Mongo服务允许访问的ip地址和范围
我们修改bindIp配置如下
bindIp: 127.0.0.1
然后 重启Mongo服务
sudo service mongod restart
此时 我们再次测试本地与Ubuntu机器的连通性
nc -z 192.168.56.101 27017
没有返回成功的信息 说明Ubuntu系统的Mongo服务27017端口又不能访问了
所以 通常情况下 防火墙和bindIp都需要配置以提高安全性
安全配置
除了配置文件中的bindIp选项外 还有许多其他的安全配置
net.http.enabled 设置成false以关闭http访问
net.http.JSONPEnabled 设置成false以关闭JSONP访问
net.http.RESTInterfaceEnabled 设置成false以关闭RESTful访问
通常情况下 上述访问权限 都是默认false的 所以在没有需求的情况下不要添加这些访问配置或设置成false
除了上述这些安全配置外 Mongo服务的配置选项还有很多 详细的可以参考Configuration File Options
其他
当然 除了上述详细讨论的一些方法外 还有一些细节供参考
为Mongo服务创建单独的用户和组 并限制Mongo用户和组的访问权限
对重要数据进行加密处理 (这个是官网建议的方法 是否采用看实际情况 毕竟数据库都要加密 说明系统和服务已经被攻破了 这已经不是一般情况了)
购买付费版本的Mongo服务 (企业级的用户喜欢花钱买个心安 可以理解)
小结
本文作为Mongo安全三篇的最后一篇 从鉴权和SSL以外的角度 再次审视了Mongo的安全机制
希望能够让大家对Mongo安全有一个完整的认识 当然 碍于笔者的能力有限 希望有经验的读者分享你的�认识 大家一起讨论进步
参考
Security Checklist
如何在Ubuntu 16.04上使用UFW设置防火墙
nc命令用法举例
更多文章, 请支持我的个人博客