ฉันมีปัญหาเล็กน้อยในการรับการตั้งค่าที่เหมาะสมของ 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
ขอบคุณสำหรับความช่วยเหลือ
มาเร็ค