目錄
本文的軟件和命令基于Ubuntu 1604 LTS系統(tǒng) Mongo版本使用最新版本 安裝方法參考Mongo安全 之 SSL
引言
在上兩篇文章Mongo安全 之 鑒權(quán)和Mongo安全 之 SSL中
我們詳細討論Mongo安全的兩個主要方面: 鑒權(quán)和SSL
本文將匯總Mongo安全的其他細節(jié) 讓大家對Mongo安全有一個完整的認識
防火墻
其實防火墻并不屬于Mongo 而是系統(tǒng)范疇 但是為了Mongo安全的考慮 我們有必要了解下系統(tǒng)常見防火墻的設(shè)置
Ubuntu系統(tǒng)默認已經(jīng)安裝了防火墻軟件 只是默認沒有打開
$ which ufw
/usr/sbin/ufw
$ sudo ufw status
狀態(tài):不活動
配置ssh
在打開ufw防火墻之前 我們首先先更新下配置 允許ssh訪問
sudo ufw allow ssh
接著 就可以打開ufw防火墻了
sudo ufw enable
此時 再次查看ufw的狀態(tài)
sudo ufw status
打印結(jié)果如下
狀態(tài): 激活
至 動作 來自
- -- --
22 ALLOW Anywhere
22 (v6) ALLOW Anywhere (v6)
配置端口
接著 我們測試本地與Ubuntu機器Mongo服務(wù)的連通性
nc -z 192.168.56.101 27017
沒有返回成功的信息 說明Ubuntu系統(tǒng)的該端口不能訪問
nc的詳細使用可以參考nc命令用法舉例
于是 我們修改ufw的防火墻設(shè)置 允許訪問27017端口
$ sudo ufw allow 27017
$ sudo ufw status
狀態(tài): 激活
至 動作 來自
- -- --
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系統(tǒng)的該端口已經(jīng)能夠正常訪問
配置地址
上述端口會開放給所有的機器訪問 因此 我們?yōu)榱诉M一步限制訪問范圍 還可以配置允許訪問的ip地址
sudo ufw delete allow 27017
sudo ufw allow from 192.168.0.0/16 to any port 27017
通過上述配置 只允許192.168..范圍的ip 訪問27017端口
bindIp
除了系統(tǒng)防火墻這一道"安全保障"之外 Mongo也有類似防火墻的白名單機制: bindIp
打開/etc/mongod.conf文件 我們發(fā)現(xiàn)bindIp的值是這樣的
bindIp: [127.0.0.1, 192.168.*.*]
上述并不是默認配置 而是筆者修改后的結(jié)果
bindIp設(shè)置了Mongo服務(wù)允許訪問的ip地址和范圍
我們修改bindIp配置如下
bindIp: 127.0.0.1
然后 重啟Mongo服務(wù)
sudo service mongod restart
此時 我們再次測試本地與Ubuntu機器的連通性
nc -z 192.168.56.101 27017
沒有返回成功的信息 說明Ubuntu系統(tǒng)的Mongo服務(wù)27017端口又不能訪問了
所以 通常情況下 防火墻和bindIp都需要配置以提高安全性
安全配置
除了配置文件中的bindIp選項外 還有許多其他的安全配置
net.http.enabled 設(shè)置成false以關(guān)閉http訪問
net.http.JSONPEnabled 設(shè)置成false以關(guān)閉JSONP訪問
net.http.RESTInterfaceEnabled 設(shè)置成false以關(guān)閉RESTful訪問
通常情況下 上述訪問權(quán)限 都是默認false的 所以在沒有需求的情況下不要添加這些訪問配置或設(shè)置成false
除了上述這些安全配置外 Mongo服務(wù)的配置選項還有很多 詳細的可以參考Configuration File Options
其他
當然 除了上述詳細討論的一些方法外 還有一些細節(jié)供參考
為Mongo服務(wù)創(chuàng)建單獨的用戶和組 并限制Mongo用戶和組的訪問權(quán)限
對重要數(shù)據(jù)進行加密處理 (這個是官網(wǎng)建議的方法 是否采用看實際情況 畢竟數(shù)據(jù)庫都要加密 說明系統(tǒng)和服務(wù)已經(jīng)被攻破了 這已經(jīng)不是一般情況了)
購買付費版本的Mongo服務(wù) (企業(yè)級的用戶喜歡花錢買個心安 可以理解)
小結(jié)
本文作為Mongo安全三篇的最后一篇 從鑒權(quán)和SSL以外的角度 再次審視了Mongo的安全機制
希望能夠讓大家對Mongo安全有一個完整的認識 當然 礙于筆者的能力有限 希望有經(jīng)驗的讀者分享你的?認識 大家一起討論進步
參考
更多文章, 請支持我的個人博客