Gunther: Apache2 Directory Allow from <IP range>

Hallo Selfgemeinde!

Ich möchte gerne den Zugang zu einem bestimmten Verzeichnis auf meinem Apache2 auf *zwei* unterschiedliche IP ranges einschränken.

Die beiden Bereiche lauten:
186.57.156.0 - 186.57.175.255
187.66.99.0  - 187.66.255.255

Das entsprechende Kapitel in der Apache Doku http://httpd.apache.org/docs/2.2/mod/mod_authz_host.html hat mir nicht wirklich weitergeholfen, denn eine Einschränkung auf
186.57 und 187.66 ist mir nicht präzise genug. Ich hätte es halt gerne noch weiter eingeschränkt.

Frage:
Ist das machbar und wenn ja, wie?

Gruß Gunther

  1. Ist das machbar und wenn ja, wie?

    Ich glaube mit einer Bitmaskenangabe

    186.57.156.0 - 186.57.175.255

    wird abgedeckt durch
    186.57.156/10
    186.57.160/12

    mfg Beat

    --
    ><o(((°>           ><o(((°>
       <°)))o><                     ><o(((°>o
    Der Valigator leibt diese Fische
    1. Hi beat!

      »» Ist das machbar und wenn ja, wie?

      Ich glaube mit einer Bitmaskenangabe
      »» 186.57.156.0 - 186.57.175.255
      wird abgedeckt durch
      186.57.156/10
      186.57.160/12

      Vielen Dank für deine Antwort.
      Allerdings habe ich die entsprechenden Beispiele schon in der Apache Doku nicht verstanden. Google hilft mir auch nicht wirklich weiter.

      Könntest du mir das netterweise auch noch kurz Erklären (das Funktionsprinzip) oder hast du einen entsprechenden Link für mich parat, wo ich das mal nachlesen kann?

      Gruß Gunther

      1. Könntest du mir das netterweise auch noch kurz Erklären (das Funktionsprinzip) oder hast du einen entsprechenden Link für mich parat, wo ich das mal nachlesen kann?

        0.0.0.0/0 = 0.0.0.0
        0.0.0.0/1 = 0.0.0.0 + 0.0.0.1
        0.0.0.0/2 = 0.0.0.0 + 0.0.0.1 + 0.0.0.2 + 0.0.0.3

        0.0.0.0/7 = 0.0.0.0 + ... + 0.0.0.127
        0.0.0.128/7 = 0.0.0.128 + ... + 0.0.0.255

        Es handelt sich um einen binären Aufbau.
        Als Basis der Bitmaske sollte der Klarheit wegen ein binärer Wert stehen
        0.0.0.129/7 ist aber (theoretisch) gleichwertig mit 0.0.0.128/7

        mfg Beat

        --
        ><o(((°>           ><o(((°>
           <°)))o><                     ><o(((°>o
        Der Valigator leibt diese Fische
        1. Moin!

          »» Könntest du mir das netterweise auch noch kurz Erklären (das Funktionsprinzip) oder hast du einen entsprechenden Link für mich parat, wo ich das mal nachlesen kann?

          0.0.0.0/0 = 0.0.0.0
          0.0.0.0/1 = 0.0.0.0 + 0.0.0.1
          0.0.0.0/2 = 0.0.0.0 + 0.0.0.1 + 0.0.0.2 + 0.0.0.3

          0.0.0.0/7 = 0.0.0.0 + ... + 0.0.0.127
          0.0.0.128/7 = 0.0.0.128 + ... + 0.0.0.255

          Es handelt sich um einen binären Aufbau.
          Als Basis der Bitmaske sollte der Klarheit wegen ein binärer Wert stehen
          0.0.0.129/7 ist aber (theoretisch) gleichwertig mit 0.0.0.128/7

          Hä? Nö!

          0.0.0.0/1 ist nicht 0.0.0.0 und 0.0.0.1, sondern 0.0.0.0 bis 128.255.255.255

          Die Bitmaske fängt vorn bei der IP an, nicht hinten.

          Abgesehen davon ist 0.0.0.0 sowieso eher ungünstig als IP-Adresse in Beispielen, weil sie ebenso häufig als 0.0.0.0/0 für das Default-Gateway bzw. "das ganze Internet" steht.

          Insofern ist dein gesamter Bitmasken-Aufbau falsch, auch wenn das Prinzip - nur umgekehrt eben - in etwa hinkommt.

          Die Bitmaske übersetzt sich 1:1 in eine entsprechende Netzmaske.

          Bitmaske /8 ist Netzmaske 255.0.0.0; die /16 ist 255.255.0.0, und die /17 wäre 255.255.128.0. Die Zahl der Bitmaske gibt die Anzahl der 1-Bits in der Netzmaske an, von vorne beginnend. Aus IP und Netzmaske errechnet sich dann die IP des Netzwerkes, in dem sich die jeweilige IP befindet. Umgekehrt kann man durch Angabe von Netz-IP und Maske eben bestimmen, welche Sammlung von IP-Adressen man meint.

          - Sven Rautenberg

          1. Moin zusammen!

            0.0.0.0/1 ist nicht 0.0.0.0 und 0.0.0.1, sondern 0.0.0.0 bis 128.255.255.255

            Die Bitmaske fängt vorn bei der IP an, nicht hinten.

            Abgesehen davon ist 0.0.0.0 sowieso eher ungünstig als IP-Adresse in Beispielen, weil sie ebenso häufig als 0.0.0.0/0 für das Default-Gateway bzw. "das ganze Internet" steht.

            Insofern ist dein gesamter Bitmasken-Aufbau falsch, auch wenn das Prinzip - nur umgekehrt eben - in etwa hinkommt.

            Die Bitmaske übersetzt sich 1:1 in eine entsprechende Netzmaske.

            Bitmaske /8 ist Netzmaske 255.0.0.0; die /16 ist 255.255.0.0, und die /17 wäre 255.255.128.0. Die Zahl der Bitmaske gibt die Anzahl der 1-Bits in der Netzmaske an, von vorne beginnend. Aus IP und Netzmaske errechnet sich dann die IP des Netzwerkes, in dem sich die jeweilige IP befindet. Umgekehrt kann man durch Angabe von Netz-IP und Maske eben bestimmen, welche Sammlung von IP-Adressen man meint.

            Vielen Dank euch beiden.
            Jetzt bin ich zwar wieder etwas schlauer, auch wenn ich (immer) noch nicht ganz verstanden habe, wie ich dann nun meinen IP-Bereich genau angeben kann (da "Die Bitmaske fängt vorn bei der IP an ...").

            Ist aber momentan für die unmittelbare Lösung meines Vorhabens auch nicht (mehr) wichtig, da mir zwischenzeitlich auch mal aufgefallen ist, dass es über den (partiellen) Hostnamen deutlich einfacher geht.

            Nichtsdestotrotz werde ich mich noch weiter mit dem Thema 'Bitmaske' beschäftigen (wobei da auch wieder ein ganzer Rattenschwanz hintendranhängt).

            Also nochmals besten Dank!

            Gruß Gunther

            PS: Deutlich "bequemer" (einfacher) wäre es natürlich mit einer festen IP. Mein ISP möchte dafür allerdings EUR 4,90 im Monat haben. Ist das im Vergleich zu anderen Anbietern preiswert/ teuer? Und da ich sonst eigentlich keinen anderen Anwendungszweck (lokaler Mail-Server, etc.) habe, gehe ich davon aus, dass ich mir den "Luxus" sparen kann, oder sehe ich das falsch?

            1. Moin!

              Ist aber momentan für die unmittelbare Lösung meines Vorhabens auch nicht (mehr) wichtig, da mir zwischenzeitlich auch mal aufgefallen ist, dass es über den (partiellen) Hostnamen deutlich einfacher geht.

              Das ist aber aus Performance- und Sicherheitsgründen keine wirklich schöne Lösung.

              Performance: Jeder Request erfordert einen Reverse-DNS-Lookup, damit der der IP zugeordnete Domainname mit dem Muster verglichen werden kann - das will man eigentlich nie. Außerdem:

              Security: Die Rückwärtsauflösung der IP in einen Namen übernehmen Systeme, denen du nicht vertrauen kannst. Eine IP hat jeder - und Gewalt über den Nameserver, der diese IP rückwärts in den Domainnamen auflöst, hat ein Angreifer im Zweifel auch, das ist gar keine Kunst, sondern elementarer Bestandteil jedes etwas größeren Hostings eines Servers mit eigener IP. Ein Angreifer kann dir also mit Leichtigkeit den gewünschten Domainnamen vorspielen.

              - Sven Rautenberg

              1. Moin Sven!

                »» Ist aber momentan für die unmittelbare Lösung meines Vorhabens auch nicht (mehr) wichtig, da mir zwischenzeitlich auch mal aufgefallen ist, dass es über den (partiellen) Hostnamen deutlich einfacher geht.

                Das ist aber aus Performance- und Sicherheitsgründen keine wirklich schöne Lösung.

                Stimmt! Ist mir nach dem Lesen deines Beitrags jetzt auch klar geworden - danke!

                Performance: Jeder Request erfordert einen Reverse-DNS-Lookup, damit der der IP zugeordnete Domainname mit dem Muster verglichen werden kann - das will man eigentlich nie. Außerdem:

                OK, die Performance-Einbuße ließe sich in dem Fall noch verschmerzen (es geht mir ja darum, dass ich alleine auf diese Verzeichnisse zugreifen möchte, und deshalb überlege, wie ich die "Angriffsfläche" nach außen hin so klein wie möglich machen kann).

                Security: Die Rückwärtsauflösung der IP in einen Namen übernehmen Systeme, denen du nicht vertrauen kannst. Eine IP hat jeder - und Gewalt über den Nameserver, der diese IP rückwärts in den Domainnamen auflöst, hat ein Angreifer im Zweifel auch, das ist gar keine Kunst, sondern elementarer Bestandteil jedes etwas größeren Hostings eines Servers mit eigener IP. Ein Angreifer kann dir also mit Leichtigkeit den gewünschten Domainnamen vorspielen.

                Ja, verstanden. Einziges "Hindernis" wäre dann nur noch, dass er wissen müsste, wie denn der "richtige" Hostname lautet (was aber im Zweifelsfall vermutlich auch nicht sehr schwierig sein dürfte herauszufinden).

                Also muss ich doch direkt mit der Bitmasken-Geschichte auseinandersetzen, oder meinem Provider monatlich EUR 5,- für eine feste IP-Adresse bezahlen. ;-)

                @hotti: Danke auch dir für die sehr verständliche & ausführliche Erklärung. Ich glaube, dass ich so langsam anhand aller Erklärungen und Google, anfange die Sache zu kapieren!

                Gruß Gunther

          2. Hä? Nö!

            0.0.0.0/1 ist nicht 0.0.0.0 und 0.0.0.1, sondern 0.0.0.0 bis 128.255.255.255

            Die Bitmaske fängt vorn bei der IP an, nicht hinten.

            Richtig.
            (Wusste ich praktisch auch schon mal besser)

            /x bezeichnet die invariablen Bits einer IP von vorne/links gelesen
            Beispiel
            127.0.1.7/32 = 01111111.00000000.00000001.00000111
            127.0.1.7/31 = 01111111.00000000.00000001.0000011n
            127.0.1.7/30 = 01111111.00000000.00000001.000001nn
            127.0.1.7/29 = 01111111.00000000.00000001.00000nnn
            ..
            127.0.1.7/3  = 011nnnnnn.nnnnnnnn.nnnnnnnn.nnnnnnnn
            127.0.1.7/2  = 01nnnnnnn.nnnnnnnn.nnnnnnnn.nnnnnnnn
            127.0.1.7/1  = 0nnnnnnnn.nnnnnnnn.nnnnnnnn.nnnnnnnn

            mfg Beat

            --
            ><o(((°>           ><o(((°>
               <°)))o><                     ><o(((°>o
            Der Valigator leibt diese Fische
            1. hi Beat;

              Deine Darstellung

              127.0.1.7/29 = 01111111.00000000.00000001.00000nnn

              verwirrt etwas. Ich versuchs mal verständlicher, also:

              /29 heißt: Maskenlänge 29 Bit
              Von links beginnend, wie Sven geschrieben hat, und sieht so aus
              11111111.11111111.11111111.11111000

              Die IP-Adresse, klar, die kann auch binär geschrieben sein:
              01111111.00000000.00000001.00000111

              Und jetzt kommen wir mal zum Begriff "Maske"

              01111111.00000000.00000001.00000111   IP
               11111111.11111111.11111111.11111000   Maske
              -------------------------------------- bitweise AND verknüpft
               01111111.00000000.00000001.00000000

              Wir erhalten damit die Netzadresse zu: 127.0.1.0

              Aufgrund der Maske haben wir 3 Bit für den Hostanteil und schreiben das mal auf:

              127.0.1.0 Netzadrese
              127.0.1.1 host
              127.0.1.2 host
              127.0.1.3 host
              127.0.1.4 host
              127.0.1.5 host
              127.0.1.6 host
              127.0.1.7 Broadcastadresse

              Merke: Deine Schreibweise ist nicht korrekt, weil, Du hast die Broadcastadresse notiert, richtig ist:

              127.0.1.0/29
              Netzadresse/Maskenlänge

              für diese Art der Schreibweise. Das nächsthöhere Netz mit 6 möglichen Hosts wäre:
              127.0.1.8/29
              und hat die Broadcastadresse
              127.0.1.15

              So wird geteilt ;-)

              Hotte

              --
              Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
  2. Hallo ihr netten Helfer!

    So, dank eurer freundlichen Hilfe & Unterstützung habe ich es
    a) verstanden (zumindest weitestgehend) und
    b) für meinen Anwendungsfall jetzt auch hinbekommen.

    Vielen Dank nochmal!

    Eine letzte Frage hätte ich dazu noch:
    Sehe ich das richtig, dass ich aber bspw. auf diese Art & Weise in dem Fall von z.B.
    xxx.xxx.168.000 bis
    xxx.xxx.255.255

    wenn ich den als
    xxx.xxx.168.0/17
    angebe, den IP-Bereich aber im Prinzip nur auf
    xxx.xxx.128.000 bis
    xxx.xxx.255.255
    einschränken kann?

    Gruß Gunther

    1. Moin!

      wenn ich den als
      xxx.xxx.168.0/17
      angebe, den IP-Bereich aber im Prinzip nur auf
      xxx.xxx.128.000 bis
      xxx.xxx.255.255
      einschränken kann?

      Ja, die Bitmasken lassen sich nicht auf beliebige Bereiche anwenden. Wenn der gewünschte Bereich mit einer einzigen Bitmaske nicht angebbar ist, muss man mehrere Bereiche angeben, mit entsprechend kleineren Bitmasken.

      Es gibt ein kleines Linux-Kommandozeilentool namens "ipcalc", welches diverse Bitmaskenberechnungen und -ausgaben erledigt. Für den hier fraglichen Bereich sagt es:

      ipcalc 127.0.168.0 - 127.0.255.255

      deaggregate 127.0.168.0 - 127.0.255.255
      127.0.168.0/21
      127.0.176.0/20
      127.0.192.0/18

      Und schon hast du da deine drei Maskenbereiche, die du angeben musst, um den Gesamtbereich abzudecken ohne Überlappung.

      - Sven Rautenberg

      1. Moin!

        ipcalc 127.0.168.0 - 127.0.255.255

        deaggregate 127.0.168.0 - 127.0.255.255
        127.0.168.0/21
        127.0.176.0/20
        127.0.192.0/18

        Und schon hast du da deine drei Maskenbereiche, die du angeben musst, um den Gesamtbereich abzudecken ohne Überlappung.

        Vielen Dank Sven - wieder was gelernt und auch richtig verstanden inzwischen.
        Nett auch, dass du mir gleich die passende Aufteilung gepostet hast.

        Gruß & Dank
        Gunther