Re: iptables forward et qemu
Salut, J'apporte quelques précisions à mon probléme. J'ai une machine relier à internet sur la carte eth0. Sur cette machine je fais fonctionner un machine virtuelle qemu avec le service apache2. Pour que cela fonctionne correctement j'ai créer les régles : 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 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -s 172.20.0.0/24 -i tun0 -o eth0 -p tcp -j ACCEPT tun0 est l'interface réseau de la machine virtuelle 172.20.0.0/24 est le réseau de la machine virtuelle l'adresse de la machine virtuelle est 172.20.0.2 Ces régles sont permisives mais permettent de à la machine virtuelle d'accéder à internet et de communiquer avec la machine hote. Maintenant, je souhaite pouvoir accéder au serveur apache depuis internet avec l'adresse ip publique de la machine hote. Pour cela j'ai ajouté à mon script : modprobe iptable_nat modprobe iptable_filter echo 1 /proc/sys/net/ipv4/ip_forward # pour autoriser le forwarding # les 3 lignes pour accepter la tranlation iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT # les 6 lignes pour la machine virtuelle, j'affinerais les régles pour les rendre moin permissives une fois que ca marchera comme je veux ;-) 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 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -s 172.20.0.0/24 -i tun0 -o eth0 -p tcp -j ACCEPT # tun0 est l'interface réseau de la machine virtuelle # 172.20.0.0/24 est le réseau de la machine virtuelle # l'adresse de la machine virtuelle est 172.20.0.2 # 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 # 172.20.0.2 est l'adresse d l'interface réseau de la machine virtuelle où fonctione apache # je compte remplacer les régles tro pemissives par celle ci mais pour l'instant ca marche po :-( 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 # régles pour le masquerading pour le serveur web iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -j MASQUERADE j'ai cherché et testé plusieurs solution sans que ca marche et je vois pas mon erreur. merci d'avance David Hannequin -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.net/?DebianFrench Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: iptables forward et qemu
david hannequin a écrit : [...] Ces régles sont permisives mais permettent de à la machine virtuelle d'accéder à internet et de communiquer avec la machine hote. Bien. Maintenant, je souhaite pouvoir accéder au serveur apache depuis internet avec l'adresse ip publique de la machine hote. Pour cela j'ai ajouté à mon script : modprobe iptable_nat modprobe iptable_filter Pas vraiment utile, ces modules (et les autres) auraient été chargés automatiquement lors de la création des règles iptables qui en ont besoin. echo 1 /proc/sys/net/ipv4/ip_forward # pour autoriser le forwarding # les 3 lignes pour accepter la tranlation iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT # les 6 lignes pour la machine virtuelle, j'affinerais les régles pour les rendre moin permissives une fois que ca marchera comme je veux ;-) Bonne initiative. 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 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -s 172.20.0.0/24 -i tun0 -o eth0 -p tcp -j ACCEPT # tun0 est l'interface réseau de la machine virtuelle # 172.20.0.0/24 est le réseau de la machine virtuelle # l'adresse de la machine virtuelle est 172.20.0.2 # 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 # 172.20.0.2 est l'adresse d l'interface réseau de la machine virtuelle où fonctione apache Je rajouterais -i eth0, mais ce n'est pas essentiel. Et à ce stade, le serveur de la machine virtuelle est-il accessible depuis internet ? # je compte remplacer les régles tro pemissives Lesquelles ? par celle ci mais pour l'instant ca marche po :-( C'est-à-dire ? 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 # régles pour le masquerading pour le serveur web iptables -t nat -A POSTROUTING -s 172.20.0.0/24 -j MASQUERADE Ça m'a l'air correct. Il faudrait autoriser l'ICMP aussi, et peut-être le DNS (pour la résolution inverse d'adresses IP sources des requêtes) mais c'est secondaire. Tu as bien essayé d'accéder au serveur depuis internet et pas depuis la machine hôte, car d'une part ça ne marchera pas sans créer une règle DNAT dans la chaîne OUTPUT (et avoir un noyau qui va bien) et d'autre part ça ne prouvera pas que l'accès depuis internet fonctionne. -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.net/?DebianFrench Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
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 ? -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.net/?DebianFrench Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]
Re: iptables forward et qemu
david hannequin wrote: Bonjour, Je viens de créer une machine virtuel avec qemu mais je veux pouvoir y accéder depuis le web. Pour cela j'ai ajouter les régles iptables suivantes : # on accept les translations iptables -t nat -P PREROUTING ACCEPT iptables -t nat -P POSTROUTING ACCEPT iptables -t nat -P OUTPUT ACCEPT # 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 iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE iptables -A FORWARD -s 172.20.0.0/24 -i tun0 -o eth0 -p tcp -j ACCEPT # http tun0 iptables -A INPUT -i tun0 -p tcp --dport 80 -j ACCEPT iptables -A OUTPUT -o tun0 -p tcp --sport 80 -j ACCEPT # 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 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 Je vois as mon erreur, est ce que vous avez une idée ? N'aurais-tu pas oublié d'activer le forward ? Mettre ip_forward=yes dans le fichier /etc/network/options et relancer la configuration du réseau : $ /etc/init.d/networking restart Fnor -- Lisez la FAQ de la liste avant de poser une question : http://wiki.debian.net/?DebianFrench Vous pouvez aussi ajouter le mot ``spam'' dans vos champs From et Reply-To: To UNSUBSCRIBE, email to [EMAIL PROTECTED] with a subject of unsubscribe. Trouble? Contact [EMAIL PROTECTED]