¿Cómo puedo permitir una conexión MySQL remota a través de HTTP/PHP?

¿Cómo puedo permitir una conexión MySQL remota a través de HTTP/PHP?

Estoy ejecutando CentOS 7 en todos los servidores mencionados a continuación.

Estoy probando en un entorno de desarrollo local para configurar una base de datos y un servidor web separados.

Estos servidores son dos instancias de VirtualBox conectadas mediante Modo Puente en la red de área local para que puedan verse entre sí sin problema.

Quiero que el servidor WEB se conecte a MySQL en el servidor DB utilizando la restricción de IP únicamente desde el servidor WEB.

He leído algunos hilos de discusión pero ninguno ayuda a resolver mi problema, ya que muchos de ellos están relacionados firewallo selinuxestán relacionados.

He desactivado ambos firewalldpara selinuxque estos no sean los factores en este momento.

IP del servidor de base de datos: 192.168.1.167 IP del servidor WEB: 192.168.1.168

Estoy usando el siguiente script para la prueba,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";
?>

Recibo Connection failed: Permission deniederror al realizar:

  • wget http://192.168.1.168/connect.phpen la consola del terminal 192.168.1.168

  • http://192.168.1.168/connect.phpen mi navegador windows también me da el mismo error.

(1) Sin embargo, puedo conectarme exitosamente a través de la línea de comando usando mysql -u demouser -p -h 192.168.1.167192.168.1.168 (servidor WEB)

(2) También me sale Connected successfullyal ejecutar directamente php connect.phpen la consola terminal de 192.168.1.168 (servidor WEB)

Solo puedo confirmar que la conexión MySQL remota a través de SSH está funcionando y que el módulo PHP MySQL está funcionando.

Aquí está el privilegio de acceso en 192.168.1.167 (servidor DB)

+---------------------------------------------------------------------------------------------------------------+
| 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'                                                      |
+-------------------------------------------------------------------------------------------------------------------+

netstaten 192.168.1.167 muestra:

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 

¿Cómo puedo permitir una conexión MySQL remota a través de HTTP/PHP, pero solo para solicitudes que se inician desde el servidor WEB antes mencionado?

Respuesta1

Pude identificar que esa SELinuxera la causa del fallo de conexión.

Como se mencionó en el hilo original, desactivé el SELinuxFirewall en elDBservidor, que creía que estaba bloqueando la conexión remota desde elWEBservidor.

Lo que está causando el problema de conexión estaba SELinuxen elWEBservidor.

Lo desactivé temporalmente usando setenforce 0para configurarlo en permissivemodo.

Todo funciona.

Volví a habilitar SELinuxy Firewall en elDBservidor. Todavía puedo establecer una conexión remota a la base de datos a través del script PHP en elWEBservidor.

Ahora puedo confirmar que el problema estaba en elWEBservidor que inicia la conexión.

Lo volví a habilitar SELinuxen elWEBservidor y use el siguiente comando para configurar el booleano for SELinuxen elWEBservidor.

setsebool -P httpd_can_network_connect_db 1

Actualmente estoy SELinuxactivo en ambos.WEB&DBservidores en enforcingmodo, y la conexión MySQL remota aún puede realizarse exitosamente.

Lo que leí en otros hilos de discusión que no seguí fue: qué servidor configurar los SELinuxbooleanos.

Espero que este hilo pueda ayudar a cualquiera que esté experimentando el mismo problema que yo a ahorrar algo de tiempo.

información relacionada