phpMyAdmin è un ottimo strumento per gestire un database MySQL, ma mettere l'accesso al tuo database dietro un'interfaccia web è un grosso ostacolo alla sicurezza. Ecco alcune alternative per mitigare i rischi legati all'esecuzione di phpMyAdmin.
Perché phpMyAdmin è un ostacolo alla sicurezza??
Generalmente, avresti un database che verrebbe eseguito sul tuo server e accetterebbe solo connessioni da localhost
o forse da un altro servitore fidato. Se avessi un'applicazione in esecuzione anche su quel server, comunicherei direttamente. Non c'è modo per un utente malintenzionato di ottenere l'accesso senza accedere all'intero server.
phpMyAdmin evita questo per fornirti un'interfaccia web per gestire il tuo database. È uno strumento molto utile, ma è un disastro per la sicurezza. phpMyAdmin ha pieno accesso illimitato al tuo database, poiché è pensato per sostituire la scorciatoia da riga di comando. Se un utente malintenzionato ottiene l'accesso al pannello web, avrai accesso a tutto. E phpMyAdmin è generalmente protetto solo con una semplice password.
Installa phpMyAdmin e Secure MySQL
phpMyAdmin gira sullo stack LAMP (Linux, Apache, MySQL, PHP). Anche prima di iniziare l'installazione di phpMyAdmin, la tua istanza MySQL dovrebbe essere al sicuro. MySQL fornisce un'utilità utile per eseguire alcune attività di sicurezza di base:
sudo mysql_secure_installation
Questo ti guiderà a cambiare la password di root, disabilita gli accessi remoti e rimuovi il database di prova.
Successivamente, Puoi installare phpMyAdmin come sempre. Durante l'installazione, ti verrà richiesta una password per l'utente amministratore del database (che avrei dovuto stabilire durante mysql_secure_installation
) e una nuova password per proteggere phpMyAdmin. Assicurati che questa password sia lunga e forte, poiché è l'ultimo punto di difesa prima che gli attaccanti possano entrare.
Nonostante questo, idealmente, nessun utente malintenzionato dovrebbe essere in grado di indovinare la tua password, quindi vorrai mettere phpMyAdmin dietro qualcos'altro per essere in grado di proteggerlo ancora di più.
Opzione 1: bloquear Apache y utilizar el reenvío de puertos SSH
Esta es la opción más segura, pero solo es verdaderamente adecuada para el acceso de un solo usuario, concretamente para usuarios únicos que disponen acceso administrativo completo a todo el servidor, dado que necesita que se conecte a través de SSH.
El reenvío de puertos SSH es un método para reenviar puertos locales a un sistema remoto. Come esempio, tendría Apache ejecutándose en su servidor, escuchando en el puerto 80. Si canalizó ese puerto, podría entrar a él yendo a:
https://localhost:80/
… en cualquier navegador web. In qualche modo, es casi como si Apache se estuviera ejecutando en su sistema. Pero el puerto 80 no tiene que estar abierto en su servidor; todo el tráfico se enruta a través del puerto estándar 22 utilizado para SSH. Deberá asegurarse de que SSH esté protegido con claves SSH, y lo mejor es que no se ejecute en el puerto estándar, dado que este método es tan seguro como su conexión SSH.
Per fare questo, deberá vincular Apache a localhost y asegurarse de que no esté abierto a Internet. Aprire /etc/apache2/ports.conf
, y cambie las tres declaraciones de escucha para escuchar solo en localhost (conosciuto anche come 127.0.0.1
):
Ascolta 127.0.0.1:80 <IfModule ssl_module> Ascolta 127.0.0.1:443 </IfModulo> <IfModule mod_gnutls> Ascolta 127.0.0.1:443 </IfModulo>
Reinicie Apache con:
sudo service apache2 riavvio
Y phpMyAdmin debería ser inaccesible. Se esperaba esto. Una vez que Apache está configurado, puede tunelizar el puerto 80 usando il seguente comando:
ssh -L 80:localhost:80 user@server
Successivamente, puede entrar a phpMyAdmin desde localhost:80
en cualquier navegador web. Intanto, su servidor se puede configurar con un cortafuegos estricto para no permitir nada excepto SSH.
e ssh
no se puede vincular al puerto 80, intente cambiar el primer puerto a un número distinto y acceda a él desde allí en localhost. Aún hará un túnel al puerto 80 en la máquina remota. Esta conexión se mantiene hasta que salga ssh
. Si desea ejecutarlo en segundo plano, Utilizzare il -f
bandiera.
Si solo desea que phpMyAdmin escuche en localhost, puede editar /etc/apache2/conf-enabled/phpmyadmin.conf
y agregue las siguientes líneas al Directory
bloccare:
Order deny,allow Deny from all Allow from 127.0.0.1
Esto impedirá que cualquier cosa, excepto localhost, acceda a la instalación de phpMyAdmin, aún cuando aún necesitará que el puerto 80 essere aperto sul firewall per consentire il traffico regolare.
Opzione 2: blocca Apache e usa una VPN
Se è necessario consentire l'accesso a più persone senza concedere l'accesso SSH, puoi configurare Apache per ascoltare sull'IP privato della tua macchina e accettare solo connessioni dallo stesso cloud. Funziona concretamente bene con servizi come AWS VPC, dove ogni server che avvii viene creato in una rete virtuale.
Per trovare il tuo IP privato, può eseguire ifconfig
e cerca il inet
indirizzo sulla tua scheda di rete principale:
Esta dirección además es visible desde el Consola de AWS EC2. Una vez que haya copiado la dirección, Un reggiseno /etc/apache2/ports.conf
y editar los tres Listen
directivas para escuchar en la IP privada:
Ascolta 172.31.87.118:8 <IfModule ssl_module> Ascolta 172.31.87.118:443 </IfModulo> <IfModule mod_gnutls> Ascolta 172.31.87.118:443 </IfModulo>
In alternativa, si solo desea proteger phpMyAdmin, puede editar /etc/apache2/conf-enabled/phpmyadmin.conf
y solo permitir desde la IP privada:
Order deny,allow Deny from all Allow from 172.31.87.118
Y reinicie Apache.
Ora, para entrar a phpMyAdmin, avrà bisogno configurar un servidor VPN como OpenVPN. Ciò ti consentirà di incanalare il tuo computer client nel cloud privato virtuale in cui vengono eseguiti i tuoi server Web e di accedere al server che esegue phpMyAdmin sull'IP privato come se fosse un altro server.. In ogni caso, dovrai configurare le impostazioni del firewall per consentire l'accesso dal server OpenVPN all'istanza phpMyAdmin.
Opzione 3: Apache sicuro con HTTPS e autenticazione di base
Se hai davvero bisogno di usare il DNS pubblico e avere il tuo server raggiungibile, puoi usare l'autenticazione di base con Apache. Esta es simplemente otra contraseña frente a phpMyAdmin que evita que personas externas realicen solicitudes a la aplicación phpMyAdmin. Puede utilizar esto junto con las otras opciones en esta lista, dado que es solo una capa adicional de defensa.
Cree un nuevo archivo de contraseña con htpasswd
, que ya debería estar instalado junto con Apache (ma, está en apache2-utils
):
sudo htpasswd /etc/apache2/.htpasswd phpadmin
Esto le posibilita determinar una nueva contraseña para el usuario. phpadmin
y lo almacena en /etc/apache2/.htpasswd
.
Aprire /etc/apache2/conf-enabled/phpmyadmin.conf
y configúrelo para utilizar la autenticación básica con el archivo de contraseña recién creado:
AuthType Basic AuthName "Restricted Content" AuthUserFile /etc/apache2/.htpasswd Require valid-user
Reinicie Apache con:
sudo service apache2 riavvio
Y cuando intente entrar a phpMyAdmin en su navegador, se le pedirá un nombre de usuario y contraseña. Paga in phpadmin
y la contraseña que creó, y se le debe permitir el acceso. Caso opposto, todo lo que verá es un 401 Unauthorized
Rispondere.