Renvoi de port avec IPTABLES et VBox

J'ai un petit problème avec la configuration correcte d'iptables sous Ubuntu. Mais avant, permettez-moi de décrire la configuration du réseau:

J'utilise la ligne xDSL terminée avec modem + routeur + DHCP desservant le sous-réseau 192.168.1.0/24. Mon ordinateur portable et mon PC sont connectés à ce réseau et reçoivent respectivement les adresses 192.168.1.6 et 192.168.1.3. Sur PC, j'ai Ubuntu en cours d'exécution avec VBox et 2 machines virtuelles (Ubuntu aussi). L'interface vboxnet0 sur PC est affectée à IP 10.10.10.1 et les machines virtuelles individuelles obtiennent 10.10.10.10 et 10.10.10.11. VM1 exécute le serveur web Apache à des fins de test.

Maintenant, à partir de mon PC (192.168.1.3), je peux accéder au site Web hébergé VM1 Apache au 10.10.10.10 en tapant l'adresse dans le navigateur. Aucun problème là-bas.

Cependant, j'aimerais pouvoir accéder au même site web à partir de mon ordinateur portable (192.168.1.6) en tapant le même 10.10.10.10 dans la barre d'adresse du navigateur. Cela ne fonctionne pas cependant. Je ne peux pas passer par le réseau pour une raison quelconque. Il semble que l'adresse IP soit inconnue sur le réseau 192.168.1.x. S'il existe un moyen de configurer cela de manière simple via iptables, ce serait un bon début.

Maintenant, si cette étape est possible, j'aimerais pouvoir configurer une configuration plus complexe. En utilisant l'adresse 192.168.1.3 et l'adresse de port appropriée, j'aimerais pouvoir transférer des requêtes de service spécifiques à une instance de VM appropriée. Par exemple, 192.168.1.3:80 devrait passer à VM1 et récupérer le site Web hébergé par Apache. 192.168.1.3:4000 (par exemple), devrait passer à VM2 et obtenir le service SFTP hébergé là-bas. En bref, j'aimerais effectuer un routage spécifique au port de destination sur le PC pour permettre une communication bidirectionnelle entre les ordinateurs connectés aux réseaux 192.168.1.x et les machines virtuelles exécutant le réseau 10.10.10.x. Existe-t-il une solution simple pour cela en utilisant iptables?

Voici un exemple que j'ai préparé maintenant, mais je n'ai pas réussi à faire fonctionner correctement. Je suis sûr qu'il y a des tonnes d'erreurs ici – c'est mon premier jour consacré à 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 

Merci pour toute aide

Marek

Tout d'abord, vous devriez considérer la configuration plus simple de l'utilisation de réseaux pontés dans VirtualBox. Cela impliquera essentiellement les machines virtuelles directement sur le réseau local, de sorte qu'elles obtiendront des adresses 192.168.1.0/24 et pourront être consultées directement à partir d'autres machines sur le réseau local.

Votre règle DNAT semble correcte, mais je soupçonne qu'elle est bloquée dans la chaîne FORWARD. Les paquets naturels doivent toujours traverser la chaîne FORWARD, et ils doivent donc être acceptés là-bas, avec quelque chose comme ceci:

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

Cependant, je suggère que vous configurez la chaîne FORWARD pour ACCEPTER par défaut pendant que vous obtenez les règles NAT fonctionnant. Une fois que le NAT fonctionne, commencez à restreindre la chaîne FORWARD.