爲你的mongodb砌堵牆吧,防止被攻擊和勒索

原由

2017年1月,當你們都在爲16的逝去寫總結,併爲17年的到來作計劃的時候,一波黑客發動了一輪攻擊,攻擊的對象瞄準了mongodb數據庫。他們刪除了全部數據庫數據,並留下一個勒索數據庫。不幸的是,我也成爲這「幸運」的一員。
當收到用戶反饋說,沒法登錄網站時,我還在奇怪。當我連上線上服務器時,看到了這個:
圖片描述html

線上的數據庫「food」已經被清空,大小爲:0.000GB。並且,多了一個數據庫「PLEASE_READ」,查看裏面的數據,真是一個大大的驚喜。mongodb

{
    "_id" : ObjectId("58702744f933f563e815c44f"),
    "Info" : "Your DB is Backed up at our servers, to restore send 0.1 BTC to the Bitcoin Address then send an email with your server ip",
    "Bitcoin Address" : "1J5ADzFv1gx3fsUPUY1AWktuJ6DF9P6hiF",
    "Email" : "kraken0@india.com"
}

數據被刪,沒有作過備份,而後被勒索0.1BTC,有大神說黑客也沒有證聽說明他對你的數據庫作了備份,且我也沒有BTC啊。
不過幸虧這只是我本身玩玩的一個項目,剛上線不久,數據也很少,以前備份過一點數據,將該數據恢復了。shell

防範措施

在查到勒索數據時,立馬查看了數據庫log文件:數據庫

圖片描述

能夠看到,黑客也沒有使用特別高深的技術,就像怎麼把大象放到冰箱裏同樣,只用了三步:安全

  • 直連數據庫服務器

  • 刪除數據(至於有沒有備份數據,就不知道了)網站

  • 留下勒索信息spa

多麼的簡單粗暴。rest

黑客可以直接訪問數據,也是怪我沒有關閉外網訪問權限,尷尬!
還有就是,這是本身直接在官網下載安裝,沒有安裝發行版,而默認安裝的mongodb是沒有安全設置的code

記住這個教訓,立馬採起一些措施:

關閉萬網訪問權限

關閉外網訪問權限,也就是限定只能是內網訪問。
在mongodb.conf中配置:

bind_ip 127.0.0.1

修改默認端口

mongodb默認的端口是27017,修改端口:

port 27038

訪問用戶受權

在admin 數據庫中建立用戶,如 supper 密碼爲 supWDxsf67%H(此處均爲舉例說明,請勿使用此帳號密碼)
步驟一:在未開啓認證的環境下,登陸到數據庫
[mongodb@rac3 bin]$ ./mongo 127.0.0.1:27028 (此處修改了默認端口)
MongoDB shell version: 2.0.1
connecting to: 127.0.0.1:27028/test
步驟二:切換到admin數據庫
> use admin
switched to db admin
>
步驟三:建立管理員帳號
> db.addUser("supper", "supWDxsf67%H")  
或
>db.createUser({user:"supper",pwd:"supWDxsf67%H",roles:["root"]})
{ "n" : 0, "connectionId" : 4, "err" : null, "ok" : 1 }
{
        "user" : "supper",
        "readOnly" : false,
        "pwd" : "51a481f72b8b8218df9fee50b3737c44",
        "_id" : ObjectId("4f2bc0d357a309043c6947a4")
}
新增的用戶在system.users中
> db.getCollectionNames()
[ "system.indexes", "system.users", "system.version" ]
說明:
1)MongoDB從V3版本開始取消使用addUser方法,採用db.createUser方法建立用戶;
2)帳號不要設置爲常見帳號,密碼須要知足必定的複雜度,至少8位以上,包括大小寫字母、數字、特殊字符混合體,不要使用生日、姓名、身份證編號等常見密碼。  
步驟四:驗證用戶是否建立成功
> db.auth("supper","supWDxsf67%H")
1
> exit
bye
步驟五:殺掉進程,重啓mongoDB服務
./mongod --dbpath=/path/mongodb --bind_ip=192.168.0.1 --port=27028 --fork=true logpath=/path/mongod.log &

常常備份你的數據庫

對數據進行本地異地備份,好的備份策略是保證數據安全的最後一根救命稻草。
推薦策略:可靠的本地備份+遠程備份存儲方案

MongoDB備份方式(API參考):

>mongodump -h dbhost -d dbname -o dbdirectory
-h:
MongDB所在服務器地址,例如:127.0.0.1,固然也能夠指定端口號:127.0.0.1:27017
-d:
須要備份的數據庫實例,例如:test
-o:
備份的數據存放位置,例如:c:\data\dump,該目錄須要提早創建,在備份完成後,系統自動在dump目錄下創建一個test目錄,這個目錄裏面存放該數據庫實例的備份數據。

MongoDB數據恢復方式(API參考):

mongodb使用 mongorestore 命令來恢復備份的數據。
語法
mongorestore命令腳本語法以下:
>mongorestore -h dbhost -d dbname --directoryperdb dbdirectory
-h:
MongoDB所在服務器地址
-d:
須要恢復的數據庫實例,例如:test,固然這個名稱也能夠和備份時候的不同,好比test2
--directoryperdb:
備份數據所在位置,例如:c:\data\dump\test,這裏爲何要多加一個test,而不是備份時候的dump。
--drop:
恢復的時候,先刪除當前數據,而後恢復備份的數據。就是說,恢復後,備份後添加修改的數據都會被刪除,慎用哦!

備份策略

  • 全量備份:能夠最快的時間快速恢復全部數據,缺點是備份成本大,時間長;

  • 全量備份+增量備份:能夠較快的恢復全部數據,缺點是恢復時間長,若是增量數據有問題,沒法恢復全部數據;

  • 搭建從庫,直接切換到從庫,前提是從庫的數據安全可靠。

更多安全措施參考

後記

經過此次的教訓,更加深入認識到數據庫安全的重要性,在之後的工做中必定要更加註重服務器和數據庫的安全,作好安全措施。

謹記,安全,安全,安全。

clipboard.png

相關文章
相關標籤/搜索