Score:0

Centos7 ไม่สามารถเชื่อมต่อกับเซิร์ฟเวอร์ FTP คำสั่ง 200 PORT สำเร็จ พิจารณาใช้ PASV 425 สร้างการเชื่อมต่อไม่สำเร็จ

ธง cn

ฉันกำลังพยายามเชื่อมต่อเซิร์ฟเวอร์ linux ftp ในหน้าต่างพร้อมรับคำสั่ง มันทำงานได้ดีเมื่อพอร์ต ftp เป็นค่าเริ่มต้น (20, 21)

มันไม่ทำงานหลังจากที่ฉันเปลี่ยนพอร์ตเริ่มต้นของ FTP , FTP-DATA

ใช่ ฉันได้ตรวจสอบไฟร์วอลล์แล้ว (เหมือนกันเมื่อหยุดไฟร์วอลล์) และใช่ ฉันได้ตรวจสอบไฟล์ vsftpd.conf แล้ว

มีอะไรอีกบ้างที่จะตรวจสอบว่าพอร์ตมีการเปลี่ยนแปลงหรือไม่ ฉันคิดว่ามีเพียง vsftpd.conf เท่านั้นที่มีผลกับพอร์ต FTP และ FTP-DATA

  • ทำงานได้ดีเมื่อพอร์ตเป็นค่าเริ่มต้น (20, 21)

ป้อนคำอธิบายรูปภาพที่นี่

  • 425 สร้างการเชื่อมต่อไม่สำเร็จ เมื่อฉันเปลี่ยนพอร์ต

ป้อนคำอธิบายรูปภาพที่นี่

และนี่คือไฟล์ /etc/vsftpd/vsftpd.conf ของฉัน

anonymous_enable=ไม่
local_enable=ใช่
write_enable=ใช่
local_umask=022
Listen_port=39021 # เพิ่มสิ่งนี้
dirmessage_enable=ใช่
xferlog_enable=ใช่
connect_from_port_20=ไม่
ftp_data_port=39020 # เพิ่มสิ่งนี้
xferlog_std_format=ใช่
ftpd_banner=ยินดีต้อนรับสู่บริการ FTP
chroot_local_user=ใช่
chroot_list_enable=ใช่
chroot_list_file=/etc/vsftpd/chroot_list
ฟัง=ใช่
port_enable=ใช่
pam_service_name=vsftpd
userlist_enable=ใช่
tcp_wrappers=ไม่
pasv_enable=ใช่ # เพิ่มสิ่งนี้
pasv_min_port=60019 # เพิ่มสิ่งนี้
pasv_max_port=60020 # เพิ่มสิ่งนี้ 
pasv_address=[My IP] # เพิ่มสิ่งนี้ 
allow_writeable_chroot=ใช่
port_promiscuous=ใช่ # เพิ่มสิ่งนี้ 
Nikita Kipriyanov avatar
za flag
Active FTP สร้างการเชื่อมต่อแบบ *ย้อนกลับ* (จากเซิร์ฟเวอร์ไปยังไคลเอ็นต์) ปิดใช้งาน (หรือจัดเตรียม) ไฟร์วอลล์บนเครื่อง *ทั้งคู่* เพื่อให้ทำงานได้ ดูเหมือนว่าตอนนี้เครื่องไคลเอนต์ของคุณหรือบางสิ่งที่อยู่ตรงกลางยังไม่พร้อมให้เซิร์ฟเวอร์เชื่อมต่อจากพอร์ตที่ไม่ใช่ค่าเริ่มต้น ลองจับทราฟฟิก (เช่น wireshark, tcpdump) ทั้งสองด้านเพื่อดูว่าเกิดอะไรขึ้น นอกจากนี้ยังแนะนำให้คุณใช้โหมดพาสซีฟ (`PASV`) ซึ่งไม่ต้องพึ่งพาพฤติกรรมนี้ คุณลองไหม // โปรดคัดลอกและวางข้อความถอดเสียงลงในคำถามเป็น *ข้อความ* ไม่ใช่รูปภาพ และโปรดให้เป็นสำเนาที่สมบูรณ์
Score:2
ธง za

ข้อมูลไม่เพียงพอที่จะมีคำตอบที่สมบูรณ์ แต่คุณต้องจำไว้เสมอว่า FTP ไม่ใช่โปรโตคอลธรรมดา ในกรณีที่ง่ายที่สุด คล่องแคล่ว FTP ทำงานดังนี้:

  1. คุณทำการเชื่อมต่อการควบคุมกับพอร์ต 21 (เซิร์ฟเวอร์ FTP) ซึ่งผ่าน
  2. คุณรับรองความถูกต้อง
  3. คุณบอกเซิร์ฟเวอร์ที่จะทำการเชื่อมต่อ (IP และพอร์ต)
  4. คุณสั่งให้เซิร์ฟเวอร์เริ่มการถ่ายโอน
  5. เดอะ เซิร์ฟเวอร์ ทำให้ อื่น การเชื่อมต่อกับ IP และพอร์ตที่คุณบอกและส่งหรือรับข้อมูล

โดยปกติในขั้นตอนที่ 3 คุณจะแจ้งให้เซิร์ฟเวอร์ทราบ IP ของคุณและพอร์ตที่ไคลเอ็นต์ FTP ของคุณกำลังฟัง ดังนั้นการเชื่อมต่ออื่นในขั้นตอนที่ 5 จึงถูกสร้างขึ้น ในทิศทางตรงกันข้ามจากเซิร์ฟเวอร์ถึงคุณ

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

