ข้อสันนิษฐานสำหรับทั้งเซิร์ฟเวอร์และไคลเอนต์มีข้อ จำกัดINPUTและเปิดOUTPUTเช่น:
iptables -P INPUT DROP
iptables -P OUTPUT ACCEPT
และจากiptables-extensions (8)เหนือตัวอย่างของ FTP ในโหมด active:
1. ใหม่
ใหม่แพ็กเก็ตเริ่มต้นการเชื่อมต่อใหม่หรือเชื่อมโยงกับการเชื่อมต่อซึ่งไม่เห็นแพ็กเก็ตทั้งสองทิศทาง
ไคลเอ็นต์บนพอร์ต50000( พอร์ตunprivileged สุ่ม) เชื่อมต่อกับเซิร์ฟเวอร์ FTP บนพอร์ต21เซิร์ฟเวอร์จะต้องใช้อย่างน้อยสิ่งนี้เพื่อยอมรับการเชื่อมต่อขาเข้านี้:
iptables -A INPUT --dport 21 -m state --state NEW -j ACCEPT
2. ก่อตั้งขึ้น
ก่อตั้งขึ้นแพ็คเก็ตที่เกี่ยวข้องกับการเชื่อมต่อซึ่งได้เห็นแพ็คเก็ตในทั้งสองทิศทาง
ตอนนี้ในฝั่งไคลเอ็นต์เขาเปิดการเชื่อมต่อออกไปยังเซิร์ฟเวอร์บนพอร์ต21ใช้พอร์ตท้องถิ่น50000และเขาต้องการ iptables ต่อไปนี้เพื่อช่วยให้การตอบสนองที่จะมาถึงจากserver (21)ไปclient (50000):
sudo iptables -A INPUT -m state --state ESTABLISHED -j ACCEPT
3. ที่เกี่ยวข้อง
ที่เกี่ยวข้องแพ็กเก็ตกำลังเริ่มต้นการเชื่อมต่อใหม่ แต่เชื่อมโยงกับการเชื่อมต่อที่มีอยู่เช่นการถ่ายโอนข้อมูล FTP หรือข้อผิดพลาด ICMP
ตอนนี้หลังจากการเชื่อมต่อ FTP ได้ถูกสร้างขึ้นและกำลังทำการเชื่อมต่อข้อมูลลูกค้าจะเปิดซ็อกเก็ตเซิร์ฟเวอร์ (ใช่ด้วยไคลเอนต์ FTP ที่ใช้งานจะกลายเป็นเซิร์ฟเวอร์สำหรับการเชื่อมต่อข้อมูล) บนพอร์ต60000(ไปยังไคลเอนต์เข้าใจฉันจะทำเครื่องหมายพอร์ตนี้60000เช่นเดียวRELATEDกับการเชื่อมต่ออื่น ๆ จาก50000->21) และจะส่งหมายเลขพอร์ตนี้ไปยังเซิร์ฟเวอร์โดยใช้PORTคำสั่งFTP จากนั้นเซิร์ฟเวอร์ FTP จะเปิดการเชื่อมต่อใหม่จากพอร์ต20ไปยังพอร์ต60000บนไคลเอนต์และตอนนี้ไคลเอนต์ต้องใช้สิ่งต่อไปนี้เพื่อให้การเชื่อมต่อใหม่นี้ประสบความสำเร็จ:
sudo iptables -A INPUT -m state --state RELATED -j ACCEPT
ในที่สุดสำหรับการทำงานคุณต้องเปิดใช้งานip_conntrack_ftpโมดูลเคอร์เนลเพื่อให้ระบบทำเครื่องหมายการเชื่อมต่อ / แพ็คเกจเป็นRELATED(นี่คือความเข้าใจของฉันฉันไม่ได้ขุดมากเกินไป):
modprobe ip_conntrack_ftp