Ubuntu 16.04 / phpMyAdmin / Cómo Hacerlo Accesible Solo desde IPs Específicas

Para restringir las direcciones IP que pueden acceder a phpMyAdmin en Apache 2.4, use Require ip en la configuración de acceso del directorio de phpMyAdmin. Especifique las direcciones permitidas, verifique la sintaxis de la configuración y luego recargue Apache. El acceso se permitirá entonces solo para las direcciones especificadas en las rutas donde se aplican los ajustes.

Ámbito de aplicación y requisitos previos

Este artículo utiliza el ejemplo de phpMyAdmin instalado desde el paquete en Ubuntu, servido directamente por Apache 2.4, donde se utiliza el directorio /usr/share/phpmyadmin en su configuración. El método de instalación, el host virtual, los alias y la ubicación de los archivos de configuración varían según el entorno. No aplique este ejemplo tal cual para configuraciones que utilicen Nginx, contenedores o proxies separados.

El soporte de seguridad estándar para Ubuntu 16.04 LTS terminó en abril de 2021, y el soporte de Ubuntu Pro terminó en mayo de 2026. Verifique las condiciones para el soporte adicional Legacy y planifique la migración a una versión compatible. Puede consultar el calendario detallado en Programa de Mantenimiento de Seguridad de Ubuntu.

Si los ajustes se aplican incorrectamente, incluso los administradores pueden verse incapaces de acceder al sistema. Antes de realizar cambios, asegure el acceso a la consola o SSH al servidor, y verifique las direcciones IP reales de los administradores permitidos para acceder y la ruta utilizada por phpMyAdmin. Al acceder a través de internet, generalmente se requiere la IP pública que el servidor ve en lugar de la IP privada del PC de gestión. La dirección que el servidor ve puede variar según el uso de VPN, proxy, NAT y IPv6.

Verificación y respaldo de la configuración actual de Apache

Verifique los alias y la configuración de directorios de phpMyAdmin en la versión de Apache y la configuración activa. Si los siguientes archivos no existen, localice el archivo de configuración real según el método de instalación. Los siguientes resultados de búsqueda pueden incluir configuraciones que no están activas, por lo que también verifique la configuración activa y los hosts virtuales.

apache2 -v
sudo apache2ctl -S
sudo grep -R -n -i phpmyadmin /etc/apache2/conf-enabled /etc/apache2/sites-enabled

Si la configuración del paquete existe en /etc/apache2/conf-available/phpmyadmin.conf y esa configuración está activa, haga una copia de seguridad antes de realizar cambios. Si los archivos de respaldo a continuación ya existen, asigne un nombre diferente para no sobrescribirlos.

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction

Abra el archivo de configuración real con un editor de texto y busque la sección <Directory /usr/share/phpmyadmin>. Por ejemplo, puede editarlo con el siguiente comando.

sudo nano /etc/apache2/conf-available/phpmyadmin.conf

Configurando direcciones IP permitidas

Después de verificar las reglas de permisos de acceso en la sección del directorio existente de phpMyAdmin, establezca las reglas de aprobación que se aplican a esa sección de la siguiente manera. Las direcciones a continuación son ejemplos con fines explicativos, así que asegúrese de reemplazarlas con las direcciones reales del administrador. Mantenga la configuración existente de procesamiento de PHP u otras configuraciones necesarias en la sección original.

<Directory /usr/share/phpmyadmin>
    Require ip 192.0.2.10
</Directory>

El bloque anterior es un ejemplo que muestra la parte de control de acceso. No elimine toda la sección de directorio existente y péguela tal cual. Si coloca Require all granted y Require ip uno al lado del otro en la misma sección, es posible que se permita el acceso si se permite cualquiera de los dos, así que revise las reglas de aprobación existentes para asegurarse de que las restricciones previstas se apliquen realmente. Otras secciones Directory o Location o configuraciones de autenticación también pueden afectar los resultados, así que verifique toda la configuración.