มีสองกรณี: คุณอนุญาตพอร์ต (หรือบางช่วง) แบบคงที่และกำหนดค่าไคลเอ็นต์ FTP ของคุณให้ใช้พอร์ตนั้นเสมอ หรือคุณมีไฟร์วอลล์ที่ชาญฉลาดมาก แอบฟัง ในการเชื่อมต่อการควบคุม แยก IP และพอร์ตและสร้างกฎชั่วคราวแบบไดนามิกที่อนุญาตการเชื่อมต่อย้อนกลับ สิ่งนี้เรียกว่า แอลจี ซึ่งย่อมาจาก เกตเวย์ระดับแอปพลิเคชัน.

ไฟร์วอลล์รู้ได้อย่างไรว่าการเชื่อมต่อใดที่จะดักฟัง มันรู้ว่า FTP ทำงานผ่าน TCP/21 ดังนั้นจึงมองหาการรับส่งข้อมูลบนพอร์ตนั้น จะทำอย่างไรถ้าคุณเปลี่ยนพอร์ตควบคุม คุณอาจเดาได้ว่า: ALG จะไม่ทำงานไฟร์วอลล์จะไม่เพิ่มกฎไดนามิกเพิ่มเติม ดังนั้นความพยายามในการเชื่อมต่อข้อมูลย้อนกลับจะไม่สำเร็จ

หวังว่าถ้าคุณกำหนดค่า "ALG" ให้ทำงานกับพอร์ตที่ไม่ใช่ค่าเริ่มต้น ปัญหาจะได้รับการแก้ไข อย่างไรก็ตาม นี่ไม่ใช่กรณีเสมอไป ถามก่อนว่า ที่ ไฟร์วอลล์ที่เรากำลังพูดถึง? โลกสมัยใหม่ใช้ไฟร์วอลล์อย่างหนัก ทั้งสองด้านและระหว่างนั้น และยังมีการใช้ NAT อย่างหนัก (รวมถึง CGN ซึ่งใช้โดย ISP) NAT ใดๆ ก็ต้องการ ALG เช่นกัน โดยจำเป็นต้องสร้างกฎการแปลแบบไดนามิกสำหรับไคลเอ็นต์ซึ่งอยู่เบื้องหลัง NAT และผู้ที่เริ่มธุรกรรม คุณจะประสบความสำเร็จด้วยวิธีนี้ก็ต่อเมื่อคุณสามารถกำหนดค่า ALG ทุกรายการตามเส้นทางที่คุณต้องการได้ ดูว่าฉันจะไปที่ไหน?

มีสอง วิธีแก้ปัญหาทั่วไป. อย่างแรก ง่ายๆ: พึ่งพา ALG ซึ่งกำหนดให้คุณไม่ต้องเปลี่ยนพอร์ตควบคุม FTP เริ่มต้น (พูดตามตรง 20 ปีของการจัดการเซิร์ฟเวอร์และฉันยังไม่เข้าใจประเด็นของการใช้พอร์ตที่ไม่ใช่ค่าเริ่มต้น สิ่งนี้สร้างปัญหามากกว่าแก้ปัญหา) . ประการที่สอง ง่ายเกินไป: ใช้โหมด FTP แบบพาสซีฟ

เดอะ เฉยเมย FTP ทำงานดังนี้:

  1. คุณทำการเชื่อมต่อกับพอร์ต 21 (เซิร์ฟเวอร์ FTP) ซึ่งผ่าน
  2. คุณรับรองความถูกต้อง
  3. คุณเข้าสู่โหมดพาสซีฟ และเซิร์ฟเวอร์ตอบกลับด้วย IP และพอร์ต
  4. คุณสั่งให้เซิร์ฟเวอร์เริ่มการถ่ายโอน
  5. คุณ ทำการเชื่อมต่ออื่นกับ IP และพอร์ตที่เซิร์ฟเวอร์แจ้งให้คุณทราบ และรับหรือส่งข้อมูล

โปรดสังเกตว่าขั้นตอนเดียวที่เปลี่ยนแปลงคือ 3 และ 5 ซึ่งหลีกเลี่ยงการเชื่อมต่อแบบย้อนกลับ

สิ่งนี้ช่วยแก้ปัญหาบางส่วนเกี่ยวกับพอร์ตที่ไม่ใช่ค่าเริ่มต้นและ ALG ที่ไม่ได้รับการควบคุม นอกจากนี้ยังช่วยให้สามารถใช้การเข้ารหัสบนการเชื่อมต่อการควบคุม (ซึ่งทำลาย ALGs โดยเนื้อแท้)

so flag
ถูกต้อง. โปรดทราบว่า OP ใช้บรรทัดคำสั่ง `ftp` ของ Windows ซึ่งไม่รองรับโหมดพาสซีฟ ดังนั้นจึงจำเป็นต้องเปลี่ยนลูกค้า https://stackoverflow.com/q/18643542/850848

โพสต์คำตอบ

คนส่วนใหญ่ไม่เข้าใจว่าการถามคำถามมากมายจะปลดล็อกการเรียนรู้และปรับปรุงความสัมพันธ์ระหว่างบุคคล ตัวอย่างเช่น ในการศึกษาของ Alison แม้ว่าผู้คนจะจำได้อย่างแม่นยำว่ามีคำถามกี่ข้อที่ถูกถามในการสนทนา แต่พวกเขาไม่เข้าใจความเชื่อมโยงระหว่างคำถามและความชอบ จากการศึกษาทั้ง 4 เรื่องที่ผู้เข้าร่วมมีส่วนร่วมในการสนทนาด้วยตนเองหรืออ่านบันทึกการสนทนาของผู้อื่น ผู้คนมักไม่ตระหนักว่าการถามคำถามจะมีอิทธิพลหรือมีอิทธิพลต่อระดับมิตรภาพระหว่างผู้สนทนา