Configuration Iptables de DomU Xen en Nat -- Debian --

Résolu/Fermé
duff4 Messages postés 34 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 18 juillet 2014 - Modifié par duff4 le 12/07/2014 à 18:42
duff4 Messages postés 34 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 18 juillet 2014 - 18 juil. 2014 à 21:18
Bonjour,

Je suis débutant et j'ai un problème avec mon firewall iptables car je n'arrive pas à le configurer. J'ai activé le mode Nat de Xen, créé un DomU d'ip 10.10.10.1. Mon objectif est de fermer TOUS les ports du firewall puis de les ouvrir un par un. Pour comprendre le principe, j'ai réussi à faire un apt-get update sur le Dom0 en ouvrant les chaines INPUT/OUTPUT des ports 80 (tcp) et 53 (tcp/udp) et ça marche! Mais Je n'arrive pas à configurer la table FILTER et NAT pour l'apt-get sur les DomU (et ouvrir et rediriger le port 80 vers le DomU d'ip 10.10.10.1).
Je voudrais procéder ainsi:
# Bloquage des ports
iptables -t filter -P INPUT DROP
iptables -t filter -P FORWARD DROP
iptables -t filter -P OUTPUT DROP
# ouverture des ports du Dom0
[...] <- ça marche
# ouverture des ports du DomU d'ip 10.10.10.1
iptables -A FORWARD -p tcp -d 10.10.10.1 --dport 80 -j ACCEPT
iptables -A FORWARD -p tcp -d 10.10.10.1 --dport 53 -j ACCEPT
iptables -A FORWARD -p udp -d 10.10.10.1 --dport 53 -j ACCEPT
iptables -A PREROUTING -t nat -p tcp --dport 80 -j DNAT --to 10.10.10.1:80
iptables -A PREROUTING -t nat -p tcp --dport 53 -j DNAT --to 10.10.10.1:53
iptables -A PREROUTING -t nat -p udp --dport 53 -j DNAT --to 10.10.10.1:53
et... ça marche pas! (pas de apt-get ni possibilité d'acccéder au port 80 du DomU de l'extérieur...)
Pouvez-vous m'aider? Merci infiniement
A voir également:

4 réponses

cocoche95 Messages postés 1134 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 27 novembre 2019 543
12 juil. 2014 à 20:13
Hello,

Votre DomU étant local, vous devez utiliser la chaine OUTPUT et non FORWARD.
0
duff4 Messages postés 34 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 18 juillet 2014
12 juil. 2014 à 22:31
Bonsoir,
suite à votre remarque, j'ai modifié le code... ça donne ça:

#! /bin/bash

# Affichage du message d'accueil:
echo -e "\n\n--- SCRIPT DE PARAMÊTRAGE DU FIREWALL ---\n"

# reinitialisation du firewall...
echo "reinitialisation du firewall"
sleep 1
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
echo " [fait]"
# Bloquage des ports
echo "bloquage des ports..."
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
echo " [fait]"


# Ouverture des ports Dom0:
echo "ouverture des ports Dom0..."
# autorisation des connexions établies
echo " - aurositation des connexions établies..."
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo " [fait]"
# Autorisation du loopback
echo " - autorisation du loopback..."
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo " [fait]"
# Autorisation HTTP
echo " - autorisation HTTP..."
iptables -t filter -d 192.168.0.1 -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 80 -j ACCEPT
echo " [fait]"
# Autorisation HTTPS
echo " - autorisation HTTPS..."
iptables -t filter -d 192.168.0.1 -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -d 192.168.0.1 -A INPUT -p tcp --dport 8443 -j ACCEPT
echo " [fait]"
# Autorisation SSH
echo " - autorisation SSH..."
iptables -t filter -d 192.168.0.1 -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 22 -j ACCEPT
echo " [fait]"
# Autorisation DNS
echo " - autorisation DNS..."
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -s 192.168.0.1 -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -d 192.168.0.1 -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -d 192.168.0.1 -A INPUT -p udp --dport 53 -j ACCEPT
echo " [fait]"

