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

Linux MySQL 3306 埠被防火牆阻擋的 iptables 規則順序關鍵修復

     編輯:MySQL 資料庫相關知識

現象

已在 /etc/sysconfig/iptables 末尾加入:

-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 3306 -j ACCEPT

執行 service iptables restart 後,**仍無法連接 3306**。

根因:規則順序錯誤

iptables **按順序匹配**,首條匹配規則生效。預設鏈中通常存在:

-A RH-Firewall-1-INPUT -j REJECT --reject-with icmp-host-prohibited

若 ACCEPT 規則在 REJECT **之後**,封包早被拒絕,永遠輪不到 ACCEPT。

正確操作:插入到 REJECT 之前

# 1. 查看當前規則行號
iptables -L -n --line-numbers

# 2. 找到 REJECT 規則行號(假設為 8)
# 3. 在第 8 行之前插入 ACCEPT
iptables -I INPUT 8 -p tcp --dport 3306 -j ACCEPT

# 4. 持久化
service iptables save
# 或
iptables-save > /etc/sysconfig/iptables

一鍵修復腳本

#!/bin/bash
# fix_mysql_port.sh
REJECT_LINE=$(iptables -L INPUT -n --line-numbers | grep 'REJECT' | head -1 | awk '{print $1}')
if [ -n "$REJECT_LINE" ]; then
  iptables -I INPUT $REJECT_LINE -p tcp --dport 3306 -j ACCEPT
else
  iptables -A INPUT -p tcp --dport 3306 -j ACCEPT
fi
service iptables save
echo "Rule inserted before REJECT at line $REJECT_LINE"

驗證

iptables -L INPUT -n -v | grep 3306
# 應顯示 ACCEPT 規則且 pkts/bytes 計數增長

# 遠程測試
telnet  3306
nc -zv  3306

firewalld 環境(CentOS 7+)

firewall-cmd --permanent --add-port=3306/tcp
firewall-cmd --reload
# 限定來源 IP
firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="192.168.1.0/24" port port="3306" protocol="tcp" accept'
firewall-cmd --reload

雲廠商安全組(必檢)

  • 阿里雲/騰訊雲/華為雲/AWS:控制台 → 安全組 → 入站規則 → 添加 TCP 3306,來源填應用伺服器 CIDR。
  • 安全組優先於主機防火牆,**兩層皆需放行**。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved