[Linux] 建立安全的 MySQL 資料庫連線環境方法

本篇文章更新時間:2020/03/20
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~


MySQL 是著名的資料庫系統,建立他的方法網路上很多,Google 當前 VPS 作業系統MySQL 關鍵字都可以找到教學文章。本篇是筆記建立後的環境設定!

操作分兩部分,一個是 my.cnf 的網路設定與機器裡的防火牆設定。

MySQL 服務可以純粹開在「本機(localhost)」端,這樣一來完全阻隔外界的連線。這種管制就是除了自己伺服器內部使用,其他都不接受。這種情況,除非伺服器在其他管道有問題導致本機被駭,不然資料庫已經很安全了。

設定方式如果在 CentOSFedora 系統下的話可以透過 skip-networking 參數,將這個參數加入 my.cnf 設定中,重啟 MySQL 完成。

如果在 DebianUbuntu 系統的話,上述參數預設是對外,所以要改透過 bind-address 參數設定。

這個 bind-address 參數是指要把服務綁在哪個網路介面(IP)上,設定 bind-address = 127.0.0.1 指定「本機」就能把服務只對內開。(設定成 0.0.0.0 或不設定都等於對外開放)

設定完成後也一樣要重新啟動 MySQL 。到這步都要非常確定你的資料庫服務完全不需要對「外」(除了自己以外)開啟。不然可能會導致服務中斷!

而如果要開放讓其他遠端電腦連線就不能照上述操作設定,需改成設定電腦中防火牆來處理。

防火牆的話也可以辦到上述「純本機」的結果:

iptables -A INPUT -p tcp --dport 3306 -j DROP

使用 iptables 指令新增一個對 Port 3306 預設開放端口限制外部「全部」請求的規則。

如果有其他台電腦要連線進來的話就要先把允許請求規則先建立,而後阻擋其他請求。

iptables -A INPUT -p tcp --dport 3306 -s xxx.xxx.xxx.xxx -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP

指令都是預設情境下,自己根據使用情境調整即可。像是多幾組 IP 連線,或是 MySQL 開放的 Port 號不同等修改上述指令。但就是不對外裸露全開放,採用指定方式授權。

Ubuntu 可以安裝 iptables-persistent 這套件來把設定儲存防火牆設定,避免重開機後就洗掉了。

apt-get --no-install-recommends install -y iptables-persistent

儲存 iptables 防火牆設定

/etc/init.d/netfilter-persistent save #儲存
/etc/init.d/netfilter-persistent reload #重新載入

後記

個人覺得其實從防火牆這來會比較彈性,免得一下沒注意到是某個設定的問題就找半天,把「網路環境」這件事交給「防火牆」來管理就能從這直接下手查找!

可以預設把全機端口都封鎖的作法,而後逐一開放有需要用的服務端口,也是對自己使用了哪些服務有所掌控。

再來就是變更服務預設的端口也能避免預設大規模掃描攻擊,只是這樣連動的服務也都要跟著改,維護上並不是沒有其他延伸成本。


Share:

作者: Chun

資訊愛好人士。主張「人人都該為了偷懶而進步」。期許自己成為斜槓到變進度條 100% 的年輕人。[//////////____30%_________]

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *