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

Résolu
duff4 Messages postés 38 Statut Membre -  
duff4 Messages postés 38 Statut Membre -
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

4 réponses

  1. cocoche95 Messages postés 1187 Statut Contributeur 543
     
    Hello,

    Votre DomU étant local, vous devez utiliser la chaine OUTPUT et non FORWARD.
    0
    1. duff4 Messages postés 38 Statut Membre
       
      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
  2. cocoche95 Messages postés 1187 Statut Contributeur 543
     
    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
    1. duff4 Messages postés 38 Statut Membre
       
      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
    2. duff4 Messages postés 38 Statut Membre
       
      !
      ! 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
  3. cocoche95 Messages postés 1187 Statut Contributeur 543
     
    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
  4. duff4 Messages postés 38 Statut Membre
     
    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