FTP เชื่อมต่อไม่ได้? วิธีตรวจสอบและแก้ไขอย่างเป็นระบบ
FTP ยังคงถูกใช้งานอย่างแพร่หลายสำหรับการอัปโหลดไฟล์เว็บไซต์ สำรองข้อมูล และแลกเปลี่ยนไฟล์ระหว่างระบบ เมื่อ FTP มีปัญหาเชื่อมต่อไม่ได้ ผลกระทบจึงเกิดขึ้นทันที ไม่ว่าจะอัปโหลดเว็บไม่ได้ หรือ Backup ล้มเหลว
บทความนี้จะพาตรวจสอบและแก้ปัญหา FTP อย่างเป็นระบบ ไม่ว่าจะใช้ VPS, Dedicated Server หรือโฮสติ้งของ DriteStudio ก็ใช้แนวทางเดียวกัน
ตรวจสอบข้อมูลการเชื่อมต่อก่อน
Host Port Username Password
สิ่งแรกที่ต้องเช็คคือข้อมูลการเชื่อมต่อ Hostname หรือ IP ถูกต้องไหม Port ตรงกับเซิร์ฟเวอร์หรือเปล่า (ค่าเริ่มต้นคือ Port 21 สำหรับ FTP และ 990 สำหรับ FTPS) Username และ Password ถูกต้องไหม
ทดสอบการเชื่อมต่อพื้นฐาน
ก่อนใช้ FTP Client ให้ทดสอบการเชื่อมต่อพื้นฐานก่อน
# ทดสอบว่าเซิร์ฟเวอร์เข้าถึงได้
ping -c 4 your-server-ip
# ทดสอบว่า FTP Service ตอบรับ
telnet your-server-ip 21
ถ้า telnet เชื่อมต่อสำเร็จจะเห็นข้อความประมาณนี้
220 (vsFTPd 3.0.5)
ทดสอบ Login ผ่าน Command Line ได้โดยตรง
ftp your-server-ip
# ใส่ Username และ Password เมื่อถูกถาม
ตรวจสอบ Firewall ทั้งสองฝั่ง
Firewall ฝั่ง Server
ตรวจสอบว่า Firewall เปิด Port 21 สำหรับ Control Channel และ Port Range สำหรับ Passive Mode
# ตรวจสอบ Rule ปัจจุบันของ firewalld
sudo firewall-cmd --list-all
# เปิด FTP Service
sudo firewall-cmd --permanent --add-service=ftp
# เปิด Passive Port Range
sudo firewall-cmd --permanent --add-port=40000-50000/tcp
sudo firewall-cmd --reload
สำหรับ iptables
# เปิด Port 21
sudo iptables -A INPUT -p tcp --dport 21 -j ACCEPT
# เปิด Passive Port Range
sudo iptables -A INPUT -p tcp --dport 40000:50000 -j ACCEPT
# บันทึก Rules
sudo iptables-save > /etc/iptables/rules.v4
Cloud Security Group
สำหรับเซิร์ฟเวอร์บน Cloud ต้องเช็ค Security Group หรือ Network ACL ด้วย เพราะอาจบล็อก Port FTP ในระดับเครือข่าย
ปัญหา Active Mode กับ Passive Mode
Active Mode
ใน Active Mode เซิร์ฟเวอร์จะเชื่อมต่อกลับมาหา Client เพื่อส่งข้อมูล แต่ Firewall หรือ NAT ฝั่ง Client มักบล็อกการเชื่อมต่อขาเข้า ทำให้รับข้อมูลไม่ได้
Passive Mode
Passive Mode แก้ปัญหานี้โดยให้ Client เป็นฝ่ายเชื่อมต่อไปหาเซิร์ฟเวอร์ทั้ง Control และ Data Channel เป็นมิตรกับ Firewall และ NAT มากกว่า
ตั้งค่า Passive Mode บน vsftpd
แก้ไขไฟล์ /etc/vsftpd.conf เพิ่มการตั้งค่า Passive Mode
# เปิดไฟล์ Config
sudo nano /etc/vsftpd.conf
เพิ่มหรือแก้ไขบรรทัดเหล่านี้
pasv_enable=YES
pasv_min_port=40000
pasv_max_port=50000
pasv_address=YOUR_SERVER_PUBLIC_IP
จากนั้น Restart Service
sudo systemctl restart vsftpd
ตรวจสอบ FTP Server Service
ตรวจสอบว่า Service ทำงานอยู่
# สำหรับ vsftpd
sudo systemctl status vsftpd
# สำหรับ ProFTPD
sudo systemctl status proftpd
# ถ้า Service หยุดทำงาน ให้รีสตาร์ท
sudo systemctl restart vsftpd
ตรวจสอบ Configuration ที่สำคัญของ vsftpd
# ดู Config ทั้งหมด
cat /etc/vsftpd.conf | grep -v "^#" | grep -v "^$"
ค่าที่ต้องตรวจสอบ
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
chroot_local_user=YES
ปัญหา FTPS (FTP over SSL/TLS)
เมื่อใช้ FTPS ปัญหาที่เจอบ่อยคือ Certificate หมดอายุหรือชื่อโดเมนไม่ตรง ตรวจสอบ Certificate
# ตรวจสอบ Certificate ของ FTPS
openssl s_client -connect your-server:990 -quiet 2>/dev/null | openssl x509 -noout -dates -subject
การดูแลความปลอดภัยเป็นสิ่งที่ DriteStudio แนะนำเสมอ FTPS มีสองแบบ Implicit ใช้ Port 990 เข้ารหัสทันที ส่วน Explicit ใช้ Port 21 เริ่มเข้ารหัสหลังส่งคำสั่ง AUTH TLS
ปัญหาสิทธิ์การเข้าถึง
แม้เชื่อมต่อได้แต่อ่านเขียนไฟล์ไม่ได้ มักเป็นเพราะ Permission ไม่เพียงพอ
# ตรวจสอบ Permission ของ Home Directory
ls -la /home/ftpuser/
# แก้ไข Permission
sudo chown ftpuser:ftpuser /home/ftpuser/public_html
sudo chmod 755 /home/ftpuser/public_html
# ตรวจสอบว่า User อยู่ในระบบ
id ftpuser
ตรวจสอบ Log
Log เป็นแหล่งข้อมูลสำคัญที่สุดในการ Debug
# ดู Log ของ vsftpd แบบ Real-time
sudo tail -f /var/log/vsftpd.log
# ค้นหา Error ล่าสุด
sudo grep "FAIL\|ERROR\|refused" /var/log/vsftpd.log | tail -20
# สำหรับ ProFTPD
sudo tail -f /var/log/proftpd/proftpd.log
ทางเลือกที่ปลอดภัยกว่า FTP
สำหรับการถ่ายโอนไฟล์ที่ต้องการความปลอดภัยสูง แนะนำ SFTP ซึ่งเข้ารหัสทั้งหมดผ่าน SSH
# เชื่อมต่อ SFTP
sftp user@your-server-ip
# อัปโหลดไฟล์
sftp> put localfile.txt /remote/path/
# ดาวน์โหลดไฟล์
sftp> get /remote/path/file.txt
คำถามที่พบบ่อย (FAQ)
FTP กับ SFTP ต่างกันอย่างไร?
FTP ส่งข้อมูลแบบไม่เข้ารหัส (ยกเว้น FTPS) และใช้หลาย Port ส่วน SFTP ทำงานผ่าน SSH ใช้ Port 22 เดียว เข้ารหัสทุกอย่าง ปลอดภัยกว่ามาก
ทำไมเชื่อมต่อ FTP ได้แต่ List ไฟล์ไม่ได้?
มักเป็นปัญหา Passive Mode ลองเปลี่ยนจาก Active เป็น Passive Mode ใน FTP Client และตรวจสอบว่า Firewall เปิด Passive Port Range แล้ว
FileZilla แสดง Error "Connection timed out" ทำอย่างไร?
ตรวจสอบ Firewall ทั้งฝั่ง Client และ Server ลองเปลี่ยน Port ลองเปลี่ยนจาก Active เป็น Passive Mode และตรวจสอบว่า FTP Service ทำงานอยู่
ปัญหา FTP มีสาเหตุได้หลายอย่าง ตั้งแต่ข้อมูลเชื่อมต่อผิด Firewall บล็อก Active/Passive Mode ไปจนถึง Certificate และสิทธิ์ ตรวจสอบอย่างเป็นระบบจะแก้ได้เร็ว สำหรับองค์กรที่ต้องการระบบถ่ายโอนไฟล์ที่เสถียร Colocation ของ DriteStudio ช่วยให้เซิร์ฟเวอร์ทำงานในสภาพแวดล้อมที่เหมาะสม ติดต่อทีมงานได้เลย