วิธีกำหนดค่า vsftpd ให้ทำงานกับโหมดพาสซีฟ


49

เมื่อใดก็ตามที่ฉันจะติดตั้งvsftpdบนผมติดตั้งเพียงสภาพแวดล้อมคุกสำหรับผู้ใช้และส่วนที่เหลือเป็นค่าเริ่มต้นของcentos vsftpdฉันสร้างผู้ใช้และพยายามเชื่อมต่อกับfilezilaไคลเอนต์ ftp แต่ฉันไม่สามารถเชื่อมต่อกับโหมดพาสซีฟได้ ฉันมักจะเปลี่ยนเป็นtransfer settingsโหมดที่ใช้งานอยู่เพื่อเชื่อมต่อกับสิ่งftp serverอื่นที่ฉันได้รับสำเร็จ

 Error: Failed to retrieve directory listing

ดังนั้นมีวิธีการเปลี่ยนคำสั่งในvsftp.confไฟล์และเราสามารถเชื่อมต่อกับโหมดพาสซีฟกับเซิร์ฟเวอร์ได้หรือไม่

คำตอบ:


86

ในการกำหนดค่าโหมดพาสซีฟสำหรับ vsftpd คุณต้องตั้งค่าพารามิเตอร์บางตัวใน vsftpd.conf

pasv_enable=Yes
pasv_max_port=10100
pasv_min_port=10090

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

iptables -I INPUT -p tcp --destination-port 10090:10100 -j ACCEPT

หากหลังจากการทดสอบทั้งหมดใช้งานได้แล้วให้บันทึกสถานะไฟร์วอลล์ของคุณด้วย

service iptables save

ซึ่งจะอัปเดต/etc/sysconfig/iptablesไฟล์

ในการทำเช่นนี้คือ CentOS 7 คุณต้องใช้ firewalld ใหม่ไม่ใช่ iptables:

ค้นหาโซนของคุณ:

# firewall-cmd --get-active-zones
public
  interfaces: eth0

โซนของฉันคือ 'สาธารณะ' ดังนั้นฉันตั้งค่าโซนของฉันเป็นสาธารณะเพิ่มช่วงพอร์ตและหลังจากนั้นเราโหลดใหม่:

# firewall-cmd --permanent --zone=public --add-port=10090-10100/tcp
# firewall-cmd --reload

จะเกิดอะไรขึ้นเมื่อคุณทำการเชื่อมต่อ

  • ไคลเอนต์ของคุณทำการเชื่อมต่อกับเซิร์ฟเวอร์ vsftpd บนพอร์ต 21

  • เซิร์ฟเวอร์จะตอบกลับไปยังไคลเอ็นต์เพื่อบอกพอร์ตที่จะเชื่อมต่อกับช่วงที่ระบุข้างต้น

  • ไคลเอนต์ทำการเชื่อมต่อข้อมูลบนพอร์ตที่ระบุและเซสชันดำเนินการต่อ

มีคำอธิบายที่ดีเกี่ยวกับโหมด ftp ที่แตกต่างกันที่นี่


สงสัยว่าทำไมคุณถึงใส่maxพอร์ตหลังจากmin... แต่ที่สำคัญกว่านั้นคือถ้าคุณเปิดพอร์ต 10090 ถึง 10100 นั่นคือ 11 พอร์ตและไม่ใช่ 10 อย่างที่คุณพูด
Alexis Wilke

ฉันเชื่อว่ามันเรียงตามตัวอักษรมันไม่สำคัญเพราะมันเป็นคำสั่งที่แยกจากกัน
user9517 รองรับ GoFundMonica

3
pasv_addressนี้จะไม่ทำงานสำหรับฉันโดยไม่ต้อง
fbmd

เอาฉันทุกวัยเพื่อหาสิ่งนี้ไม่มีคำแนะนำ vsftpd รายการนี้ ... สดใส
Pete

