ข้อสันนิษฐานสำหรับทั้งเซิร์ฟเวอร์และไคลเอนต์มีข้อ จำกัด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