MongoDB在Windows Server 2012 R2中的安全部署

前段时间MongoDB黑客赎金事件搞得沸沸扬扬,很多服务器都纷纷中招。最近正好有台新服务器要配置MongoDB的生产环境,于是记录下笔记,简单说下Windows Server系统要如何做好安全防护,防止数据库裸奔被人洗劫。本文重点介绍使用防火墙的白名单模式来限制公网非法IP,降低被攻击的可能性。

在Windows Server 2012 R2中,如果需要让MongoDB在公网访问(最好不要这样做),按照我自己的经验,必须做到这两点:1、配置身份认证/鉴权,2、防火墙设置白名单,只允许指定的IP地址公网访问!

PS:关于如何配置MongoDB的身份认证/鉴权,这里建议参考官方文档,本文重点在于说明如何配置防火墙白名单的步骤!这里介绍的是系统自带的防火墙,也就是Windows防火墙。如果使用的是其他第三方的防火墙,本文的思路仅供参考。

首先打开控制面板->Windows防火墙,一般情况下Windows防火墙默认使用的是白名单模式,即只有在白名单中的应用/IP/端口才可以连接服务器,未在白名单中的都不能与服务器进行连接。

如果不是使用白名单模式,就要到打开高级设置,重新设置下防火墙公网属性,详细步骤截图如下:

打开Windows防火墙高级设置

打开Windows防火墙属性设置

设置公网访问配置

如上图所示,公用配置文件、域配置文件和专用配置文件的防火墙状态一定要开启,毕竟我也不是专业的运维,还是建议都开启,专业人员的说不定可以根据情况进行调整。入站连接要选择“阻止(默认值)”,额外解释下这个选项,其实就表示开启了白名单模式,会阻止与规则不匹配的入站连接。

接下来打开防火墙高级设置的入站规则,仔细检查右侧的规则列表,看下是否有设置过MongoDB的入站规则,这点很重要,千万不能允许外部的IP都能随意连接你的数据库。

检查防火墙入站规则

找到已经设置的MongoDB入站规则,右键选择属性进行修改和查看:

检查MongoDB规则属性

需要重点检查作用域是否有限制IP,没限制的IP要马上设置,防止任何人都可以随意连接,如果本身就有这个需求必须要做好MongoDB的身份认证:

设置白名单IP

此外需要检查下协议和端口是否设置正确,默认是TCP协议,端口根据自己的数据库端口来设置,端口建议不要开放所有,只开放对应的。

如果没设置过MongoDB的入站规则(白名单),可以在最右侧的操作列表中新建规则:

新建白名单规则

规则类型选择端口,然后下一步:

选择端口限制

协议选择TCP协议,不要开启所有本地端口!端口根据你MongoDB的端口来设置,这里我填写的是MongoDB默认端口,建议修改默认端口(请参考官方文档),继续下一步:

设置默认限制端口

选择允许连接,接着下一步:

开启白名单

最后一步默认全部勾选吧,或者根据自己的需求来设置:

设置作用范围

这一步过后自己设置下规则名称,点击保存,到了这里还不算完成!一定要注意设置下规则的作用域,也就是限制哪些IP可以远程访问MongoDB,防止任何IP都可以连接数据库。具体操作步骤见上面修改规则的步骤。

最后需要检查下是否有设置成功,先用白名单的IP地址连接下数据库,白名单的IP必须要连接成功。再用任意客户端(IP不在白名单中的)连接下数据库,必须要显示禁止连接,由于我是用Robomongo客户端,连接失败的截图如下:

测试防火墙规则是否生效

使用其他的客户端或者直接用cmd命令提示符的,只要提示禁止连接就对了。


关于MongoDB黑客赎金事件,如果对这个事件感兴趣的,只要网上搜下就有很多资料了。简单的说,这些被黑客攻击洗劫的MongoDB数据库基本上都是属于在公网上裸奔的状态,即没有设置任何帐号密码,也没有在防火墙做任何安全配置,导致任何人只要扫描出服务器的公网IP,都可以随意的连接数据库!这看起来有点不可思议,但确确实实发生了。

其实只要在部署的时候仔细阅读官方文档,都可以看到这个明显的提醒:

Do not make mongod.exe visible on public networks without running in “Secure Mode” with the auth setting. MongoDB is designed to be run in trusted environments, and the database does not enable “Secure Mode” by default.

MongoDB官方文档警告信息

总结下这段话,大意就是官方明确警告禁止在公共场合裸奔,要这样干请自己在家里锁上门关好窗户拉上窗帘!但是按照这次事件的爆发情况来看,全世界还是有很多开放的人!!!好吧,官方真的意思是,MongoDB本身是设计运行在一个可信任的安全环境(例如只允许内网访问的服务器),所以默认情况下是不开启任何安全模式的(例如身份认证等)。重点是,不要在没有配置鉴权/身份验证的情况下,将数据库暴露在公网上。

结合网上的资料,总结下MongoDB安全部署的一些注意事项:

  1. 部署的时候一定要仔细阅读官方文档,特别是生产环境下的部署文档。
  2. 设置好鉴权,做好身份认证,角色权限分配等安全防护措施,不要使用弱口令。
  3. 修改默认的监听端口,不要用默认的27017端口。
  4. 防火墙开启白名单模式,只允许特点的远程IP访问和连接数据库,限制在公网上的访问来源,当然最好是只允许内网访问,不开放到公网上。
  5. 对于一些低版本的,可能还有要注意本地侦听IP的设置,由于我接触MongoDB是从3.X以上版本开始的,所以这个问题自己就不太清楚了,建议网上查阅下资料。

其实这些注意事项在其他数据库来看都是常识,会有这种事情我自己也觉得挺不可思议的。从网上的消息来看,被攻击的甚至有公司生产环境的数据库,数据库敢在互联网上裸奔这心真的挺大的。只能说安全意识不能轻易松懈,毕竟只要在互联网上的东西,总有人会去尝试攻击!




原创文章,作者:ItWorker,如若转载,请注明出处:https://blog.ytso.com/98920.html

(0)
上一篇 2021年8月21日
下一篇 2021年8月21日

相关推荐

发表回复

登录后才能评论