2012-04-07 158 views
0

我們正面臨着從我們的應用服務器和數據庫服務器(MySQL的)之間的最後幾天,一個奇怪的問題:從應用服務器連接到數據庫服務器掛在SYN_SENT狀態,之後我們是不是能夠做出任何連接到MySQL端口上的數據庫服務器(3306)。當我們檢查數據庫服務器上的netstat輸出時,它處於SYN_RECV狀態。連接到MySQL服務器SYN_SENT

我能弄清楚的是,mysql服務器正在接收SYN請求並響應,並且它沒有到達客戶端,因此服務器端的SYN_RECV和客戶端的SYN_SENT。我認爲SYN_SENT狀態應該過一段時間,並且因爲這個其他數據庫連接嘗試到同一臺服務器不應該掛起。

有誰知道我們該如何解決這個問題?

輸出安裝詳細信息:應用程序服務器:RHEL 5.4,kernel-release = 2.6.18-164.el5,x86_64數據庫服務器:Mysql版本:5.1.49 RHEL 5.4,kernel-release = 2.6.18-164.el5 ,x86_64的

回答

0

修復了服務器只有本地主機訪問:在綁定地址 組127.0.0.1在my.cnf

修復了連接到遠程IP的 (REMOTE_IP與遠程IP取代)

iptables -A INPUT -p tcp -d 127.0.0.1 --dport 3306 -s REMOTE_IP -j ACCEPT 
iptables -A INPUT -p udp -d 127.0.0.1 --dport 3306 -s REMOTE_IP -j ACCEPT 
iptables -A INPUT -p tcp --dport 3306 -j DROP 
iptables -A INPUT -p udp --dport 3306 -j DROP 

你也需要設置綁定在my.cnf中的IP到0.0.0.0秒的規則,你不需要,我只是讓它確定;)(udp部分)

概念驗證: 首先允許從remoteip連接到目的地-d = 127.0.0.1本地主機) -p TCP/UDP = protocoll TCP或UDP

在此之後規則,你需要做一個規則,丟棄所有請求的TCP/UDP連接端口3306

爲什麼這個工作: 因爲iptables要走「數字」。始終遵循一條規則。

你可以看到你的規則使用命令:

iptables -L INPUT -n --line-numbers 

所顯示的第一條規則是第一條規則,所以如果你說接受所有的連接,並從後IP XXXX然後所有連接砸不工作。 你需要選擇作爲第一條規則,從這個IP刪除所有連接,然後允許所有連接。 (這是一個壞榜樣。)

,如果你失敗了,你可以顯示你的規則,並採取在規則前面的數字,並用命令刪除規則條目:

iptables -D INPUT <<number here>>