默認安裝下,MySQL 綁定 0.0.0.0:3306 監聽所有網卡,任意外部 IP 可直連。netstat -anlp 可見:
tcp 0 0 0.0.0.0:3306 0.0.0.0:* LISTEN 638/mysqld
修改啟動腳本 /etc/init.d/mysql (或 mysqld_safe 參數):
# 原行
$bindir/mysqld_safe --datadir=$datadir --pid-file=$pid_file &
# 修改為
$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
# 僅允許特定應用服務器 IP 訪問
iptables -A INPUT -p tcp -s 10.0.1.0/24 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
# 或僅允許本機
iptables -A INPUT -p tcp -s 127.0.0.1 --dport 3306 -j ACCEPT
iptables -A INPUT -p tcp --dport 3306 -j DROP
注意:-s $ANY 非標準語法,請使用具體 CIDR。
[mysqld]
bind-address=127.0.0.1
# 或多 IP 綁定 (8.0.13+)
bind-address=127.0.0.1,10.0.1.100
# 動態修改 (需 RELOAD 權限)
SET GLOBAL bind_address='127.0.0.1';
netstat -an | grep 3306 僅顯示 127.0.0.1 或授權 IPtelnet db_ip 3306 應連接被拒/超時mysql -h 127.0.0.1 -u user -p 正常127.0.0.1 而非 localhost (避免 Unix Socket 差異)skip-networking:禁用 TCP 完全,導致本機 TCP 客戶端 (如 PHP PDO) 無法連線bind-address=127.0.0.1 (或具體內網管理 IP)CREATE USER 'app'@'10.0.1.%' IDENTIFIED BY 'strong_pass'; 拒絕 % 主機log_connections、log_disconnections,異地登入告警「拒絕來自 Internet 的直連」是資料庫安全基線第一條。雙重綁定 (配置 + 防火牆) 成本極低、收益極高,應納入所有 MySQL 部署的標準化檢查清單。