ฉันมีปัญหาใหญ่ ให้ฉันอธิบาย ฉันได้กำหนดค่าเครื่องสองเครื่องเครื่องหนึ่งเรียกว่า "fw" ซึ่งเป็นไฟร์วอลล์และอีกเครื่องหนึ่งเชื่อมต่อกับเครื่องนี้เรียกว่า "เซิร์ฟเวอร์" ทั้งสองเครื่องเป็นระบบบัสเตอร์ Debian 10 เครื่อง fw ใช้ iptables เพื่อปลอมแปลง IP "IP สาธารณะ": 88.20.100.2 ช่วงท้องถิ่น: 192.168.150.0/24
นี่คือการกำหนดค่าเซิร์ฟเวอร์ FTP ของฉัน vsftpd ให้มีโหมดพาสซีฟ
pasv_enable=ใช่
pasv_max_port=2000
pasv_min_port=1,000
pasv_address=88.20.100.2
อะไรเป็นพิเศษ มันใช้งานได้ถ้าฉันเปิดใช้งาน iptables บนไฟร์วอลล์ (enp0s9 = อินเทอร์เน็ต, enp0s3 = LAN)
iptables -P ไปข้างหน้าลดลง
iptables -A ไปข้างหน้า -p tcp --dport 21 -i enp0s9 -o enp0s3 -d 192.168.150.98 -j ยอมรับ
iptables -A ไปข้างหน้า -p tcp --sport 21 -i enp0s3 -o enp0s9 -s 192.168.150.98 -j ยอมรับ
iptables -A ไปข้างหน้า -p tcp --dport 1,000:2000 -d 192.168.150.98 -i enp0s9 -o enp0s3 -j ยอมรับ
iptables -A ไปข้างหน้า -p tcp --sport 1,000:2000 -s 192.168.150.98 -i enp0s3 -o enp0s9 -j ยอมรับ
iptables -t nat -A โพสต์ -s 192.168.0.0/16 -o enp0s9 -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp --dport 21 -j DNAT --to-destination 192.168.150.98:21
iptables -t nat -A PREROUTING -p tcp --destination-port 1,000:2000 -j DNAT --to-destination 192.168.150.98
ปัญหาของฉันคือฉันต้องการเปิดพอร์ต 1000:2000 เฉพาะเมื่อการเชื่อมต่อเกี่ยวข้องกับเซิร์ฟเวอร์ FTP ไม่ใช่ทุกครั้ง ฉันได้ลองกับ -m state และ -m conntrack แล้ว แต่ฉันเดาว่าฉันทำอะไรผิดไป ความคิดใด ๆ ขอบคุณ