พอร์ตการส่งต่อกับ IPTABLES และ VBox


2

ฉันมีปัญหาเล็กน้อยในการรับการตั้งค่าที่เหมาะสมของ iptables ภายใต้ Ubuntu แต่ก่อนอื่นให้ฉันอธิบายการกำหนดค่าเครือข่าย:

ฉันใช้ xDSL บรรทัดถูกยกเลิกด้วยโมเด็ม + เราเตอร์ + DHCP ที่ให้บริการซับเน็ต 192.168.1.0/24 แล็ปท็อปและพีซีของฉันเชื่อมต่อกับเครือข่ายนี้และรับที่อยู่ 192.168.1.6 และ 192.168.1.3 ตามลำดับ บนพีซีฉันมี Ubuntu ที่ทำงานด้วย VBox และเครื่องเสมือน 2 เครื่อง (ทั้ง Ubuntu เช่นกัน) อินเตอร์เฟส vboxnet0 บนพีซีได้รับการกำหนด IP 10.10.10.1 และเครื่องเสมือนแต่ละเครื่องได้รับ 10.10.10.10 และ 10.10.10.11 VM1 เรียกใช้ Apache เว็บเซิร์ฟเวอร์เพื่อวัตถุประสงค์ในการทดสอบ

ตอนนี้จากพีซีของฉัน (192.168.1.3) ฉันสามารถเข้าถึงเว็บไซต์โฮสต์ VM1 Apache ได้ที่ 10.10.10.10 โดยพิมพ์ที่อยู่ในเบราว์เซอร์ ไม่มีปัญหา

อย่างไรก็ตามฉันต้องการเข้าถึงเว็บไซต์เดียวกันจากแล็ปท็อปของฉัน (192.168.1.6) โดยพิมพ์ 10.10.10.10 เดียวกันในแถบที่อยู่ในเบราว์เซอร์ สิ่งนี้ไม่ได้ผล ฉันไม่สามารถผ่านเครือข่ายด้วยเหตุผลบางอย่าง ดูเหมือนว่าที่อยู่ IP จะไม่เป็นที่รู้จักในเครือข่าย 192.168.1.x หากมีวิธีการกำหนดค่าในวิธีที่ง่ายผ่าน iptables ก็จะเป็นการเริ่มต้นที่ดี

ตอนนี้ถ้าเป็นไปได้ขั้นตอนนั้นฉันอยากจะสามารถกำหนดค่าการตั้งค่าที่ซับซ้อนมากขึ้น การใช้ที่อยู่ 192.168.1.3 และที่อยู่พอร์ตที่เหมาะสมฉันต้องการส่งต่อคำขอบริการเฉพาะไปยังอินสแตนซ์ VM ที่เหมาะสม ตัวอย่างเช่น 192.168.1.3:80 ควรไปที่ VM1 และดึงเว็บไซต์โฮสต์ Apache 192.168.1.3:4000 (ตัวอย่าง) ควรไปที่ VM2 และรับบริการ SFTP ที่นั่น กล่าวโดยย่อฉันต้องการดำเนินการกำหนดเส้นทางพอร์ตปลายทางบนพีซีเพื่อให้สามารถสื่อสารแบบสองทิศทางระหว่างคอมพิวเตอร์ที่เชื่อมต่อกับเครือข่าย 192.168.1.x และ VM ที่ทำงานในเครือข่าย 10.10.10.x มีวิธีง่ายๆในการใช้ iptables นี้หรือไม่?

นี่เป็นตัวอย่างที่ฉันปรุงขึ้นมาในตอนนี้ แต่ไม่สามารถทำการส่งต่อได้อย่างถูกต้อง ฉันแน่ใจว่ามีข้อผิดพลาดมากมายที่นี่ - นี่เป็นวันแรกที่ฉันใช้ iptables

clear
# cleaning Firewall Rules , change ACCEPT to DROP if you want to shield
# the server, then you open ports as you need
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT

