Wie schlecht ist es, MySQLs Bindungsadresse auf 0.0.0.0 zu setzen?

35

Ich versuche, einem Remote-Server den Zugriff auf eine MySQL-Instanz zu ermöglichen, die derzeit einen Linux-Server mit einer Web-App gemeinsam nutzt. Laut Dokumentation ist dies nur möglich (sofern ich nicht richtig verstehe), wenn die Bindeadressen- Direktive auf 0.0.0.0 gesetzt ist , was dazu führt, dass MySQL den Zugriff von jeder IP -Adresse aus erlaubt, die einen gültigen Benutzer erzeugen kann.

Also zwei Fragen:

  1. Wie schädlich wäre dies für die Sicherheit?
  2. Gibt es einen besseren Ansatz, um sowohl lokale als auch Remote-Interaktionen mit MySQL zu ermöglichen?
jonathanatx
quelle

Antworten:

36

Ich denke, Sie missverstehen die Bindeadresse Einstellung ein wenig. Dies sind die lokalen Adressen, unter denen MySQL auf Verbindungen wartet. Der Standardwert ist 0.0.0.0, bei dem es sich um alle Schnittstellen handelt. Diese Einstellung schränkt nicht ein, welche IP-Adressen auf den Server zugreifen können, es sei denn, Sie haben 127.0.0.1 nur für localhost angegeben.

Wenn Sie bestimmte Benutzer auf bestimmte IP-Adressen beschränken müssen, verwenden Sie die folgende Option zum Erstellen / Gewähren von BenutzernCREATE USER 'bobdole'@'192.168.10.221';

Doug Luxem
quelle
+1 aber nur eine Anmerkung, dass die Standard-Listening-Adresse abhängig von der Installation von MySQL variiert.
John Gardeniers
Vielen Dank Doug, ich denke, der Standard war in diesem Fall mein lokaler Host, aber das ist gut zu wissen, dass Benutzer einer bestimmten Datenbank immer noch durch IP eingeschränkt sind.
Jonathanatx
@jonathanatx MySQL Standard-Bindeadresse (in 5.6 und so weit ich weiß) ist 0.0.0.0. Obwohl ich denke, für viele Installationen ist nur die lokale Bindung die beste Option. Öffnen Sie die Tür nicht, wenn Sie nicht möchten, dass jemand durch sie geht.
Ebyrob
1

ein. Es ist schlecht. Obwohl Sie den Benutzerzugriff für jede Datenbank per IP einschränken können, ist es meiner Meinung nach sicherer, alle Verbindungen lokal einzugeben. Auf meinen Servern kann MySQL nur lokale Verbindungen akzeptieren, 127.0.0.1 ist die Standardkonfiguration. Um remote auf die Datenbank zuzugreifen, müssen Sie lediglich einen SSH-Tunnel erstellen, bevor Sie eine Verbindung zur Datenbank herstellen und dann eine lokale Verbindung herstellen. Wenn Sie mit PHP programmieren, ist dies ziemlich einfach. Wenn Sie eine Desktop-Anwendung verwenden, ist es einfach, sie unter Linux auszuführen (SSH-Tunnel nachschlagen). Unter Windows verwende ich normalerweise ein Programm wie Putty, um den Tunnel für mich zu erstellen.

Jayson Just
quelle
7
Das ist ziemlich verrückt. Die Standardmethode besteht darin, Benutzer zu erstellen, auf die nur über bestimmte Hostnamen oder IP-Adressen zugegriffen werden kann. Jeden Webserver dazu zu zwingen, einen SSH-Tunnel zu einer Datenbank zu erstellen, ist viel mehr Arbeit als nötig.
TheLQ
3
Ihr Webserver und Ihr Datenbankserver sind nicht immer dasselbe Gerät. Lassen Sie sicher keine Verbindungen aus dem Internet zu. Es gibt jedoch sichere Möglichkeiten, Lösungen mit MySQL-Netzwerkzugriff zu erstellen.
Shane Madden
1
Für eine kleine Einrichtung (eine db, ein www) Sie können SSH - Tunneling tun. Für ein echtes Setup würden Ihre VPNs und Firewalls Sie schützen, daher würden Sie sich über 0.0.0.0 öffnen, um den Fernzugriff zu ermöglichen.
Sonia Hamilton
2
Für alle, die die Idee des SSH-Tunnels für verrückt halten, ist der Großteil des MySQL-Datenverkehrs unübersehbar. Wenn Sie aus irgendeinem Grund eine Verbindung über ein nicht vertrauenswürdiges Netzwerk (z. B. das Internet) herstellen müssen, sollten Sie SSH in Betracht ziehen oder dies über ein VPN tun. Starten Sie Wireshark oder einen anderen Paketschnüffler, wenn Sie sehen möchten, wovon ich spreche.
Brad
2
@Brad MySQL unterstützt die Verschlüsselung, daher ist dies nicht korrekt.
Marti Markov