Mysql

來自外部主機的 mysql 上的 TIME_WAIT 連接太多

  • February 26, 2017

我的 netstat 顯示超過 2,000 個 mysql 連接,其 TIME_WAIT 狀態似乎被卡住並且不會消失。幾個小時以來都是這樣,許多連接來自一個對我的數據庫伺服器沒有權限的 IP 地址。好像掛了,怎麼清除?這是蠻力攻擊嗎?我所有的使用者權限都有特定的主機,我不使用任何萬用字元。

這是netstat的片段:

tcp        0      0 server:mysql       static.98.17.76.1:45222 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:34341 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:51888 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:54459 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:49599 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:50751 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:50731 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:54658 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:58974 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:33800 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:59840 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:53495 TIME_WAIT  
tcp        0      0 server:mysql       static.98.17.76.1:51561 TIME_WAIT 

另外,我在 mysql 中的 PROCESSLIST 沒有顯示這些連接,所以我認為它們會立即被刪除,但不確定為什麼它們不會消失。這會導致 mysql 的最大連接數出現任何問題嗎?

如果netstat在 state 的 output 中發現一些連接TIME_WAIT,這可能是正常的。當您有太多短暫的聯繫時,您可能會獲得太多這些。

即使不需要提供任何使用者名、密碼或數據庫名稱,我也得到了其中的一些。只需輸入:

mysql -h your_server_ip
ERROR 1045 (28000): Access denied for user 'khaled'@'your_pc_ip' (using password: NO)

你會得到一個左連接TIME_WAIT狀態:

sudo netstat -anp | grep 3306
tcp      0      0 server_ip:3306      your_pc_ip:50464      TIME_WAIT   -

但是,建議拒絕來自此 IP 的訪問,尤其是在您不將此 IP 辨識為合法客戶端的情況下。像這樣的簡單 iptables 規則可以拒絕來自該 IP 的進一步請求:

sudo iptables -A INPUT -s bad_ip -p tcp --dport 3306 -j DROP

根據您是否有其他規則,您可能需要更改-A為。-I

引用自:https://serverfault.com/questions/834379