# Ouverture des ports DomU:
echo "ouverture des ports DomU..."
# Autorisation HTTP
echo " - autorisation HTTP..."
iptables -t filter -d 10.10.10.1 -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -t filter -s 10.10.10.1 -A OUTPUT -p tcp --dport 80 -j ACCEPT
echo " [fait]"
# Autorisation HTTPS
echo " - autorisation HTTPS..."
iptables -t filter -d 10.10.10.1 -A INPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -s 10.10.10.1 -A OUTPUT -p tcp --dport 443 -j ACCEPT
iptables -t filter -d 10.10.10.1 -A INPUT -p tcp --dport 8443 -j ACCEPT
echo " [fait]"
# Autorisation DNS
echo " - autorisation DNS..."
iptables -t filter -s 10.10.10.1 -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -s 10.10.10.1 -A OUTPUT -p udp --dport 53 -j ACCEPT
iptables -t filter -d 10.10.10.1 -A INPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -d 10.10.10.1 -A INPUT -p udp --dport 53 -j ACCEPT
echo " [fait]"

sysctl -p
iptables -P FORWARD ACCEPT
iptables -t nat -A POSTROUTING -s 10.10.10.1 -j MASQUERADE
iptables -A PREROUTING -t nat -p tcp --dport 80 -j DNAT --to 10.10.10.1:80
iptables -A PREROUTING -t nat -p tcp --dport 53 -j DNAT --to 10.10.10.1:53
iptables -A PREROUTING -t nat -p udp --dport 53 -j DNAT --to 10.10.10.1:53

Résultat: le serveur HTTP du DomU est accessible, mais le DomU n'arrive toujours pas à se connecter à internet (comme pour apt-get update)

Deux questions: comment accorder l'accès du DomU à internet ? et laisser la chaîne FORWARD avec la politique ACCEPT n'est-il pas un peu risque?

Merci!
0
cocoche95 Messages postés 1134 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 27 novembre 2019 543
13 juil. 2014 à 00:01
Ok, avant de vous faire partir dans une mauvaise direction, je préfère checker une chose de plus.

Quelle est la configuration du réseau entre votre dom0 et les domU ? Vous utilisez une config particulière ou la méthode standard du bridge ?
0
duff4 Messages postés 34 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 18 juillet 2014
13 juil. 2014 à 03:59
J'utilise Xen en mode nat:
/etc/xen/xend-config.sxp
(network-script network-nat)
(vif-script vif-nat)
[...]
netmask = 255.255.255.0
broadcast = 10.10.10.255
[...]

lors de la création des DomU je précise l'adresse ip comme 10.10.10.1.

Je cherche à filtrer les connexions aux DomU avec l'iptables du Dom0
0
duff4 Messages postés 34 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 18 juillet 2014
Modifié par duff4 le 13/07/2014 à 13:48
!
! eth0
! 192.168.0.1
-------------
!Serveur Xen!
!__Dom0___!
-------------
!
!
! NAT
! 10.10.10.1
-------------
!Domaine_1!
!__DomU__!
-------------

Mon but est de filtrer les échanges des Domaines via l'iptables du Dom0:
Permettre à tous les DomU de se connecter à internet (port 80 tcp) et au DNS (53 tcp/udp), mais que les ordinateurs à l'extérieur ne puissent accéder à ces DomU que par des ports spécifiques par exemple le port 80 pour le Domaine_1
0
cocoche95 Messages postés 1134 Date d'inscription jeudi 29 juillet 2004 Statut Contributeur Dernière intervention 27 novembre 2019 543
Modifié par cocoche95 le 13/07/2014 à 13:48
Ok, je suppose que l'interface de sortie de votre dom0 est "eth0".

Dans ce cas il vous faut modifier votre script en remplaçant la ligne "iptables -t nat -A POSTROUTING -s 10.10.10.1 -j MASQUERADE" par "iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE".

