MySQL nach außen öffnen

samy-delux

New Member
Hallo Leute,

Ich würde gerne erfahren, wie sicher es ist MySQL auch Verbindungen von außen annehmen zu lassen!
Da dies für Datenbank Replikation erforderlich ist, würde mich interessierten wie sicher zum Beispiel die Passwort übertragung etc. ist! Oder ob man durch das öffnen nach außen spezielle Angst vor Dos-Attacken haben muss?

so long,
Samy
 
Danke für die Tips.
Den ersten Link habe ich mir sogar schon vor 2 Tagen komplett durchgelesen und bin zu dem Schluss gekommen, dass es nicht möglich ist das zu nutzen.

Dazu kommt noch das Problem dass es im Moment darum geht von einem normalen Webspace auf den MySQL Server zuzugreifen, der auf einem Rootserver liegt.
Daher kommt SSL nicht in Frage, da die PHP Version auf dem Webspace kein MySQL mit SSL unterstützt. Dann kam mir die Idee, da es ja nur um INSERTs geht, das per SSH zu Tunneln. Doch die SSH Funktionen von PHP sind auf dem Webspace auch nicht vorhanden.

Also bin ich am Ende dabei hängen geblieben, dass MySQL nach außen zu öffnen die einzigste Möglichkeit ist. Ich würde einen User erstellen der nur das INSERT Recht in einer einzigen Tabelle hat. Dieser würde sich dann von außen verbinden.
Alle anderen user sind eh nur von localhost zugelassen (außer root).

Jetzt wieder zur ursprünglichen Frage. Wie sicher ist so ein Setup ?
 
ich würde zusätzlich noch den Zugriff auf die externen IPs begrenzen, die unbedingt nötig sind. In dem Fall ist ein Paketfilter IMHO sehr sinnvoll.
 
Muss ich um MySQL Verbindungen nur von bestimmten Adresse zuzulassen wirklich den umweg über Packetfilter etc. gehen?
Oder reicht es vieleicht schon einfach das in MySQL zu regeln. Man muss bei Usern ja immer "user@host" angeben. Also dabei für die externen Benutzer den Host einfach entsprechend setzen. Reicht das an Sicherheit?
 
nö, du musst den Umweg nicht gehen. Aber ich würde ihn gehen.
Die Absicherung über die mysql Tabellen reicht genau so lange völlig aus, wie es keinen Exploit gibt, diese zu umgehen.

Mit dem Paketfilter schränkst du die Quellrechner für den Exploit extrem ein.
Ein großer Zugewinn an Sicherheit bei minimalstem Aufwand (max. 2 min).

BTW: eine Suche nach "mysql exploit" gibt immerhin 2.24 Mio Treffer. Nicht auszuschliessen, dass da was dabei ist, was sich auch praktisch anwenden lässt.
Warum also das Risiko nicht minimieren, wenn schon externe Zugriffe notwendig sind? Webserver IPs wechseln normalerweise auch nicht so häufig, dass das ein Kontraargument wäre.
 
Dazu kommt noch das Problem dass es im Moment darum geht von einem normalen Webspace auf den MySQL Server zuzugreifen, der auf einem Rootserver liegt.
Hast du die Möglichkeit per CGI, mod_php/exec() oder cronjob ssh direkt zu starten?
Jetzt wieder zur ursprünglichen Frage. Wie sicher ist so ein Setup ?
Ist doch recht klar formuliert:
Do not transmit plain (unencrypted) data over the Internet. This information is accessible to everyone who has the time and ability to intercept it and use it for their own purposes. Instead, use an encrypted protocol such as SSL or SSH. MySQL supports internal SSL connections as of version 4.0. Another technique is to use SSH port-forwarding to create an encrypted (and compressed) tunnel for the communication.

