本篇文章更新時間:2020/03/20
如有資訊過時或語誤之處,歡迎使用 Contact 功能通知。
一介資男的 LINE 社群開站囉!歡迎入群聊聊~
如果本站內容對你有幫助,歡迎使用 BFX Pay 加密貨幣 或 新台幣 贊助支持。
MySQL 是著名的資料庫系統,建立他的方法網路上很多,Google 當前 VPS 作業系統
與 MySQL
關鍵字都可以找到教學文章。本篇是筆記建立後的環境設定!
操作分兩部分,一個是 my.cnf
的網路設定與機器裡的防火牆設定。
MySQL 服務可以純粹開在「本機(localhost)」端,這樣一來完全阻隔外界的連線。這種管制就是除了自己伺服器內部使用,其他都不接受。這種情況,除非伺服器在其他管道有問題導致本機被駭,不然資料庫已經很安全了。
設定方式如果在 CentOS
或 Fedora
系統下的話可以透過 skip-networking
參數,將這個參數加入 my.cnf
設定中,重啟 MySQL 完成。
如果在 Debian
或 Ubuntu
系統的話,上述參數預設是對外,所以要改透過 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 #重新載入
後記
個人覺得其實從防火牆這來會比較彈性,免得一下沒注意到是某個設定的問題就找半天,把「網路環境」這件事交給「防火牆」來管理就能從這直接下手查找!
可以預設把全機端口都封鎖的作法,而後逐一開放有需要用的服務端口,也是對自己使用了哪些服務有所掌控。
再來就是變更服務預設的端口也能避免預設大規模掃描攻擊,只是這樣連動的服務也都要跟著改,維護上並不是沒有其他延伸成本。