Normalement, vous n'avez pas à faire tout ça. C'est fait automatiquement par les scripts de Xen. Je viens de réinstaller un Xen et de tester la création d'une machine avec du NAT. Cela a marché sans que je n'ai eu besoin de faire du tunning de config.
0
duff4 Messages postés 34 Date d'inscription samedi 12 juillet 2014 Statut Membre Dernière intervention 18 juillet 2014
18 juil. 2014 à 21:18
Merci de ta contribution...
J'ai mis beaucoup de temps, je mes suis fait aider... mais finalement j'ai réussi à pondre quelquechose qui marchait. Je le poste ici si jamais celà peut aider quelqu'un qui avait un bloquage comme moi:

#! /bin/bash

# Affichage du message d'accueil:
echo -e "nn---     SCRIPT DE PARAMÊTRAGE DU FIREWALL   ---n"

# reinitialisation du firewall...
echo "reinitialisation du firewall"
sleep 1
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
echo "                     [fait]"
# Bloquage des ports
echo "bloquage des ports..."
iptables -t filter -P INPUT DROP
iptables -t filter -P OUTPUT DROP
echo "                     [fait]"


# Configuration iptables pour le DomO:
echo "Configuration iptables pour le DomO"
# autorisation des connexions établies
echo "  - aurositation des connexions établies..."
iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
echo "                     [fait]"
# Autorisation du loopback
echo "  - autorisation du loopback..."
iptables -t filter -A INPUT -i lo -j ACCEPT
iptables -t filter -A OUTPUT -o lo -j ACCEPT
echo "                     [fait]"
# Ouverture des ports...
echo "  - ouverture des ports vers l'exterieur..."
echo "   -> HTTP (OUT)"
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 80 -j ACCEPT
echo "   -> HTTPS (OUT)"
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 443 -j ACCEPT
echo "   -> SSH (IN/OUT)"
iptables -t filter -d 192.168.0.1 -A INPUT -p tcp --dport 22 -j ACCEPT
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 22 -j ACCEPT
echo "   -> DNS (OUT)"
iptables -t filter -s 192.168.0.1 -A OUTPUT -p tcp --dport 53 -j ACCEPT
iptables -t filter -s 192.168.0.1 -A OUTPUT -p udp --dport 53 -j ACCEPT
echo "                     [fait]"

# Configuration iptables pour les DomU:
echo "Configuration iptables pour les DomU..."
# autorisation du forwarding
echo "  - aurositation du forwarding..."
iptables -P FORWARD ACCEPT
echo "                     [fait]"
# autorisation de l'accès des DomU vers l'exterieur
echo "  - aurositation de l'accèes vers l'exterieur des DomU..."
iptables -t nat -A POSTROUTING -s 10.10.10.1/24 -o eth0 -j MASQUERADE
echo "                     [fait]"
# autorisation de la laison de Dom0 vers les DomU
echo "  - autorisation de laison du Dom0 vers les DomU..."
iptables -t filter -A OUTPUT -s 10.10.10.128/10.10.10.142 -j ACCEPT
echo "                     [fait]"
# ourevture des ports vers l'exterieur
echo "  - ouverture des ports vers l'exterieur..."
echo "   -> HTTP (OUT)"
iptables -A OUTPUT -o 192.168.0.1 -d 10.10.10.1/24 -p tcp --dport 80 -j ACCEPT
echo "   -> DNS (OUT)"
iptables -A OUTPUT -o 192.168.0.1 -d 10.10.10.1/24 -p tcp --dport 53 -j ACCEPT
iptables -A OUTPUT -o 192.168.0.1 -d 10.10.10.1/24 -p udp --dport 53 -j ACCEPT
echo "                     [fait]"
# redirection des ports du Dom0 vers les services DomU
echo "  - redirection des ports du Dom0 vers les services DomU..."
echo "   -> port 80 vers VM apache"
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 80 -j DNAT --to-destination 10.10.10.1:80
echo "   -> port 23 vers VM apache"
iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 23 -j DNAT --to-destination 10.10.10.1:22
echo "                     [fait]"


Have fun!
0