Forum Linux.général Bacula et iptables

Posté par .
Tags : aucun
0
27
nov.
2010
Bonjour,
J'ai un petit problème avec iptables.
Je souhaite faire une chose simple (en théorie) avec bacula. Je cherche à rediriger tout ce qui arrive de l'extérieur du LAN
vers la machine 192.168.1.3, le tout en passant par ma machine qui me sert de routeur et donc qui a 192.168.1.2 sur eth0 et une ip publique sur eth1
Je cherche depuis quelque temps déjà sur le net quelques solutions mais j'avoue ne pas être un connaisseur d'iptables.
Voilà un petit schéma de l'install actuelle :


+---------------------+ __________ +---------------------+
| client | / \ | routeur |
| 88.191.10.10 - eth0 |---| internet |---| 78.230.10.10 - eth1 |
+---------------------+ \__________/ /-| 192.168.1.2 - eth0 |
| +---------------------+
|
| +--------------------+
\-| bacula |
| 192.168.1.3 - eth0 |
+--------------------+

Il n'y a pas de communication dans le sene "bacula" -> "client" mais le retour ne se fait pas.
Pour le moment à part un "iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE" c'est tout ce qu'il y a comme règle de définie.

Un grand merci d'avance pour votre aide :-)
Stéphane
  • # Michel Chevalet inside: Comment ça marche ?

    Posté par (page perso) . Évalué à 1.

    Il serait interressant de connaître les flux utilisés par bacula ( sens des connexions, ... )

    Cela ne fonctionne pas malgrès que tout est natté en sortie...

    Système - Réseau - Sécurité Open Source

  • # NAT dans les deux sens

    Posté par . Évalué à 2.

    1°) reperer les ports que tu veux envoyé quand ca vient de l'exterieur et que ca arrive sur
    78.230.10.10: XXXX

    pour faire un prerouting vers 192.168.1.3, port XXXX

    2°) faire un POSTROUTING MASQUERADE de ce qui vient de ce client vers eth0
    pour faire croire à 192.168.1.3 que la demande vient de ton routeur (et sera donc renvoyé à ton routeur

    3°) evidemment tu as deja un postrouting masquerade pour faire du NAT et partager ta connexion entre tes deux machines (192.168.1.2 et 192.168.1.3)

    il faudrait aussi que tu recherches sur internet il y a une image qui me sert de base pour mes reflexions autour d'iptables.

    c'est un graphe qui indique les tables (INPUT/OUTPUT/FORWARD, PREROUTING/POSTROUTING...) en fonction d'ou vient le paquet reseau, et ou il doit aller

    par ex :
    http://www.csie.ntu.edu.tw/~b92035/cnl/hw1/Iptables.gif

    http://www.rigacci.org/wiki/lib/exe/detail.php/doc/appunti/l(...)
    • [^] # Re: NAT dans les deux sens

      Posté par (page perso) . Évalué à 2.

      Je trouve celui-ci très pratique:
      http://jengelh.medozas.de/images/nf-packet-flow.png
      • [^] # Re: NAT dans les deux sens

        Posté par . Évalué à 2.

        mais on (enfin je) ne comprend pas bien par ou passe le paquet reseau s'il doit atterrir sur la machine qui gere iptables
    • [^] # Re: NAT dans les deux sens

      Posté par . Évalué à 1.

      Le problème c'est surtout le retour des infos en direction du port 9103 qui se trouvent bloquées par le routeur.
      Les schémas données en exemple sont pas mal du tout (je les ai mis de côté). Me reste à voir l'écriture de la/les règles en question et c'est là aussi que ça bloque.
      • [^] # Re: NAT dans les deux sens

        Posté par . Évalué à 2.

        iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADE
        avec juste cette ligne tout ce qui sort sur eth1 est MASQUE (c'est à dire mis à emetteur=78.230.10.10
        ce qui te permet de partager ta connexion internet entre tes 2 machines (192.168.1.2 et 192.168.1.3)

        si ce n'est pas le cas, alors tu as deja un probleme à ce niveau là, à regler avant de chercher ailleurs.

        Le problème c'est surtout le retour des infos en direction du port 9103 qui se trouvent bloquées par le routeur.

        le retour des infos, ce serait donc dans le sens bacula -> client
        en direction du port 9103, le client est en ecoute de ce que doit lui envoyer bacula ?

        je ne connais pas bacula, mais dans un systeme avec un client et un serveur, en general c'est le serveur qui ecoute sur un port donné (ici 9103)
        et le client qui vient se connecter dessus.

        donc si bacula fonctionne comme tous les autres services reseaux
        il te faudrait deja que ton routeur fasse un renvoi de ce qui arrive sur 78.230.10.10:9103
        vers 192.168.1.3:9103
        • [^] # Re: NAT dans les deux sens

          Posté par . Évalué à 1.

          Concernant le partage de la connexion, il n'y a aucun problème.
          donc :
          dans un premier temps bacula => client, et là c'est ok pour le moment
          mais c'est la réponse du client qui ne passe pas le routeur client => bacula.
          Voici un exemple du message d'erreur que je reçois :
          Warning: bnet.c:853 Could not connect to Storage daemon on 78.230.10.100:9103. ERR=Connexion refusée


          donc si bacula fonctionne comme tous les autres services reseaux
          il te faudrait deja que ton routeur fasse un renvoi de ce qui arrive sur 78.230.10.10:9103
          vers 192.168.1.3:9103

          C'est exactement ce que je cherche à faire (et à écrire)
          • [^] # Re: NAT dans les deux sens

            Posté par (page perso) . Évalué à 1.

            La documentation et des exemples:

            http://www.netfilter.org/documentation/index.html#documentat(...)


            cf: nat de destination

            Système - Réseau - Sécurité Open Source

          • [^] # Re: NAT dans les deux sens

            Posté par (page perso) . Évalué à 1.

            C'est simple:

            si c'est du tcp:

            iptables -t nat -A PREROUTING -p tcp -d 78.230.10.10 --dport 9103 -j DNAT --to-destination 192.168.1.3:9103


            si c'est de l'udp:

            iptables -t nat -A PREROUTING -p udp -d 78.230.10.10 --dport 9103 -j DNAT --to-destination 192.168.1.3:9103

            Voilà en espérant que ça puisse t'aider, tu peut même faire de la redirection de port avec cette règle.
            • [^] # Re: NAT dans les deux sens

              Posté par . Évalué à 1.

              Je viens de tester avec la règle que tu viens de me donner (celle en TCP car la tourne comme ça) et rien à faire, ça bloque toujours.
              Voilà ce qui est actuellement défini :
              serveur:/# iptables -L -v -t nat
              Chain PREROUTING (policy ACCEPT 730K packets, 51M bytes)
              pkts bytes target prot opt in out source destination
              4 240 DNAT tcp -- any any anywhere 78.230.10.10 tcp dpt:bacula-sd to:192.168.1.3:9103

              Chain POSTROUTING (policy ACCEPT 11472 packets, 1481K bytes)
              pkts bytes target prot opt in out source destination
              149 11809 MASQUERADE all -- any eth1 anywhere anywhere

              Chain OUTPUT (policy ACCEPT 33638 packets, 3389K bytes)
              pkts bytes target prot opt in out source destination


              serveur:/# iptables -L -v
              Chain INPUT (policy ACCEPT 29M packets, 13G bytes)
              pkts bytes target prot opt in out source destination

              Chain FORWARD (policy ACCEPT 6619K packets, 3757M bytes)
              pkts bytes target prot opt in out source destination

              Chain OUTPUT (policy ACCEPT 22M packets, 21G bytes)
              pkts bytes target prot opt in out source destination
              • [^] # Re: NAT dans les deux sens

                Posté par (page perso) . Évalué à 1.

                Il faudrait s'assurer que les paquets atteignent la patte externe du routeur et sortent par la patte interne.
                Les outils tcpdump/wireshark sont très pratiques. Activer les log des paquets ( target -j LOG )
                permettent de s'assurer du cheminement du paquet traversant les règles.

                Système - Réseau - Sécurité Open Source

                • [^] # Re: NAT dans les deux sens

                  Posté par . Évalué à 1.

                  Après quelques recherche je viens de tester ces règles :
                  iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 9103 -j DNAT --to 192.168.1.3:9103
                  iptables --table nat --append PREROUTING --destination 78.230.10.10 --protocol tcp --destination-port 9103 --jump DNAT --to-destination 192.168.1.3
                  iptables --table nat --append POSTROUTING --destination 192.168.1.3 --protocol tcp --destination-port 9103 --jump SNAT --to-source 78.230.10.10

                  et ça fonctionne nickel
                  Je vais quand même potasser la doc :-)
                  • [^] # Re: NAT dans les deux sens

                    Posté par . Évalué à 2.

                    # REGLE 1 : tu prend ce qui arrive sur le port 9103 sur eth1 pour le renvoyer vers 192.1681.3:9103
                    iptables -t nat -A PREROUTING -i eth1 -p tcp -m tcp --dport 9103 -j DNAT --to 192.168.1.3:9103

                    #REGLE 2 : tu fais exactement la meme chose que la premiere regle mais en prenant ce qui arrive sur l'adresse 78.230.10.10 (au lieu de te baser sur l'interface eth1)
                    iptables --table nat --append PREROUTING --destination 78.230.10.10 --protocol tcp --destination-port 9103 --jump DNAT --to-destination 192.168.1.3

                    # REGLE 3 : tu change la source de la demande par l'adresse externe de ton routeur
                    iptables --table nat --append POSTROUTING --destination 192.168.1.3 --protocol tcp --destination-port 9103 --jump SNAT --to-source 78.230.10.10



                    perso, je penses que les regles 1 et 2 font la meme chose

                    ensuite tu pourrais utiliser la meme "ecriture" pour mieux comprendre ce que tu fait
                    -t nat c'est pareil que --table nat
                    -A PREROUTING <==> --append PREROUTING
                    -j DNAT <==> --jump DNAT
                    -j SNAT <==> --jump SNAT
                    • [^] # Re: NAT dans les deux sens

                      Posté par . Évalué à 1.

                      Pour la manière d'écrire les règles, c'est vrais, autant faire simple :-)
                      • [^] # Re: NAT dans les deux sens

                        Posté par . Évalué à 2.

                        simple, mais surtout lisbile par rapport au reste.

                        quand tu dois jongler entre deux styles d'ecriture, c'est plus difficile à debugguer

Suivre le flux des commentaires

Note : les commentaires appartiennent à ceux qui les ont postés. Nous n'en sommes pas responsables.