Port forwarding con IPTABLES e VBox


2

Ho un piccolo problema con ottenere una corretta configurazione di iptables sotto Ubuntu. Ma prima, lasciami descrivere la configurazione di rete:

Sto usando la linea xDSL terminata con modem + router + DHCP che serve la sottorete 192.168.1.0/24. Il mio laptop e PC sono collegati a questa rete e ricevono gli indirizzi 192.168.1.6 e 192.168.1.3 rispettivamente. Su PC, ho Ubuntu in esecuzione con VBox e 2 macchine virtuali (anche Ubuntu). All'interfaccia vboxnet0 su PC viene assegnato l'IP 10.10.10.1 e le singole macchine virtuali ottengono il 10.10.10.10 e il 10.10.10.11. VM1 esegue il server web Apache a scopo di test.

Ora, dal mio PC (192.168.1.3), posso accedere al sito Web ospitato su VM1 Apache al 10.10.10.10 digitando l'indirizzo nel browser. Nessun problema lì.

Tuttavia, vorrei poter accedere allo stesso sito Web dal mio laptop (192.168.1.6), digitando lo stesso 10.10.10.10 nella barra degli indirizzi nel browser. Questo non funziona, però. Non riesco ad accedere alla rete per qualche motivo. Sembra che l'indirizzo IP sia sconosciuto sulla rete 192.168.1.x. Se c'è un modo per configurarlo in modo semplice tramite iptables, sarebbe un ottimo inizio.

Ora, se questo passaggio è possibile, vorrei essere in grado di configurare una configurazione più complessa. Utilizzando l'indirizzo 192.168.1.3 e l'indirizzo di porta corretto, vorrei essere in grado di inoltrare richieste di servizio specifiche all'istanza di VM corretta. Ad esempio, 192.168.1.3:80 dovrebbe andare su VM1 e recuperare il sito Web ospitato Apache. 192.168.1.3:4000 (ad esempio), dovrebbe andare su VM2 e ottenere il servizio SFTP ospitato lì. In breve, vorrei eseguire il routing specifico della porta di destinazione sul PC per consentire la comunicazione bidirezionale tra i computer collegati alle reti 192.168.1.xe le macchine virtuali in esecuzione nella rete 10.10.10.x. C'è una soluzione semplice per questo usando iptables?

ecco un esempio che ho elaborato ormai, ma non sono stato in grado di far funzionare correttamente l'inoltro. Sono sicuro che ci sono tonnellate di errori qui - è il mio primo giorno trascorso su 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

Grazie per tutto l'aiuto

Marek

Risposte:


1

Innanzitutto, dovresti prendere in considerazione la configurazione più semplice dell'utilizzo di reti con bridge in VirtualBox. Questo essenzialmente metterà le VM direttamente sulla LAN, così avranno 192.168.1.0/24 indirizzi e saranno accessibili direttamente da altre macchine sulla LAN.

La tua regola DNAT sembra corretta, ma sospetto che sia bloccata nella catena FORWARD. I pacchetti NATed devono ancora attraversare la catena FORWARD, e quindi devono essere accettati lì, con qualcosa del genere:

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

Tuttavia, suggerirei di configurare la catena FORWARD su ACCETTA per impostazione predefinita mentre le regole NAT funzionano. Una volta che il NAT funziona, inizia a limitare la catena FORWARD.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.