ดูเหมือนว่าพอร์ต 3306 จะถูกปิดบนเซิร์ฟเวอร์ Ubuntu ของฉัน


33

ฉันมีเซิร์ฟเวอร์VPSสองตัวและทั้งคู่ติดตั้งMySQLหนึ่งตัวสำหรับการทดสอบและอีกตัวสำหรับการพัฒนา เซิร์ฟเวอร์ตัวใดตัวหนึ่งของฉันจะไม่ให้ฉันเชื่อมต่อจากภายนอก กับผู้ใช้;

'mytestuser' @ '%'

จากตัวค้นหาพอร์ตเปิดพอร์ต 3306 สำหรับเซิร์ฟเวอร์ที่ละเมิดปรากฏว่าปิด ฉันมีโปรแกรม C ++ และ Java ของตัวเองในการฟังพอร์ตต่าง ๆ โดยไม่มีปัญหา เหตุใดสิ่งนี้จึงเกิดขึ้นและฉันจะแก้ไขได้อย่างไร

Ubuntu ที่ติดตั้งคือ Ubuntu 11.10 (GNU / Linux 2.6.32-042stab072.10 x86_64)

ผลลัพธ์ของnetstat -tupleในแต่ละเซิร์ฟเวอร์

เซิร์ฟเวอร์ที่ละเมิด

tcp        0      0 localhost.lo:submission *:*                     LISTEN      root       39967664    -

เซิร์ฟเวอร์ที่ใช้งานได้

tcp        0      0 *:mysql                 *:*                     LISTEN      mysql      1847519288  -

คำตอบ:


76

ปัญหาคือว่าเซิร์ฟเวอร์ฟังภายในเท่านั้น

การลบบรรทัดbind-address 127.0.0.1ออกจากการ/etc/mysql/my.cnfแก้ไขปัญหา

Ubuntu รุ่นใหม่กว่า (≥16.04) อาจมีบรรทัด/etc/mysql/mysql.conf.d/mysqld.cnfนี้


2
สิ่งนี้ใช้ได้สำหรับฉัน หมายเหตุชื่อไฟล์ที่ถูกต้องคือไม่/etc/mysql/my.cnf /etc/mysql/my.conf
Larry Battle

ฉันเปลี่ยนที่อยู่ผูกของฉันเพื่อให้ตรงกับที่อยู่ ip ของเซิร์ฟเวอร์ภายนอกและที่ทำงานให้ฉัน
Buttle Butkus

ลบบรรทัดออกอย่างสมบูรณ์และเซิร์ฟเวอร์จะรับฟังการเชื่อมต่อทั้งหมด
s1mmel

คุณช่วยชีวิตฉันไว้พยายามแก้ปัญหานี้มาสองสามสัปดาห์แล้วขอบคุณ!
budiantoip

9

คำแนะนำของฉันถ้าคุณแน่ใจว่าพอร์ตถูกปิด (ฉันคิดว่ามันแปลกสำหรับ VPS ที่จะปิดพอร์ตนั้น) คือการเปลี่ยนไฟล์การตั้งค่าของ MySQL เพื่อใช้งานอื่น

เพียงเปิดไฟล์การกำหนดค่าในเทอร์มินัลแล้วsudo nano /etc/mysql/mysql.confมองหา[mysqld]ส่วน port = 3306ในนั้นให้มองหาบรรทัดที่อ่านว่า เปลี่ยนเป็นพอร์ตอื่นที่ไม่ได้ใช้งานและบันทึกไฟล์

แล้วก็เริ่มต้นอย่างใดอย่างหนึ่งหรือ VPS sudo service mysql restartเริ่มบริการเช่น

ขอให้สังเกตว่าหากไฟล์mysql.confไม่ได้อยู่ในไฟล์ที่ฉันกล่าวถึงข้างต้นไฟล์นั้นอาจอยู่ในที่อื่น:

/etc/my.conf
/etc/my.cnf
/etc/mysql/my.conf

และถ้าserviceคำสั่งไม่ทำงานให้ทำสิ่งนี้:

sudo /etc/init.d/mysql restart

หากปัญหายังคงอยู่ในกรณีของฉันฉันจะตรวจสอบiptables (ฉันจะลบทุกอย่างใน iptables เพียงเพื่อเริ่มต้นใหม่ถ้าเป็นตัวเลือก) หรือตัวเลือกอื่น ๆ ที่เปิดใช้งานไฟร์วอลล์

เนื่องจากเป็น VPS ฉันจะตรวจสอบแผงควบคุม VPS เพื่อดูว่ามีตัวเลือกใด ๆ ที่สามารถบล็อกพอร์ตได้หรือไม่

นอกจากนั้นฉันจะใช้nmapVPS เพื่อดูพอร์ตที่คุณเปิด คุณต้องเรียกใช้จากนอก VPS เพื่อดูว่าพอร์ตใดเปิดอยู่

netstat -tuplen เป็นความคิดที่ดีที่จะดูว่าคุณเปิดพอร์ตใดบนเซิร์ฟเวอร์และพอร์ตใดที่อยู่ในโหมดรับฟัง


เฮ้ฉันลองมันที่พอร์ตอื่นและมันก็ยังทำตัวผิดฉันก็ลอง 'iptables -A-input -i eth0 -p tcp -m tcp - พอร์ต PORT -j ACCEPT' แต่ไม่มีโชค :( .. แก้ไข im ไม่ได้ o eth0 .. อาจมีความหวัง
Andy

@Andy คำตอบที่ปรับปรุงแล้วเพื่อรวมคำแนะนำเพิ่มเติม
Luis Alvarado

ขอบคุณสำหรับคำแนะนำ Luis ฉันจะตรวจสอบเรื่องนี้
Andy

ฉันได้อัปเดตผลลัพธ์ของ netstat -tuple ให้กับคำถาม ดูเหมือนว่ามีปัญหาที่นี่
Andy

6

ฉันคงนี้โดยการเปลี่ยนbind-address 127.0.0.1ไปbind-address 0.0.0.0ใน/etc/mysql/mysql.conf.d(เพื่อให้ MySQL ฟังบนพอร์ตทั้งหมด)

นอกจากนี้ฉันตั้งค่าบัญชีผู้ใช้ mysql ที่จะใช้จากระยะไกล (ดูhttps://stackoverflow.com/a/24171107/132374 )


6

ฉันใช้วิธีนี้:

sudo ufw status
sudo ufw allow XXXX/tcp
# use a port other than the default/predictable 3306
# work outside, and close the door when you are done
sudo ufw deny XXXX/tcp

ไม่จำเป็นต้องเปลี่ยนไฟล์การกำหนดค่าอื่น ๆ และไม่มีพอร์ตพิเศษที่เปิดโดยค่าเริ่มต้น


sudo ufw allow 3306/tcpฉันพยายามแก้ไข แต่จะไม่ยอมให้ฉัน
อดัม

1

อาจเกิดขึ้นว่าการกำหนดค่าของคุณอยู่ในไดเรกทอรี/etc/mysql/mysql.conf.d/mysqld.cnfตรวจสอบว่าไม่ใช่กรณี


1
ฉันพยายามคิดออกมาประมาณสามชั่วโมงก่อนที่ฉันจะเห็นสิ่งนี้ขอบคุณ!
Oliver Ni
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.