Ubuntu에서 iptables를 올바르게 구성하는 데 작은 문제가 있습니다. 하지만 그 전에 네트워크 구성을 설명하겠습니다.
나는 192.168.1.0/24 서브넷을 제공하는 모뎀+라우터+DHCP로 종료된 xDSL 회선을 사용하고 있습니다. 내 노트북과 PC는 이 네트워크에 연결되어 있으며 각각 192.168.1.6 및 192.168.1.3 주소를 얻습니다. PC에서는 VBox와 2개의 가상 머신(둘 다 Ubuntu 포함)으로 Ubuntu를 실행하고 있습니다. PC의 vboxnet0 인터페이스에는 IP 10.10.10.1이 할당되고 개별 가상 머신에는 10.10.10.10 및 10.10.10.11이 할당됩니다. VM1은 테스트 목적으로 Apache 웹 서버를 실행합니다.
이제 내 PC(192.168.1.3)에서 브라우저에 주소를 입력하여 VM1 Apache 호스팅 웹 사이트(10.10.10.10)에 액세스할 수 있습니다. 거기에는 문제가 없습니다.
하지만 브라우저의 주소 표시줄에 동일한 10.10.10.10을 입력하여 내 노트북(192.168.1.6)에서 동일한 웹사이트에 액세스할 수 있기를 원합니다. 그러나 이것은 작동하지 않습니다. 어떤 이유로 네트워크를 통과할 수 없습니다. 192.168.1.x 네트워크에서는 IP 주소를 알 수 없는 것 같습니다. iptables를 통해 간단한 방식으로 구성할 수 있는 방법이 있다면 좋은 시작이 될 것입니다.
이제 그 단계가 가능하다면 더 복잡한 설정을 구성할 수 있으면 좋겠습니다. 192.168.1.3 주소와 적절한 포트 주소를 사용하여 특정 서비스 요청을 적절한 VM 인스턴스로 전달할 수 있도록 하고 싶습니다. 예를 들어 192.168.1.3:80은 VM1로 이동하여 Apache 호스팅 웹 사이트를 가져와야 합니다. 192.168.1.3:4000(예:)은 VM2로 이동하여 그곳에서 SFTP 서비스를 호스팅해야 합니다. 간단히 말해서, 192.168.1.x 네트워크에 연결된 컴퓨터와 10.10.10.x 네트워크에서 실행되는 VM 간의 양방향 통신을 허용하기 위해 PC에서 대상 포트별 라우팅을 수행하고 싶습니다. 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에서 브리지 네트워킹을 사용하는 더 간단한 설정을 고려해야 합니다. 이는 기본적으로 VM을 LAN에 직접 배치하므로 VM은 192.168.1.0/24 주소를 얻고 LAN의 다른 시스템에서 직접 액세스할 수 있습니다.
귀하의 DNAT 규칙은 정확해 보이지만 FORWARD 체인에서 차단되고 있는 것 같습니다. NAT 패킷은 여전히 FORWARD 체인을 통과해야 하므로 다음과 같이 받아들여야 합니다.
iptables --append FORWARD --in-interface eth1 --out-interface vboxnet0 --destination 10.10.10.10 --protocol tcp --dport 80 --jump ACCEPT
그러나 NAT 규칙이 작동하는 동안 기본적으로 ACCEPT로 FORWARD 체인을 구성하는 것이 좋습니다. NAT가 작동하면 FORWARD 체인 제한을 시작합니다.