Wie kann ich eine Remote-MySQL-Verbindung über HTTP/PHP zulassen?

Wie kann ich eine Remote-MySQL-Verbindung über HTTP/PHP zulassen?

Ich verwende CentOS 7 auf allen unten genannten Servern.

Ich teste in einer lokalen Entwicklungsumgebung das Einrichten separater Datenbanken und Webserver.

Bei diesen Servern handelt es sich um zwei VirtualBox-Instanzen, die über den Bridged-Modus im lokalen Netzwerk verbunden sind, sodass sie sich gegenseitig problemlos sehen können.

Ich möchte, dass der Webserver eine Verbindung zu MySQL auf dem DB-Server herstellen kann, wobei nur die IP-Einschränkung des Webservers gilt.

Ich habe einige Diskussionsthreads durchgelesen, aber keiner davon half mir bei der Lösung meines Problems, obwohl viele davon damit zusammenhängen firewalloder selinuxdamit zusammenhängen.

Ich habe beides deaktiviert firewalld, selinuxsodass diese Faktoren derzeit nicht vorliegen.

DB-Server-IP: 192.168.1.167 WEB-Server-IP: 192.168.1.168

Ich verwende das folgende Skript zum Testen,http://192.168.1.168/connect.php

<?php
$servername = "192.168.1.167";
$username = "demouser";
$password = "password";

// Create connection
$conn = mysqli_connect($servername, $username, $password);

// Check connection
if (!$conn) {
    die("Connection failed: " . mysqli_connect_error());
}
echo "Connected successfully";
?>

Connection failed: Permission deniedBeim Ausführen von: tritt eine Fehlermeldung auf.

  • wget http://192.168.1.168/connect.phpauf der Terminalkonsole 192.168.1.168

  • http://192.168.1.168/connect.phpin meinem Browserfenster wird mir der gleiche Fehler angezeigt.

(1) Allerdings kann ich mich erfolgreich über die Kommandozeile mysql -u demouser -p -h 192.168.1.167mit 192.168.1.168 (Webserver) verbinden.

(2) Ich bekomme auch Connected successfullybei direkter Ausführung php connect.phpin der Terminalkonsole die Adresse 192.168.1.168 (WEB-Server)

Ich kann nur bestätigen, dass die Remote-MySQL-Verbindung über SSH und über das PHP-MySQL-Modul funktioniert.

Hier ist das Zugriffsrecht auf 192.168.1.167 (DB-Server)

+---------------------------------------------------------------------------------------------------------------+
| Grants for demouser@localhost                                                                                   |
+---------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'demouser'@'localhost' IDENTIFIED BY PASSWORD '*DB17DD535D122AED147A61C30CD5D01FB3BC5433' |
| GRANT ALL PRIVILEGES ON `demodb`.* TO 'demouser'@'localhost'                                                      |
+---------------------------------------------------------------------------------------------------------------+

+-------------------------------------------------------------------------------------------------------------------+
| Grants for [email protected]                                                                                   |
+-------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'demouser'@'192.168.1.168' IDENTIFIED BY PASSWORD '*DB17DD535D122AED147A61C30CD5D01FB3BC5433' |
| GRANT ALL PRIVILEGES ON `demodb`.* TO 'demouser'@'192.168.1.168'                                                      |
+-------------------------------------------------------------------------------------------------------------------+

netstatauf 192.168.1.167 zeigt:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 0.0.0.0:3306            0.0.0.0:*               LISTEN      2892/mysqld         
tcp        0      0 127.0.0.1:25            0.0.0.0:*               LISTEN      1704/master         
tcp        0      0 0.0.0.0:22              0.0.0.0:*               LISTEN      1053/sshd 

Wie kann ich eine Remote-MySQL-Verbindung über HTTP/PHP zulassen, allerdings nur für Anfragen, die vom oben genannten Webserver initiiert werden?

Antwort1

Ich konnte feststellen, dass dies SELinuxdie Ursache für den Verbindungsfehler war.

Wie im ursprünglichen Thread erwähnt, habe ich die SELinuxFirewall auf demDBServer, von dem ich glaubte, dass er die Remote-Verbindung vomNETZServer.

Die Ursache für das Verbindungsproblem war SELinuxauf demNETZServer.

Ich habe es vorübergehend deaktiviert, indem ich setenforce 0es in permissiveden Modus gesetzt habe.

Funktioniert alles.

Ich habe SELinuxdie Firewall auf demDBServer. Ich kann immer noch eine Remote-Datenbankverbindung über das PHP-Skript auf demNETZServer.

Ich kann nun bestätigen, dass das Problem auf demNETZServer, der die Verbindung initiiert.

Ich habe es wieder aktiviert SELinuxauf derNETZServer und verwenden Sie den folgenden Befehl, um den Boolean für SELinuxauf demNETZServer.

setsebool -P httpd_can_network_connect_db 1

Derzeit habe ich SELinuxaktiv auf beidenNETZundDBServer im enforcingModus und die Remote-MySQL-Verbindung kann weiterhin erfolgreich hergestellt werden.

Was ich in anderen Diskussionsthreads, die ich nicht verfolgt habe, gelesen habe, war: Auf welchem ​​Server sollen die SELinuxBooleschen Werte konfiguriert werden?

Hoffe, dieser Thread kann jedem, der das gleiche Problem hat wie ich, helfen, etwas Zeit zu sparen.

verwandte Informationen