When you connect to a MySQL server, you should use a password. The password is not transmitted in clear text over the connection. Password handling during the client connection sequence was upgraded in MySQL 4.1.1 to be very secure. If you are still using pre-4.1.1-style passwords, the encryption algorithm is not as strong as the newer algorithm. With some effort, a clever attacker who can sniff the traffic between the client and the server can crack the password. (See Section 5.7.9, “Password Hashing as of MySQL 4.1”, for a discussion of the different password handling methods.)
[...]All other information is transferred as text, and can be read by anyone who is able to watch the connection. If the connection between the client and the server goes through an untrusted network, and you are concerned about this, you can use the compressed protocol to make traffic much more difficult to decipher. You can also use MySQL's internal SSL support to make the connection even more secure. See Section 5.8.7, “Using Secure Connections”. Alternatively, use SSH to get an encrypted TCP/IP connection between a MySQL server and a MySQL client. You can find an Open Source SSH client at OpenSSH, and a commercial SSH client at SSH Communications Security.
Das komprimierter Traffic sehr schwerer lesbarer ist halte ich für ein Gerücht. Es gibt leider immernoch ein paar große Serveranbieter bei denen die Switches wegen überbelastung oder falscher Konfiguration im Hub Modus laufen was das sniffen ermöglicht :(
Muss ich um MySQL Verbindungen nur von bestimmten Adresse zuzulassen wirklich den umweg über Packetfilter etc. gehen?
Ich kann mich an keinen Exploit erinnern mit dem man mysql vor der erfolgreichen Authentifizierung angreifen könnte, aber das würde dich zumindest recht einfach vor DOS Angiffen bewahren :)

Ob dir das durch die billig Backup Lösung gespartes Geld, die Sicherheit vor Datenverlust oder die Sicherheit vor Datenklau wichtiger ist ist deine Entscheidung :p
 
Communication failure during handshake

hi,
ich weiß nicht, ob das hier hinein passen könnte. Ich habe einen VServer bei strato. Dort greife ich über php auf meine Datenbank zu.
Jetzt möchte ich über java zugreifen. Dafür benutze ich den jdbc.
Ich führe java von dem VServer aus, auf dem auch die MySQL-Datenbank liegt.

Dabei bekomme ich die Fehlermeldung:

java.sql.SQLException: Communication failure during handshake. Is there a server running on localhost:3306?

Mein Programm sieht wie folgt aus:


static String username = "xxx";
static String serverName ="localhost"
static String mydatabase = "xxx";
static String url = "jdbc:mysql://" + serverName + "/" + mydatabase;
static String password = xxx;
static Connection verbindung = null;
static Statement stmt = null;
static ResultSet rs = null;

static void verbinden (){
try {
String driverName = "org.gjt.mm.mysql.Driver";
Class.forName(driverName);
verbindung = DriverManager.getConnection(url, username, password);
stmt = verbindung.createStatement();
}

Muss ich beim serverName etwas anderes nehmen?
Oder kann ich mit dem JDBC garnicht zugreifen, wenn ich nicht irgendwelche Einstellungen ändere? Wo und wie ich Einstellungen ändere, weiß ich übrigens auch nicht.

Danke für eure Hilfe.
 
BTW: eine Suche nach "mysql exploit" gibt immerhin 2.24 Mio Treffer. Nicht auszuschliessen, dass da was dabei ist, was sich auch praktisch anwenden lässt.
Warum also das Risiko nicht minimieren, wenn schon externe Zugriffe notwendig sind? Webserver IPs wechseln normalerweise auch nicht so häufig, dass das ein Kontraargument wäre.

Nein gibts nicht, gutes PW + non-Root ist vollkommen sicher.
Würde es sowas geben, dann würde ichs wissen.

Trotzdem, ein Sicherheitsplus ist's natürlich, das alles über VPN etc. zu regeln.
 
Communication failure during handshake. Is there a server running on localhost:3306?
Arbeite mal daran. Überprüfe wie MySQL angesprochen werden kann. Nutze die Macht von netstat.

Und PS: Nein, paßt hier absolut nicht rein.

Zum eigentlichen Topic, der inzwischen 4 Wochen alt ist:
Mit iptables macht es schon Sinn. Aber um BruteForce-Angriffen auszuweichen kann man auch einfach den Port verlegen.

huschi.
 
Back
Top