Postgres-Verbindungszugriff auf IPv6-Adresse verweigert


9

Wenn Sie PostgreSQL 9.1 x64 unter Windows installiert haben, richten Sie eine Listenadresse ein. Bei der Verbindung mit pgAdmin wird jedoch die folgende Fehlermeldung angezeigt. Ich bin mir nicht sicher, warum PostgreSQL meine IPv6-Adresse und nicht meine reguläre IP-Adresse sieht:

Geben Sie hier die Bildbeschreibung ein

Um die Authentifizierung basierend auf der Fehlermeldung zum Laufen zu bringen, habe ich Folgendes aktualisiert pg_hba.conf:

host all all fe80::c5d2:XXXX:XXXX:3bc0/12 trust

Das hat funktioniert, ist aber hässlich und zu spezifisch. Ich habe Folgendes basierend auf PostgreSQL-Dokumenten versucht, aber keines hat funktioniert. Ich erhalte den gleichen Fehler "Zugriff verweigert":

local all all trust
host all all 0.0.0.0/12 trust

Ich habe diesen zum Laufen gebracht, der den gesamten IPv6-Adressraum abdeckt, aber wie kann ich einen IPv6-Bereich für weitere Einschränkungen angeben?

host  mydb  myuser  ::/0   trust

Fragen

  • Warum nimmt pgAdmin meine IPv6-Adresse und nicht meine normale IP auf?
  • Wie gebe ich in IPv6 einen Bereich an, ohne darauf zurückzugreifen ::/0?

Antworten:


17

Die IPv6-Adressen, die mit beginnen, fe80:sind verbindungslokale Adressen. Sie können nicht über verschiedene Subnetze oder das Internet geleitet werden. Sie dienen nur zur Kommunikation zwischen Maschinen, die mit demselben LAN verbunden sind. Der verbindungslokale Bereich ist definiert als fe80::/10. Wenn Sie allen in Ihrem lokalen LAN vertrauen, können Sie dies tun

host  all  all  fe80::/10  trust

Wenn Sie nicht jedem in Ihrem lokalen LAN vertrauen, möchten Sie wahrscheinlich den Schutz von Benutzername und Passwort verwenden:

host  all  all  fe80::/10  md5

Wenn md5Sie angeben, verwenden Sie weiterhin den Benutzernamen + Passwortschutz, aber das Passwort wird nicht mehr in einem lesbaren Format übertragen. Da Sie den Leuten in Ihrem lokalen LAN nicht vertrauen, sollten Sie wahrscheinlich auch kein snoopable Passwort über das Kabel senden.


fe80als das Präfix funktionierte, thx. Was ist die Bedeutung von /12, /24usw. auf der IPv4 - Adresse?
Raffian

Es ist die Anzahl der Bits, die in der Adresse 'fest' sind. Dies 10.0.0.0/16würde bedeuten, dass die ersten 16 Bits fest sind und die letzten 16 Bits alles sein können. Also 10.0.0.0zu 10.0.255.255. 10.0.0.0/24wäre 10.0.0.0zu 10.0.0.255. Und 10.0.0.0/18wäre 10.0.0.0zu 10.0.63.255, 10.0.64.0/18wäre 10.0.64.0zu 10.0.127.255etc.
Sander Steffann

Gleiches gilt für IPv6-Adressen. fe80::/10bedeutet fe80:0000:0000:0000:0000:0000:0000:0000zu febf:ffff:ffff:ffff:ffff:ffff:ffff:ffff. Google auf "CIDR-Notation" für weitere Informationen.
Sander Steffann

PS: Ich habe keine Ahnung, was ich 0.0.0.0/12tun soll. Es wäre der Bereich 0.0.0.0an 0.15.255.255, von denen alle reservierten Adressraum ist nach iana.org/assignments/ipv4-address-space . Diese Adressen sollten niemals in einer echten Verbindung erscheinen.
Sander Steffann

2

Ich bin mir nicht ganz sicher, warum pgAdmin das Verhalten hat, das es tut. Meine Empfehlung wäre, auf ihren Support-Listen nachzufragen und Informationen über das Design dieses Tools zu erhalten und ob dies ein Fehler oder eine Funktion ist. Dies kann auch mit der Windows-Namensauflösung zu tun haben. Um dieses Problem zu umgehen, sollten Sie in der Lage sein, eine Verbindung über die IPv4-Adresse oder über 127.0.0.1 anzugeben.

Bei der Frage pg_hba.conf erhalten ipv4 und ipv6 die unterschiedlichen Leerzeichen in der Datei, sodass es mich nicht überrascht, dass Sie dies hinzufügen müssten.

Eine Möglichkeit, die Sie jetzt herstellen können, besteht darin, ein Kennwort ( ALTER USER "username" WITH PASSWORD 'password') festzulegen . Sie können dann Ihren gesamten IPv6-Speicherplatz in der pg_hba.conf auf md5 setzen und müssen sich nicht so viele Sorgen machen. Wenn Sie sich in einer Windows-Domäne befinden, können Sie die LDAP-, SSPI- oder Kerberos 5-Authentifizierung verwenden und somit nur Domänenmitgliedern den Zugriff erlauben. Dies ist jedoch ein etwas fortgeschrittenes Thema.


2

IPv6 wird verwendet, weil Sie eine Verbindung herstellen localhost. localhostlöst sich zu beiden 127.0.0.1 und ::1.

Da Betriebssysteme IPv6 gegenüber IPv4 bevorzugen, wird IPv6 aus diesem Grund verwendet (obwohl dies unter Linux über konfiguriert werden kann /etc/gai.conf). Die Adresse ::1wird niemals als Quelladresse verwendet, und Sie haben keine globale Adresse ( 2000::/3), sodass die linklokale Adresse ( fe80::/10) als Quelladresse verbleibt.

Alles vollkommen logisches, normales, erwartetes Verhalten, wenn Sie darüber nachdenken.


1
Wenn es für mich logisch wäre, hätte ich die Frage gar nicht erst gestellt, lol, aber danke für die Erklärung.
Raffian
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.