Mario: PHP, MySQL und IPv6 Handling

Hallo an alle.

Ich möchte eine bestehende Webapplikation IPv6-"ready" machen.

Im Moment werden alle IPv4 als Long in einer MySQL DB gespeichert.

Für IPv6 gibt es jedoch keine native 2long Funktion. Ich habe im Web zwar eine Alternative gefunden, welche mir jedoch nicht zusagt.

Daher müsste ich die IPv6 entweder als Varchar oder als Varbinary (wenn ich inet_pton nutze) speichern. Ein Vergleich zwischen mehreren IPs oder eine Rangesuche wären auch mit diesen beiden Varianten möglich, jedoch nehmen diese Felder mehr Speicher ein und die Operationen gehen langsamer vonstatten. Aber das kann ich noch verkraften.
Liegt die IPv6 in der Netznotation vor, müsste ich aber eine Range speichern, wenn ich das richtig verstanden habe. Wobei ich mir nicht sicher bin, ob IPv6 Addressen in Netznotation überhaupt im Internet vertreten sind.

Ich bin mir also absolut nicht schlüssig wie ich mit der IPv6 Problematik umgehen soll.

Hat hier schon jemand Erfahrung damit gesammelt und würde mir eine Richtung weisen, wie ich das am besten angehe.

Danke und Grüße
Mario

  1. Moin!

    Im Moment werden alle IPv4 als Long in einer MySQL DB gespeichert.

    Für IPv6 gibt es jedoch keine native 2long Funktion. Ich habe im Web zwar eine Alternative gefunden, welche mir jedoch nicht zusagt.

    Daher müsste ich die IPv6 entweder als Varchar oder als Varbinary (wenn ich inet_pton nutze) speichern. Ein Vergleich zwischen mehreren IPs oder eine Rangesuche wären auch mit diesen beiden Varianten möglich, jedoch nehmen diese Felder mehr Speicher ein und die Operationen gehen langsamer vonstatten. Aber das kann ich noch verkraften.
    Liegt die IPv6 in der Netznotation vor, müsste ich aber eine Range speichern, wenn ich das richtig verstanden habe. Wobei ich mir nicht sicher bin, ob IPv6 Addressen in Netznotation überhaupt im Internet vertreten sind.

    Ich bin mir also absolut nicht schlüssig wie ich mit der IPv6 Problematik umgehen soll.

    Im Prinzip gibts nur zwei Wege:

    VARCHAR, und die IPv6 dort als Text speichern. Ggf. inet_ntop(inet_pton()) als Normalisierung anwenden.

    Oder BINARY (ggf. VARBINARY), und dort das Ergebnis von PHP's inet_pton() reinspeichern.

    Die Frage, die du für weitergehende Variationen beantworten solltest: IP speichern wofür? Nur so als Gedankenanregung: Jeder IPv6-Teilnehmer hat vermutlich ein ganzes /64-Netz zur Verfügung, also einen IP-Adressraum von 4 Milliarden Internets (in IPv4). Sein Netzwerkinterface wird dabei standardmäßig mehrere IP-Adressen gleichzeitig verwenden (siehe z.B. Privacy Extensions). Es ist daher nicht praktikabel, die herkömmlichen IP-Sperren-Mechanik weiterzuverwenden, weil bei IPv6 einfach massenhaft neue IP-Adressen ohne Aufwand zur Verfügung stehen. Wenn man die Privacy-Extensions entsprechend konfigurieren will, könnte man beispielsweise jede Minute eine neue IP benutzen (für neu aufgebaute Verbindungen), und weiterhin hereinkommende Datenpakete für die alten IPs noch eine gewisse Zeit lang akzeptieren.

    Die einfache Reaktion, jetzt also einfach /64-Netze zu sperren, ist auch keine sehr gute: Auch Anschlüsse mit nicht nur einem einzigen Nutzer, sondern auch große Subnetzwerke (Unternehmen) haben nur ein /64-Netz. Eine Sperre blockiert jetzt also nicht nur den einen bösen Nutzer, sondern gleich pauschal alle. :)

    - Sven Rautenberg

    1. Danke für die Info.

      Gibt es denn eine relativ zuverlässige "IP-Sperr-Mechanik" um böse Nutzer auszusperren? Hört sich jedenfalls nicht so an...

      1. Moin!

        Gibt es denn eine relativ zuverlässige "IP-Sperr-Mechanik" um böse Nutzer auszusperren? Hört sich jedenfalls nicht so an...

        Nein, die gab es aber schon zu IPv4-Zeiten nicht. Dynamische IP erneuern hilft den einfachen bösen Seelen schnell weiter, und komplexere böse Seelen nutzen Proxys und/oder Anonymisierungsnetzwerke wie Tor, sind effektiv also nicht blockierbar.

        - Sven Rautenberg

        1. Ja OK,

          das ist mir bewußt, aber darauf kommt nun mal nicht jeder. Deine erste Antwort hatte sich jedoch so gelesen, als wenn der minütliche IP Wechsel zum Default wird. Ich weiß ja nicht wie die Provider die zukünftige IP Vergabe handhaben werden. Ob es eine statische IP gibt, die bisher bekannte Zwangstrennung, oder eine feste Range.

          1. Moin!

            das ist mir bewußt, aber darauf kommt nun mal nicht jeder. Deine erste Antwort hatte sich jedoch so gelesen, als wenn der minütliche IP Wechsel zum Default wird. Ich weiß ja nicht wie die Provider die zukünftige IP Vergabe handhaben werden. Ob es eine statische IP gibt, die bisher bekannte Zwangstrennung, oder eine feste Range.

            Ich kenne die Planungen der Provider nicht, aber du darfst davon ausgehen, dass bis Ende dieses Jahres alle großen Anbieter dieses Thema zu den Kunden ausrollen werden.

            Die Datenschützer drehen zwar grad etwas sinnlos am Rad deswegen (bei IPv4 bringen dynamische IPs auch keine Anonymität), aber statische IPv6-Adressen dürften sich vermutlich als (sehr sinnvoller) Standard durchsetzen. Und als Range halt das /64-Netz, d.h. nur die ersten 64 Bits einer Adresse sind fix, die letzten 64 Bits sind vom User frei wählbar. Zwangstrennung wäre in diesem Zusammenhang irrelevant.

            Was die Privacy-Extensions angeht: Der Minutentakt wird sicherlich von keiner Mehrheit konfiguriert. Ich habe nicht mal positiv Kenntnis davon, ob das wirklich geht, ich würde es lediglich vermuten. Solange es aber genügend Geräte gibt, deren OS die Privaxy-Extensions nicht implementiert haben, sondern den sehr leicht trackbaren Ansatz des MAC-Adress-Recyclings nutzt, bringt das Sperren einer IP natürlich sehr effektiv etwas. MAC-Adressen sind zwar nicht global eindeutig, aber mutmaßlich eindeutig genug für eine Sperre.

            - Sven Rautenberg

            1. aber statische IPv6-Adressen dürften sich vermutlich als (sehr sinnvoller) Standard durchsetzen. Und als Range halt das /64-Netz, d.h. nur die ersten 64 Bits einer Adresse sind fix, die letzten 64 Bits sind vom User frei wählbar.

              Damit könnte man ja eine effektive Sperre einbauen, solange dies nur auf Privatpersonen zutrifft, und die Vergabe bei Firmennetzwerken anders gehandhabt wird.

              sondern den sehr leicht trackbaren Ansatz des MAC-Adress-Recyclings nutzt, bringt das Sperren einer IP natürlich sehr effektiv etwas. MAC-Adressen sind zwar nicht global eindeutig, aber mutmaßlich eindeutig genug für eine Sperre.

              Stimmt, und wenn das auch nichts bringen wird, greife ich auf Flashcookies zurück. Ist zwar auch nicht das Wahre, aber bei den meißten wird es helfen.

              1. Moin!

                aber statische IPv6-Adressen dürften sich vermutlich als (sehr sinnvoller) Standard durchsetzen. Und als Range halt das /64-Netz, d.h. nur die ersten 64 Bits einer Adresse sind fix, die letzten 64 Bits sind vom User frei wählbar.

                Damit könnte man ja eine effektive Sperre einbauen, solange dies nur auf Privatpersonen zutrifft, und die Vergabe bei Firmennetzwerken anders gehandhabt wird.

                Geh mal davon aus, dass das nicht der Fall ist. Der vergebene Adressbereich ist in jedem nur denkbaren Fall wirklich mehr als ausreichend groß.

                - Sven Rautenberg

      2. Hi!

        Gibt es denn eine relativ zuverlässige "IP-Sperr-Mechanik" um böse Nutzer auszusperren? Hört sich jedenfalls nicht so an...

        Schau dir an, wie die Adresszuweisung erfolgt / geplant ist, und mach dir Gedanken, wie man damit einzelne Personen/Rechner identifizieren soll. Vorgeschrieben ist mindestens die Zuweisung eines 64-Netzes, die Telekom beispielsweise wird 56er Netze an Privatkunden geben. Für größere Kunden sieht es sicher anders aus. Andere Provider werden das anders handhaben. Trotz allem Gejammer, dass man nun besser verfolgbar ist, bleibt immer noch die Restunsicherheit über die Größe des zugewiesenen Subnetzes. Vielleicht wird irgendwer irgendwann eine Datenbank erstellen, wo die Zuordnungsgrößen vermerkt sind. Das sind dann aber schon allein 4 Giga Provider-Netze. Die unterteilt der Provider in bis zu 4 Giga Kunden-Netze. Beides muss man multiplizieren ... und diese Datenmenge muss man nicht nur zusammentragen und speichern sondern auch durchsuchen, wenn man eine providerunabhängige Auskunft zur Subnetzgröße haben will.

        Lo!

        1. Schau dir an, wie die Adresszuweisung erfolgt / geplant ist, und mach dir Gedanken, wie man damit einzelne Personen/Rechner identifizieren soll.

          Naja, ich werde erst einmal abwarten und Tee trinken ;)
          Wenn es soweit ist, kann man die Sperren auch On-The-Fly einbauen.