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: