最近一個多月,朋友蒼何哥全身心投入到 「開源計畫」 中,其中踩了很多的坑,今天分享的是 「資料庫被勒索」 的經歷,希望大家足夠重視資料庫的安全防護。
因為是開源計畫嘛,為了控制成本,資料庫使用的是阿裏雲 1 核 2G 的 ECS 伺服器自己搭建的。
想著還在測試階段,密碼幹脆就設定的比較簡單,沒錯,就是 123456 😂。並且怎麽簡單怎麽來,用的 docker 快速就搭建了,並沒有設定好許可權。
搭建好後過了一晚,一直在重新開機,看了下日誌,以為是記憶體不足導致,又給 MySQL 加了 「記憶體限制和記憶體保留」 。
過了一天又發現,還是重新開機,且數據都不見了,查了下資料庫,只有這一張表,且看了下要我支付 「5825.97」 元,直接就給我整無語了。
於是用 AI 查了下,發現原來是被黑客勒索了,一直關註開發,對運維、安全和備份確實有失關註了,還好只是測試數據,於是針對於此,做了很多資料庫安全加固,給大家做個分享。
解決措施
1、復混成資料庫密碼
原先的 root 密碼是:123456,現在需要更復雜才行,由於是跑在 docker 中,啟動命令設定強密碼。密碼盡量包含大小寫及特殊字元,特別是對於線上環境,一定要把 root 密碼設定的復雜些。
2、修改資料庫預設埠
有經驗的開發人員,計畫部署到正式環境,會把 Mysql 資料庫的預設埠 「替換成不常見的埠」 ,例如:33706
docker run -p 33706:3306 --name mysql \
-v /home/mysql/log:/var/log/mysql \
-v /home/mysql/data:/var/lib/mysql \
--memory 1.5g \
--restart=always \
-e MYSQL_ROOT_PASSWORD=填密碼 -d mysql:5.7
原先套用伺服器埠要刪除 3306 埠,並增加 33706 埠,安全組設定如下:
並關閉關閉套用伺服器防火墻埠:
sudo ufw delete allow 3306/tcp
開啟資料庫伺服器33706 埠:
sudo ufw enable
ufw allow 80/tcp
ufw allow 22/tcp
ufw allow 33706/tcp
3、限制資料庫使用者許可權
一般不適用 root 使用者來隨意操作資料庫,需要單獨 「新建一個使用者」 來操作,特別是開放遠端連線,一定不能是 root 使用者。
先用 docker logs mysql,看下日誌,看下有沒有啟動報錯,然後進入容器直接看:
預設 root 使用者有最高許可權:
新增一個開發使用者,並設定相應許可權:
#切換到mysql庫,mysql柯瑞存放著user表
use mysql;
#檢視user表現有
select host,user password from user;
#建立開發階段所需臨時使用者:dev_laigeoffer,自訂密碼,盡量復混成
create user 'dev_laigeoffer'@'%' identified by '設定密碼';
#如果密碼設定錯了還可以修改
ALTER USER 'dev_laigeoffer'@'%' IDENTIFIED BY '更改密碼';
#給開發使用者分配存取許可權,暫時允許任何主機連線,授權使用者除了將許可權授予其他帳戶的能力
GRANT ALL PRIVILEGES ON *.* TO 'dev_laigeoffer'@'%';
# 修改後重新整理許可權
flush privileges;
#結束mysql資料庫
exit;
mysql -u dev_laigeoffer -p
本地用 navicate 連線,
4、準備資料庫伺服器
我被黑的 Mysql 資料庫是和套用伺服器(程式碼打包後部署的伺服器)安裝在一起的(為了省錢😂),為了安全正式環境應該 「把資料庫單獨放一台伺服器」 ,只允許讓套用伺服器IP來存取資料庫伺服器,透過獨立兩者,就算其中一台發生問題,另一台也是好的,進一步 「降低了危險性」 。
於是買了個新的小記憶體的伺服器專門用來做資料庫。開源不易啊,等計畫上線, 「還望大家多多支持」 。
另外對於資料庫, 「最好不要用 docker 安裝」 ,硬是要 docker,也一定要做好 「磁盤掛載」 才行,否則 docker 掛了,數據都不見了,磁盤掛載還可以把數據放在磁盤上永久保存。
5、定時備份資料庫數據
可以定時的備份資料庫,開發定時備份功能,每天晚上備份一下資料庫,如果沒有備份伺服器,可以把備份數據存在套用伺服器上。
我用的是阿裏雲內建的 「雲盤快照」 解決:
6、伺服器安全加固
觀察下伺服器是否存在異常行程占用過多的伺服器資源,可以參考這個文件做下作業系統加固:另外安全組不要放行不必要的埠,修改安全組規則。
總之還是那句忠告:不要覺得攻擊不會發生在自己身上,安全防護意識很重要。
👇🏻 點選下方閱讀原文,獲取魚皮往期編程幹貨。
往期推薦