# Accepts all established inbound connections
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# opening INPUT ports (22,80,8080)
iptables -A INPUT --protocol tcp --dport 22 -j ACCEPT && echo "rule input 22 ok"
iptables -A INPUT --protocol tcp --dport 80 -j ACCEPT && echo "rule input 80 ok"
iptables -A INPUT --protocol tcp --dport 443 -j ACCEPT && echo "rule input 443 ok"
iptables -A INPUT --protocol tcp --dport 8080 -j ACCEPT && echo "rule input 8080 ok"

#allow Loopback and networks
iptables -A INPUT -i lo -j ACCEPT  && echo "rule 7 ok"
#Accept any input from 10.10.10.0 network in vboxnet0 interface
iptables -A INPUT -s 10.10.10.0/24  -i vboxnet0 -j ACCEPT  && echo "rule 8 ok"

#enable Port forwarding
echo 1 > /proc/sys/net/ipv4/ip_forward

# Opening PREROUTING - Filtering : this make the port forwarding trick.
# Forward as many ports you want to certain machines of the network to provide services such web server, ftp server, etc...
iptables -t nat -A PREROUTING -p tcp -i eth1 -d 192.168.1.0/24 --dport 8080 -j DNAT --to 10.10.10.10:80  && echo "rule 9 ok"
#iptables -t nat -A PREROUTING -p tcp -i eth1 -d xxx.xxx.xxx.xxx --dport 53 -j DNAT --to 10.10.10.14:53  && echo "rule 10 ok"
#iptables -t nat -A PREROUTING -p udp -i eth1 -d xxx.xxx.xxx.xxx --dport 53 -j DNAT --to 10.10.10.14:53  && echo "rule 11 ok"
#iptables -t nat -A PREROUTING -p udp -i eth1 -d xxx.xxx.xxx.xxx --dport 21 -j DNAT --to 10.10.10.16:21  && echo "rule 12 ok"

#Opening FORWARD ports for network services on vlan
iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 80 -j ACCEPT && echo "rule 13 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 21 -j ACCEPT  && echo "rule 14 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 68 -j ACCEPT  && echo "rule 15 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 22 -j ACCEPT  && echo "rule 16 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p tcp --dport 53 -j ACCEPT && echo "Rule 17 ok"
#iptables -A FORWARD -s 10.10.10.0/24 -i vboxnet0 -p udp --dport 53 -j ACCEPT && echo "Rule 18 ok"

# Opening POSTROUTING PROCESSES
# Netmasking is absolutelly necesary to protect vlan from attacks, only it hides their ip....
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -o eth1 -j MASQUERADE  && echo "rule 19 ok"

# Reject all other inbound - default deny unless explicitly allowed policy
iptables -A INPUT -j REJECT
iptables -A FORWARD -j REJECT

# test and display the rules if runs properly
iptables -L

ขอบคุณสำหรับความช่วยเหลือ

มาเร็ค

คำตอบ:


1

ประการแรกคุณควรพิจารณาการตั้งค่าที่ง่ายกว่าในการใช้บริดจ์เชื่อมต่อเครือข่ายใน VirtualBox สิ่งนี้จะทำให้ VMs โดยตรงบน LAN ดังนั้นพวกเขาจะได้รับ 192.168.1.0/24 ที่อยู่และสามารถเข้าถึงได้โดยตรงจากเครื่องอื่น ๆ บน LAN

กฎ DNAT ของคุณดูถูกต้อง แต่ฉันสงสัยว่ามันถูกบล็อกในเครือข่าย FORWARD แพ็คเก็ต NATed ยังคงต้องสำรวจห่วงโซ่ไปข้างหน้าและดังนั้นพวกเขาจำเป็นต้องได้รับการยอมรับที่นั่นด้วยสิ่งนี้:

iptables --append FORWARD --in-interface eth1 --out-interface vboxnet0 --destination 10.10.10.10 --protocol tcp --dport 80 --jump ACCEPT

อย่างไรก็ตามฉันขอแนะนำให้คุณกำหนดค่าโซ่ FORWARD ให้ยอมรับตามค่าเริ่มต้นในขณะที่คุณได้รับกฎ NAT ทำงาน เมื่อ NAT ทำงานแล้วให้ จำกัด ห่วงโซ่ FORWARD

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