MySQL Datenbankzugriff von außen sperren (nur DynDNS)

  • Moinsen, wollte Mal fragen, ob es Sinn macht und ob es überhaupt funktioniert die Remoteverbindungen zur Datenbank per DynDNS freizuschalten.


    Also man kann ja im WCP bei den Datenbanken die Einstellung ändern, Remoteverbindungen zu sperren bzw. nur bestimmte frei zu schalten.


    Eine Frage dazu, wenn ich die interne IP verwende, gilt die Sperre dann auch oder wirklich nur für die externe IP?


    Außerdem wäre die Frage, ob es Sinn macht die Datenbank nur für meinen eigenen Server und meine Heimnetz IP frei zu schalten um halt nur mein RasPi auf die DB zugreifen zu lassen und meinen Server über die Interne IP.


    Wäre halt die Frage, wie schnell die IP im Server dann auch frei geschaltet wird nach einem Update.


    Also die DNS Einträge sind sehr schnell geupdatet, da Cloudflare verwendet wird.


    Ist halt nur die Frage, wie schnell die Datenbank auf eine geänderte IP reagiert und dementsprechend die IP freischaltet. Ansonsten wären jedes Mal für die Zeit des IP Updates die Datenbank nicht erreichbar.


    Mein Ziel ist halt möglichst keinen Zugriff für unberechtigte auf die DB überhaupt zu ermöglichen.


    Freue mich über Infos und Erfahrungen von euch ✌🏼

  • Eine Frage dazu, wenn ich die interne IP verwende, gilt die Sperre dann auch oder wirklich nur für die externe IP?

    Meinst Du wenn in Remoteverbindungen zulassen von nur die interne DB IP-Adresse eingetragen ist, dass dann deine Remote IP geblockt ist? Wenn nur die interne DB IP-Adresse eingetragen ist, dann geht der Zugriff auch nur von dieser IP.


    Ich habe bei mir unter Remoteverbindungen zulassen von folgende IPs eintragen:

    • die interne DB IP-Adresse
    • die interne Webserver IP-Adresse
    • meine public Remote IP-Adresse (Heimnetzwerk)

    DynDNS müsste man testen, ob bei Netcup eventuell ein DNS Cache für Abfragen der FQDN Einträge reinspuckt.

  • […] um halt nur mein RasPi auf die DB zugreifen zu lassen […]

    Verschlüsselst Du die Verbindung dabei irgendwie oder schickst Du das alles im Plaintext quer durchs Internet?


    DynDNS würde ich an dieser Stelle eher vermeiden. Aber Du kannst in Plesk auch ganze Subnetze Deines privaten ISP freischalten, wenn ich mich nicht täusche. (z.B. 100.0.0.% oder 100.0.0.0/255.255.255.0)

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Meinst Du wenn in Remoteverbindungen zulassen von nur die interne DB IP-Adresse eingetragen ist, dass dann deine Remote IP geblockt ist? Wenn nur die interne DB IP-Adresse eingetragen ist, dann geht der Zugriff auch nur von dieser IP.


    Ich habe bei mir unter Remoteverbindungen zulassen von folgende IPs eintragen:

    • die interne DB IP-Adresse
    • die interne Webserver IP-Adresse
    • meine public Remote IP-Adresse (Heimnetzwerk)

    DynDNS müsste man testen, ob bei Netcup eventuell ein DNS Cache für Abfragen der FQDN Einträge reinspuckt.

    Ja genau das meine ich.

    Also muss ich hier auch die interne IP eintragen, da diese sonst auch gesperrt ist. So wie ich das jetzt verstehe schon.


    Ja, DynDNS könnte wahrscheinlich Probleme machen. Wäre halt interessant zu wissen, ob's jemand schon Mal getestet hat.

    Verschlüsselst Du die Verbindung dabei irgendwie oder schickst Du das alles im Plaintext quer durchs Internet?


    DynDNS würde ich an dieser Stelle eher vermeiden. Aber Du kannst in Plesk auch ganze Subnetze Deines privaten ISP freischalten, wenn ich mich nicht täusche. (z.B. 100.0.0.% oder 100.0.0.0/255.255.255.0)

    Das wäre alternativ auch interessant. So könnte man den Zugriff zumindest etwas einschränken. Anstatt einfach alles von außen zuzulassen.


    Tatsächlich habe ich mir darüber nicht Mal Gedanken gemacht. Bisher seit längerem nicht viel mit DBs zutun gehabt. Nur die "fertigen" Anwendungen die eine brauchen.

    Nutzdaten, die in die DB eingetragen werden aktuell bei dem Projekt sind nicht verschlüsselt. Das ist mir aber bewusst bzw. relativ klar, wie ich das umsetze. Bei Passwörtern und ähnlichen Daten wäre das auch Vorraussetzung für mich. Aber in dem Fall aktuell nicht notwendig. Kann ich natürlich trotzdem noch einbauen.


    Wäre die Frage, worüber ich mir tatsächlich peinlicher Weise kein Kopf gemacht habe, die Verbindungsverschlüsselung.

    Hab irgendwie einfach nicht dran gedacht und angenommen, dass die wohl einfach verschlüsselt ist 😅


    Setzen die DBs von NetCup Verschlüsselung voraus?

    Kann man ja in die Config der DB rein packen.


    Andere Frage, wie sieht es da mit PHP und MySQL/PDO aus?

    Wie setze ich da explizit Verschlüsselung um?


    Danke für die Infos ✌🏼

  • Also muss ich hier auch die interne IP eintragen, da diese sonst auch gesperrt ist. So wie ich das jetzt verstehe schon.

    Ja, also mindestens die interne Webserver IP-Adresse. Sonst kann vom Webcontent aus nicht auf die DB zugegriffen werden. Habe das bei der Einrichtung durchprobiert.

    Ich glaube die interne DB IP-Adresse kannste auch weglassen, aber die mit einzutragen ist eher kein Problem.

    auch ganze Subnetze Deines privaten ISP freischalten, wenn ich mich nicht täusche. (z.B. 100.0.0.% oder 100.0.0.0/255.255.255.0)

    DynDNS habe ich nicht versucht, da ich die Lösung von KB19 genommen habe.

    Wäre die Frage, worüber ich mir tatsächlich peinlicher Weise kein Kopf gemacht habe, die Verbindungsverschlüsselung.

    Hab irgendwie einfach nicht dran gedacht und angenommen, dass die wohl einfach verschlüsselt ist 😅


    Setzen die DBs von NetCup Verschlüsselung voraus?

    Kann man ja in die Config der DB rein packen.

    Per Default ist die Verbindung erstmal Plain. Muss vom Client/Script ausgehen, was gemacht wird. Die Netcup MySQL DB hat zumindest SSL/TLS aktivert. Netcup intern (NC-Webserver -> NC-DB) sehe ich Plain Zugriff nicht so kritisch. Mein Remotezugriff ist auch eher für Supportzwecke.

  • Okay danke schon mal für die Infos.

    Kann mir zufällig jemand generische Login bzw. Connect Befehle für MySQLi bzw. PDO bereitstellen?

    Verstehe das noch nicht ganz, wie ich da korrekt die Verschlüsselung aktiviere.

    Welche Zertifikate muss ich wie einbinden usw. Hab mir das mal grob abgelesen und gegoogelt aber bin mir nicht sicher ob das klappt und alles so richtig ist.

  • Also ich habe da so meine Zweifel, dass eine verschlüsselte Verbindung zum Datenbankserver aufgebaut werden kann. Macht man ja lokal meist schon nicht, weil es die Datenbankzugriffe langsamer macht und - hier im Shared Webhosting vielleicht noch wichtiger - der Datenbankserver mehr arbeiten muss. Wozu wird denn die Datenbank überhaupt gebraucht? Wenn Performance halbwegs wichtig ist, würde ich mir lieber lokal einen MySQL/MariaDB -Server installieren. Damit würden gleich mehrere Probleme hinfällig...

    • Keine Verschlüsselung notwendig, es kommt kein externer an die Datenbank dran.
    • Kürzere Zeit beim Aufbau einer Verbindung und auch bei der Übertragung von Daten (Webhosting ist nur mit 100 MBit angebunden, jedenfalls in der Theorie.
    • Keine Ausfallzeit bei Änderung der externen IP.

    Anders mag es aussehen, wenn die meisten Zugriffe über das Webhosting passieren und nur die Daten von Zeit zu Zeit von lokal abgefragt werden.

  • Kann mir zufällig jemand generische Login bzw. Connect Befehle für MySQLi bzw. PDO bereitstellen?

    mysqli_real_connect() kennt z.B. das Flag MYSQLI_CLIENT_SSL und das funktioniert beim Webhosting einwandfrei ohne mysqli_ssl_set().


    Damit wird das Zertifikat des Servers allerdings nicht geprüft! Vor einem echten MITM-Angriff schützt das also nicht, nur vor dem bloßen Mitlesen.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    Edited 2 times, last by KB19 ().

  • Macht man ja lokal meist schon nicht, weil es die Datenbankzugriffe langsamer macht und - hier im Shared Webhosting vielleicht noch wichtiger - der Datenbankserver mehr arbeiten muss.

    Ich glaube die Verschlüsselung ist im Jahr 2023 kein wirklicher Ressourcenfaktor mehr, das merkt man kaum. Was definitiv langsamer wird, ist der Verbindungsaubau. Der dauert gerne mal 100 Millisekunden länger, wenn man SSL verwendet. Bei einer externen Verbindung außerhalb des RZ macht das aber auch keinen wirklichen Unterschied mehr, da ist sowieso alles grottenlangsam, je nachdem wie hoch die Latenz ist.


    Dennoch hast Du mit dem Rest Deines Beitrags natürlich vollkommen recht, dass eine lokale Installation immer vorzuziehen ist.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

  • Also ich habe da so meine Zweifel, dass eine verschlüsselte Verbindung zum Datenbankserver aufgebaut werden kann. Macht man ja lokal meist schon nicht, weil es die Datenbankzugriffe langsamer macht und - hier im Shared Webhosting vielleicht noch wichtiger - der Datenbankserver mehr arbeiten muss. Wozu wird denn die Datenbank überhaupt gebraucht? Wenn Performance halbwegs wichtig ist, würde ich mir lieber lokal einen MySQL/MariaDB -Server installieren. Damit würden gleich mehrere Probleme hinfällig...

    • Keine Verschlüsselung notwendig, es kommt kein externer an die Datenbank dran.
    • Kürzere Zeit beim Aufbau einer Verbindung und auch bei der Übertragung von Daten (Webhosting ist nur mit 100 MBit angebunden, jedenfalls in der Theorie.
    • Keine Ausfallzeit bei Änderung der externen IP.

    Anders mag es aussehen, wenn die meisten Zugriffe über das Webhosting passieren und nur die Daten von Zeit zu Zeit von lokal abgefragt werden.

    Ich denke schon, dass es möglich ist. Wurde ja auch geschrieben, dass es unterstützt wird. Ich finde generell sollte man Verschlüsselung vorraussetzen. Selbst lokal, klar gebe dir Recht, ist nicht unbedingt notwendig, sollte man trotzdem das meiste möglichst verschlüsseln. Finde, dann ist man immer auf der "sicheren" Seite.

    Davon Mal abgesehen würde ich auch behaupten, dass es in der heutigen Zeit nicht mehr so viel Unterschied macht. Natürlich der Aufbau der Verbindung und natürlich bei Massenweise Zugriffen merkt man das schon aber finde das trotzdem sinnvoll.


    Klar lokal installiert ist an sich was Performance an geht immer besser. In meinem Fall aber so nicht umzusetzen bzw. nicht sinnvoll.


    Das mit der DynDNS war auch nur zusätzlich als Sicherheit, dass wirklich nur mein RPi Zuhause und der Webserver und Root-Server drauf zugreifen können.

    Mit IP Änderung ist das natürlich problematisch.


    mysqli_real_connect() kennt z.B. das Flag MYSQLI_CLIENT_SSL und das funktioniert beim Webhosting einwandfrei ohne mysqli_ssl_set().


    Damit wird das Zertifikat des Servers allerdings nicht geprüft! Vor einem echten MITM-Angriff schützt das also nicht, nur vor dem bloßen Mitlesen.

    OKey, danke.

    Schaue ich mir Mal an. Hab da auch schon was in PDO eingefügt, bin mir nur nicht sicher ob das so funktioniert und hab da nicht wirklich Erfahrung mit der Verschlüsselung. Wüsste halt auch nicht welche Zertifikate ich nehmen muss.


    Ich glaube die Verschlüsselung ist im Jahr 2023 kein wirklicher Ressourcenfaktor mehr, das merkt man kaum. Was definitiv langsamer wird, ist der Verbindungsaubau. Der dauert gerne mal 100 Millisekunden länger, wenn man SSL verwendet. Bei einer externen Verbindung außerhalb des RZ macht das aber auch keinen wirklichen Unterschied mehr, da ist sowieso alles grottenlangsam, je nachdem wie hoch die Latenz ist.


    Dennoch hast Du mit dem Rest Deines Beitrags natürlich vollkommen recht, dass eine lokale Installation immer vorzuziehen ist.

    Grotten langsam kommt immer drauf an.

    Also damals bei Festnetz 1&1 hatte ich so gut wie nie Probleme. Es kamen 250K Down und 50K Up mit Ping von 10ms an und das so gut wie durchgehend. Das war überraschend gut.

    Jetzt aktuell mit Mobilfunk kommen in meinem Ort (nicht bestens ausgebaut) trotzdem bis zu fast 200K Down und bis 50K Up an mit Ping von 30-70ms.

    Also Recht akzeptabel.

    Natürlich niemals so gut wie im Rechenzentrum mit der Anbindung usw.


    Also die Sache ist die, dass ich mit meinen RasPi Daten aus der Datenbank Abrufe welche zuvor von meinem Webhosting bzw. Root-Server eingetragen werden.

    Das wäre halt schön, wenn nicht einfach alles unverschlüsselt quer durchs Internet geht. Und meines Erachtens nach ist es da egal welche Daten. Warum sollte man sonst https überall einsetzen. Kann man ja auch weg lassen. Kommt im Endeffekt aufs gleiche hinaus. Natürlich nur grob gesagt aber dann kann ich Verschlüsselung auch weg lassen. Macht aber keiner. Wäre ja auch sinnfrei. Von daher sollte das wohl seitens NetCup das mindeste sein, das zu ermöglichen. Generell sollten Sie es für Verbindungen außerhalb des Netzwerks erfordern.


    Naja wie dem auch sei. Wäre halt schön wenn's geht. Würde es wahrscheinlich einfach überall aktivieren. Da ist mir Sicherheit wichtiger als ein paar Millisekunden hier und da. Ich habe eh aktuell keine sonderlich ausgelasteten Dienste wo wer weiß wie viele tausend Leute drauf laufen. Außer halt TOR und da laufen auch 8-12K Verbindungen verschlüsselt ohne Probleme.


    Also wäre es schon traurig, wenn das bei ner DB nicht geht.


    MfG und danke für die Infos.

  • Das grottenlangsam bezog sich vor allem darauf: Führe mal hunderte SQL-Queries oder Queries mit größeren Ergebnissen lokal (localhost!) und dann zum Vergleich über das Netzwerk auf einem anderen System aus. Jede Millisekunde an Latenz verschlechtert die Performance bei so etwas spürbar. Alleine schon, weil bei jedem Query erst einmal ewig gewartet werden muss, bis alles über das Netzwerk übertragen wurde. Selbst bei nur 20-30 zusätzlichen Millisekunden für die Datenpakete von Zuhause zum Server und wieder zurück, summiert sich das extrem.


    Kommt halt immer drauf an, was man genau macht. Je nach Szenario fällt das vielleicht nicht großartig ins Gewicht.

    "Wer nur noch Enten sieht, hat die Kontrolle über seine Server verloren." (Netzentenfund)

    Like 2
  • Man merkt teilweise schon deutliche Unterschiede, zwischen Webhostings mit Datenbank auf dem localhost und mit Datenbank auf einem separaten Server, bei der Performance eines CMS wie Wordpress, TYPO3, Joomla, Contao ... Jedenfalls wenn die Seite nicht aus dem Cache genommen werden kann, sondern komplett neu aufgebaut werden muss. Und da geht es meist um vom Netzwerk verursachte Latenzen deutlich unter 1ms. Wenn du jetzt freilich bei einer Anwendung nur alle paar Sekunden einen Datenbankzugriff hast, dann wird so ein Unterschied gar nicht auffallen.

  • Okay danke schon mal für die Infos.

    Kann mir zufällig jemand generische Login bzw. Connect Befehle für MySQLi bzw. PDO bereitstellen?

    Verstehe das noch nicht ganz, wie ich da korrekt die Verschlüsselung aktiviere.

    Welche Zertifikate muss ich wie einbinden usw. Hab mir das mal grob abgelesen und gegoogelt aber bin mir nicht sicher ob das klappt und alles so richtig ist.

    Ich benutze SSL wie gesagt nur für meine "Remote" Support Verbindung vom Heimnetzwerk zur Netcup DB über das Internet. Das ist keine permanente Benutzung, sondern nur zu Supportzwecken. Den Rest mache ich über den PHPAdmin vom Webhosting. Webhosting -> Webhosting DB könnte ich zwar auch auf SSL umstellen, ist aber wie gesagt nicht so kritisch für mich.


    CLI Befehle für SSL habe ich jetzt nicht zur Hand. Verwende einen Client (https://dbeaver.io) und für den habe ich keine neuen Zertifikate in der Webhosting DB hinterlegt.

    Einfach SSL Haken gesetzt und Zertifikatprpüfung aus:

    Mysql-client.png

    Laut Clientsession passt das so:

    sql-session.png

    Man merkt teilweise schon deutliche Unterschiede, zwischen Webhostings mit Datenbank auf dem localhost und mit Datenbank auf einem separaten Server, bei der Performance eines CMS wie Wordpress, TYPO3, Joomla, Contao ... Jedenfalls wenn die Seite nicht aus dem Cache genommen werden kann, sondern komplett neu aufgebaut werden muss.

    Ja der Seitenaufbau bei meinem Webhosting Content könnte manchmal schneller sein, obwohl ohne DB SSL. Vielleicht ist das was Du beschrieben hast der Punkt.

  • Gut okey, bei ner gewissen Masse, macht das natürlich schon was aus.

    Aber trotzdem, würde ich es gerne nutzen. Zumindest überhaupt erstmal korrekt hin bekommen.


    Dbeaver sieht interessant aus. Muss Mal schauen ob's Source Code gibt, wo das umgesetzt wird. Weil jetzt n komplettes Programm einbinden für eigentlich wahrscheinlich 1-2 Zeilen Code fände ich da zu viel.


    Es geht wie gesagt hauptsächlich um die Außenanbindung von meinem RPi Zuhause.


    Soweit ich alles konfiguriert habe läuft ja alles. Nur halt SSL/TLS möchte ich noch aktivieren.


    Wenn ich direkt auf mein Heimnetz zugreifen könnte, hätte ich das ganze evtl. Anders lösen können aber so wie ich mein Gateway im RasPi programmiert habe, ist das wahrscheinlich wohl auch sicherer die Daten abzufragen anstatt zuschicken zu lassen.


    Außerdem habe ich noch keine Lösung gefunden, wie ich von außen auf mein Netzwerk zugreifen kann. Hab n Mobilrouter für Internet Empfang und ne Fritzbox dahinter fürs Heimnetz und das ganze macht irgendwie die Portfreigaben nicht mit.

  • Schaue ich mir auf jeden Fall Mal an.

    Aber angeblich gibt's ja auch bei IPv6 bzw DS-Lite Probleme mit VPN usw. Hab gerade keine Ahnung was es damals genau war.. dachte auch schon an solche Sachen wie Teamviewer weil da kann man ja auch zugreifen. Aber naja muss mal schauen wie ich das alles am besten umsetze.

    Ist halt auch viel gebastel, da ich gerne neue Sachen ausprobiere.

    Was halt praktisch wäre, einfach eigentlich wie gewohnt beim Festnetz direkt auf die Fritz zugreifen zu können. Aber ich les mich da Mal noch weiter ein.

    Zerotier hört sich auf jeden Fall sehr interessant an.


    Sind jetzt gerade einige Sachen durcheinander gewürfelt..

    Also die Probleme hab ich nicht mehr in dem Sinne.


    Bei mir Zuhause geht halt eigentlich über den Mobil Router IPv4 & 6 aber an der Fritz kann ich nur v4 nutzen.

    Alles noch etwas verwirrend wie das zu ändern ist.

  • Ich habe den Thread nur grob überflogen und es kann sein, dass ich nicht alles verstanden habe. Ggf. hilft dies ja dennoch:


    Ich habe zu Hause einen Raspi mit PiHole und OpenVPN am laufen. Zudem eine MariaDB in meinem Netcup Server in einer Docker-Umgebung.

    Eine Linux Applikation auf meinen Desktop und Notebook greift direkt auf die MariaDB zu.

    Ich habe es wie folgt implementiert.

    - In der Applikation auf SSL/TLS den Zugriff programmiert (Git Fork)

    - Auf dem Server mit iptables nur die Heinnetzadresse für dem MariaDB Port zugewiesen

    - Will ich von meinen Notebook außerhalb meines Heinnetzadresse (Hotel, etc.) zugreifen, aktiviere ich das VPN

    - Greife dann auf den Raspi zu und von dort geht es dann verschlüsselt zu der MariaDB


    https://www.kuketz-blog.de/pi-hole-schwarzes-loch-fuer-werbung-raspberry-pi-teil1

    PiVPN: Raspberry Pi mit OpenVPN – Raspberry Pi Teil3
    Mit PiVPN lässt sich ein VPN auf Basis von OpenVPN einfach auf einem Raspberry Pi realisieren.
    www.kuketz-blog.de

    Iptables Anfänger: Zugriff auf Port 3306 von MariaDB docker-compose Service auf eine dedizierte IP legen - netcup Kundenforum
    Hallo zusammen, ich habe eine private Umgebung (Mailu E-Mail, Nextcloud, Webpage, MariaDB, myPhpAdmin, ...) über docker-compose Schritt für Schritt hinter…
    forum.netcup.de

    https://www.cyberciti.biz/faq/how-to-setup-mariadb-ssl-and-secure-connections-from-clients/


    Toto12

  • Also hauptsächlich geht es mir an sich um die DB Verbindungsverschlüsselung.

    Die Ideen mit VPN sind auch gut. Habe das Mal mit Zerotier getestet. Aber irgendwie geht das noch nicht wirklich.

    Angeblich braucht man nichts großartig konfigurieren.

    Habe mir einen Free Account gemacht, Netzwerk erstellt, Client auf Hand und PC zum testen installiert.

    Angeblich soll man jetzt auch laut einiger Anleitungen im Netz einfach über die IP (von ZeroTier) auf den jeweiligen Netzpartner zugreifen können.

    Habe testweise einfach Mal in XAMPP den Apache laufen lassen. Kann aber über die Remote IP von Handy nicht drauf zugreifen.

    Muss ich nochmal weiter schauen, wie ich das umsetze bzw. was noch zu konfigurieren ist.

    Für mein Heimnetz und die Anwendung mit Google hilft das wahrscheinlich trotzdem nicht. Aber hat dann auch hier nichts mehr direkt mit dem Thread bei NetCup zu tun.

    Aber ZeroTier scheint an sich vielversprechend, was meine Anwendung mit der Datenbank an geht. Und es ist eine gute Idee für weitere Dinge die ich implementieren möchte.

    Muss ich schauen, wie das alles umzusetzen ist. Danke auf jeden Fall für die vielen Ideen und die Hilfe ✌🏼👍🏼😀