[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Re: iptables forward et qemu



Salut,

david hannequin a écrit :

Je viens de créer une machine virtuel avec qemu mais je veux pouvoir y accéder depuis le web.

Plutôt depuis internet, non ? "Acéder depuis le web", ça ne veut rien dire. On accède *au* web, pas depuis le web.

Pour cela j'ai ajouter les régles iptables suivantes :

Pour que je sois sûr de comprendre : ces règles sont créées sur la machine hôte, pas sur la machine virtuelle ? Et tun0 est l'interface réseau de la machine hôte qui permet de communiquer avec la machine virtuelle ?

# on accept les translations
iptables -t nat -P PREROUTING ACCEPT
iptables -t nat -P POSTROUTING ACCEPT
iptables -t nat -P OUTPUT ACCEPT

Normalement c'est déjà par défaut, on ne fait pas de filtrage dans la table 'nat'.

# Pour la machine qemu
iptables -A INPUT -i tun0 -j ACCEPT
iptables -A OUTPUT -o tun0 -j ACCEPT
iptables -A FORWARD -i tun0 -j ACCEPT
iptables -A FORWARD -o tun0 -j ACCEPT

Plutôt permissif. Mais pourquoi pas pour un premier test afin de vérifier la connectivité.

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

eth0 est l'interface de la machine hôte vers internet ?

iptables -A FORWARD -s 172.20.0.0/24 -i tun0 -o eth0 -p tcp -j ACCEPT

Inutile, la règle précédente "FORWARD -i tun0" a déjà accepté.
A quoi correspond 172.20.0.0/24 ?

# http tun0
iptables -A INPUT -i tun0 -p tcp --dport 80 -j ACCEPT
iptables -A OUTPUT -o tun0 -p tcp --sport 80 -j ACCEPT

Inutile, les règles précédentes "INPUT -i tun0" et "OUTPUT -o tun0" ont déjà tout accepté. Et pour le trafic retour, on n'utilise pas (uniquement) le port source mais (aussi) le suivi de connexion. Sinon c'est facile de contourner le pare-feu, il suffit d'attaquer à partir du port source accepté. Au fait, à quoi sont censées servir ces deux règles ? Si je lis bien, à permettre à la machine virtuelle d'accéder au serveur web de la machine hôte ?

# Web vers tun0 pour le serveur web
iptables -t nat -A PREROUTING -p tcp --dport 80 -j DNAT --to-destination 172.20.0.2:80

A quoi correspond 172.20.0.2 ?

iptables -A FORWARD -i eth0 -o tun0 -p tcp --destination-port 80 -m state --state NEW,ESTABLISHED -j ACCEPT iptables -A FORWARD -o eth0 -i tun0 -p tcp --source-port 80 -m state --state ESTABLISHED -j ACCEPT

Inutile, les règles précédentes "FORWARD -i tun0" et "FORWARD -o tun0" ont déjà tout accepté.

Je vois as mon erreur, est ce que vous avez une idée ?

Commence par préciser la configuration réseau de la machine hôte et de la machine virtuelle (interfaces, adresses, routes). Ensuite explique ce que tu attends, ce qui marche et ce qui ne marche pas, le résultat précis des tests exacts (commandes, messages d'erreur, capture de trafic réseau...) que tu as effectués (ping, traceroute, tcptraceroute...) Le "forwarding" IP est-il activé sur la machine hôte (net.ipv4.ip_forward=1) ?
Si oui, la machine virtuelle peut-elle accéder à internet ?



Reply to: