![¿Cómo puedo permitir una conexión MySQL remota a través de HTTP/PHP?](https://rvso.com/image/697399/%C2%BFC%C3%B3mo%20puedo%20permitir%20una%20conexi%C3%B3n%20MySQL%20remota%20a%20trav%C3%A9s%20de%20HTTP%2FPHP%3F.png)
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 firewall
o selinux
están relacionados.
He desactivado ambos firewalld
para selinux
que 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 denied
error al realizar:
wget http://192.168.1.168/connect.php
en la consola del terminal 192.168.1.168http://192.168.1.168/connect.php
en 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.167
192.168.1.168 (servidor WEB)
(2) También me sale Connected successfully
al ejecutar directamente php connect.php
en 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' |
+-------------------------------------------------------------------------------------------------------------------+
netstat
en 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 SELinux
era la causa del fallo de conexión.
Como se mencionó en el hilo original, desactivé el SELinux
Firewall en elDBservidor, que creía que estaba bloqueando la conexión remota desde elWEBservidor.
Lo que está causando el problema de conexión estaba SELinux
en elWEBservidor.
Lo desactivé temporalmente usando setenforce 0
para configurarlo en permissive
modo.
Todo funciona.
Volví a habilitar SELinux
y 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 SELinux
en elWEBservidor y use el siguiente comando para configurar el booleano for SELinux
en elWEBservidor.
setsebool -P httpd_can_network_connect_db 1
Actualmente estoy SELinux
activo en ambos.WEB&DBservidores en enforcing
modo, 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 SELinux
booleanos.
Espero que este hilo pueda ayudar a cualquiera que esté experimentando el mismo problema que yo a ahorrar algo de tiempo.