ที่ยอดเยี่ยม - การกำหนดค่า vsftp นี้แก้ไขปัญหา FTP ไฟร์วอลล์ทั้งหมดของฉัน :)
BurninLeo

24

หากต้องการเปิดใช้งานโหมดพาสซีฟให้ตั้งค่าตัวเลือกการกำหนดค่าต่อไปนี้ใน vsftp.conf ของคุณ:

pasv_enable=YES
pasv_min_port=41361
pasv_max_port=65534
pasv_address=xxx.xxx.xxx.xxx

แน่นอนคุณสามารถเปลี่ยนพอร์ตเริ่มต้นและสิ้นสุดและควรแทนที่ xxx's ด้วย IP สาธารณะของเซิร์ฟเวอร์ของคุณ

นอกจากนี้คุณควรเปิดช่วงพอร์ตแฝงในไฟร์วอลล์ของคุณ บน centos คุณสามารถโหลดip_conntrack_ftpโมดูลเพื่อจัดการการเชื่อมต่อ ftp ในไฟร์วอลล์ของคุณ แก้ไข/etc/sysconfig/iptables-configและเพิ่ม ip_conntrack_ftp ให้กับตัวเลือก IPTABLES_MODULES หลังจากนั้นให้รีสตาร์ท iptables:

/sbin/service iptables restart

3
pasv_addressเป็นสิ่งที่หลอกลวงเมื่อทุกอย่างได้รับการตั้งค่าและมันยังไม่ทำงาน
fbmd

1
@fbmd ก่อนที่จะลอง pasv_address เราควรตรวจสอบว่าทั้ง pasv_max และ min_port นั้นถูกต้องหรือไม่ เกิดขึ้นกับฉันว่าฉันมีค่าสูงสุดที่กำหนดไว้ใน pasv_min_port และ vsftpd ไม่สนใจสิ่งนี้ เป็นข้อบกพร่อง / บั๊กเงียบที่รู้จักกันดีซึ่งจะทำให้คุณมองเห็นว่าพอร์ต pasv นั้นถูกตั้งค่าไว้อย่างถูกต้อง แต่มันไม่ใช่ สิ่งนี้เกิดขึ้นกับฉันและแก้ไขปัญหาของฉัน
Pedro Sousa

หากคุณต้องการระบุที่อยู่ DNS pasv_addressคุณควรเพิ่มpasv_addr_resolve=YES(ค่าเริ่มต้นเป็นNO)
Pierre-Damien

6

นอกเหนือจากนั้นpasv_enable=YESให้ระบุช่วงพอร์ตที่ VSFTP จะเรียกใช้โหมด PASV:

pasv_min_port=50000
pasv_max_port=50999
port_enable=YES

อย่าลืมกำหนดค่า iptables อนุญาตให้ส่งแพ็กเก็ตบนพอร์ตเหล่านี้:

iptables -I INPUT -p tcp --dport 50000:50999 -j ACCEPT

บนระบบ CentOS มาตรฐานมี DROP แบบครอบคลุมที่ทำให้กฎถูกเพิ่มด้วยiptables -A INPUT ... ที่จะถูกละเว้น
9517 รองรับ GoFundMonica

ตรวจสอบให้แน่ใจว่าคุณรวมpasv_addressไว้ในไฟล์ vsftpd.conf
เปโดรมาดริด

3

โดยปกติแล้วไม่ใช่เซิร์ฟเวอร์ ftp, vsftpd แต่ไฟร์วอลล์เช่น iptable ที่ป้องกันการใช้โหมดพาสซีฟ (การบล็อกการเชื่อมต่อ tcp ที่จำเป็นสำหรับการถ่ายโอนข้อมูล)


ที่จริงแล้ว vsftpd อาจฉลาดพอที่จะเปิดพอร์ตในไฟร์วอลล์ ... แต่จากคำตอบที่ฉันเห็นที่นี่ดูเหมือนว่ามันจะไม่สามารถทำได้
Alexis Wilke

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