Si hay múltiples direcciones, puede listarlas separadas por espacios. Por ejemplo, la siguiente regla permite el acceso si coincide con cualquiera de las dos direcciones. Si especifica un rango de red, se permitirá todo el rango, así que especifique solo el rango necesario. También se admiten direcciones IPv6 y notación CIDR.

Require ip 192.0.2.10 198.51.100.25

Las directivas Order, Deny y Allow son sintaxis heredadas admitidas por compatibilidad en Apache 2.4. Evite mezclar reglas antiguas y nuevas indiscriminadamente; revise la configuración existente y los demás requisitos de autenticación antes de migrar a la sintaxis actual. Consulte la guía de control de acceso de Apache y la documentación de Require ip para conocer los formatos de direcciones y su alcance.

Verificación de sintaxis, aplicación y conexión

  1. Después de guardar el archivo, verifique la sintaxis de toda la configuración de Apache con el siguiente comando. Si Syntax OK no aparece, revise y corrija el archivo y la línea del error. La verificación de sintaxis no garantiza que la política de acceso funcione según lo previsto.
sudo apache2ctl configtest
  1. Si la verificación de la sintaxis tiene éxito, recargue la configuración y verifique el estado del servicio. El nombre del servicio puede variar dependiendo de la distribución.
sudo systemctl reload apache2
sudo systemctl status apache2
  1. Acceda a phpMyAdmin desde una red permitida utilizando su dirección existente. Si pasa el control de acceso, puede aparecer la pantalla de inicio de sesión, pero se requiere un inicio de sesión de base de datos separado.
  2. Verifique la misma dirección desde una red separada que no esté incluida en la lista de permitidos. Si se aplica la regla relevante de Apache y no hay otros errores, generalmente se muestra 403 Forbidden. Si una dirección permitida es bloqueada o una dirección no permitida puede abrir la página, verifique los registros del servidor, las secciones de configuración aplicables, el proxy y las direcciones IP.

Entorno de Proxy y Seguridad Adicional

Si Apache está detrás de un proxy inverso o balanceador de carga, puede ver la IP del proxy en lugar de la del usuario real. En este estado, permitir la dirección del proxy puede dar acceso a más usuarios de los previstos, así que sea cauteloso. Para usar la dirección real del cliente, es necesario configurar solo proxies de confianza. No confíe ciegamente en los encabezados enviados por clientes arbitrarios; después de revisar la documentación de Apache mod_remoteip , configure según la configuración de su red.

Las restricciones de IP no reemplazan el inicio de sesión de phpMyAdmin ni la gestión de permisos de la base de datos. Use HTTPS y limite los permisos de las cuentas al alcance necesario. Si las IP públicas cambian con frecuencia en su entorno, en lugar de permitir ciegamente un rango amplio de direcciones, considere rutas de acceso como VPNs.

Problemas de Conexión y Reversión de Configuraciones

Si el acceso está bloqueado, verifique la IP pública actual del administrador, las rutas IPv4 e IPv6, si el archivo de configuración está activo y si se aplican reglas de aprobación de otras zonas. La ubicación de los registros de errores de Apache depende de la configuración y, en la configuración predeterminada de Ubuntu, puede consultar /var/log/apache2/error.log. Tenga cuidado al compartir los registros, ya que pueden contener información sensible.

Si necesita revertir cambios, primero compare para asegurarse de que nadie más haya modificado los archivos desde la copia de seguridad, restaure el archivo de respaldo a su ruta original y luego ejecute una verificación de sintaxis y recargue. Restaurar la configuración anterior puede permitir nuevamente el acceso previamente permitido, por lo que debe verificar el alcance del acceso después de la restauración.

sudo cp -a /etc/apache2/conf-available/phpmyadmin.conf.before-ip-restriction /etc/apache2/conf-available/phpmyadmin.conf
sudo apache2ctl configtest && sudo systemctl reload apache2

Si una verificación de sintaxis resulta en errores, no recargue; en su lugar, corrija la configuración. Además, verifique que las restricciones de inicio de sesión y acceso previstas se mantengan tanto en los entornos permitidos como en los no permitidos.