Encaminhamento de porta com IPTABLES e VBox

2

Eu tenho um pequeno problema em obter uma configuração apropriada do iptables no Ubuntu. Mas antes, deixe-me descrever a configuração da rede:

Estou usando a linha xDSL terminada com modem + roteador + DHCP servindo 192.168.1.0/24 sub-rede. Meu laptop e PC estão conectados a esta rede e obtêm os endereços 192.168.1.6 e 192.168.1.3, respectivamente. No PC, tenho o Ubuntu rodando com o VBox e duas máquinas virtuais (ambas do Ubuntu também). A interface vboxnet0 no PC recebe o IP 10.10.10.1 e as máquinas virtuais individuais recebem 10.10.10.10 e 10.10.10.11. A VM1 executa o servidor da web Apache para fins de teste.

Agora, no meu PC (192.168.1.3), posso acessar o site hospedado pelo VM1 Apache em 10.10.10.10, digitando o endereço no navegador. Não há problemas aí.

No entanto, eu gostaria de poder acessar o mesmo site do meu laptop (192.168.1.6), digitando o mesmo 10.10.10.10 na barra de endereços no navegador. Isso não funciona, no entanto. Não consigo acessar a rede por algum motivo. Parece que o endereço IP é desconhecido na rede 192.168.1.x. Se existe uma maneira de configurar isso de maneira simples via iptables, seria um ótimo começo.

Agora, se essa etapa for possível, eu gostaria de poder configurar uma configuração mais complexa. Usando 192.168.1.3 endereço e endereço de porta adequado, gostaria de poder encaminhar solicitações de serviço específicas para a instância de VM apropriada. Por exemplo, 192.168.1.3:80 deve ir para a VM1 e buscar o site hospedado do Apache. 192.168.1.3:4000 (por exemplo), deve ir para a VM2 e obter o serviço SFTP hospedado lá. Em suma, gostaria de executar o roteamento específico da porta de destino no PC para permitir a comunicação bidirecional entre computadores conectados a redes 192.168.1.x e VMs em execução na rede 10.10.10.x. Existe uma solução simples para isso usando o iptables?

aqui está um exemplo que eu criei até agora, mas não consegui fazer o encaminhamento funcionar corretamente. Tenho certeza de que há muitos erros aqui - é meu primeiro dia gasto no 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

Obrigado por qualquer ajuda

Marek

    
por user137708 02.06.2012 / 20:05

1 resposta

1

Em primeiro lugar, você deve considerar a configuração mais simples de usar a rede em ponte no VirtualBox. Isso essencialmente colocará as VMs diretamente na LAN, para que elas obtenham endereços 192.168.1.0/24 e possam ser acessadas diretamente de outras máquinas na LAN.

Sua regra DNAT parece correta, mas suspeito que ela esteja sendo bloqueada na cadeia FORWARD. Pacotes NATed ainda precisam atravessar a cadeia FORWARD, e assim eles precisam ser aceitos lá, com algo assim:

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

No entanto, sugiro que você configure a cadeia FORWARD para ACCEPT por padrão enquanto estiver executando as regras NAT. Quando o NAT estiver funcionando, comece a restringir a cadeia FORWARD.

    
por 03.06.2012 / 07:34