首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫

MySQL 安全強化:限制 3306 端口僅本機存取

     編輯:MySQL 資料庫相關知識

問題現象

netstat -anlp | grep mysql
tcp  0  0  0.0.0.0:3306  0.0.0.0:*  LISTEN  638/mysqld
# 0.0.0.0 表示監聽所有網路介面,對外開放,不安全

iptables 嘗試(失效)

iptables -A INPUT -p tcp -s $ANY --dport 3306 -j DROP
# 實測無效,因 MySQL 綁定在 0.0.0.0,防火牆規則可能被繞過或順序問題

正解:修改 MySQL 綁定位址

方法:編輯啟動腳本

# 編輯 /etc/init.d/mysql (或 /etc/init.d/mysqld)
# 找到啟動行:
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file >/dev/null 2>&1 &

# 修改為:
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file --bind-address=127.0.0.1 &

重啟驗證

/etc/init.d/mysql restart
netstat -l
# 預期結果:
tcp  0  0  localhost:mysql  *:*  LISTEN
# 或
tcp  0  0  localhost.localdomain:mysql  *:*  LISTEN

原理說明

  • --bind-address=127.0.0.1 讓 MySQL 僅監聽回環介面
  • 外部網路封包無法到達 3306 端口
  • 本機應用(PHP、Java 等)透過 localhost 或 127.0.0.1 仍可正常連線

替代方案:my.cnf 設定

[mysqld]
bind-address = 127.0.0.1

修改後重啟服務同樣生效,且不需動到啟動腳本,較易維護。

安全建議

  1. 生產環境務必限制僅本機存取
  2. 遠程管理請使用 SSH 隧道:ssh -L 3306:127.0.0.1:3306 user@server
  3. 定期用 netstat -anlp | grep 3306 驗證綁定狀態
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved