Agence web » Actualités du digital » Comment installer phpMyAdmin en toute sécurité

Comment installer phpMyAdmin en toute sécurité

phpMyAdmin est un excellent outil pour gérer une base de données MySQL, mais placer l'accès à votre base de données derrière une interface Web est un problème de sécurité majeur. Voici quelques moyens d'atténuer les risques liés à l'exécution de phpMyAdmin.

Pourquoi phpMyAdmin est-il un problème de sécurité?

Habituellement, vous disposez d'une base de données qui s'exécuterait sur votre serveur et n'accepterait que les connexions de localhost ou peut-être d'un autre serveur de confiance. Si vous aviez une application également exécutée sur ce serveur, elle communiquerait directement. Il n’existe aucun moyen pour un attaquant d’accéder sans craquer l’ensemble du serveur.

phpMyAdmin contourne cela pour vous fournir une interface Web pour gérer votre base de données. C’est un outil très utile, mais c’est un désastre pour la sécurité. phpMyAdmin a un accès complet et illimité à votre base de données, car il est destiné à remplacer l'accès direct par ligne de commande. Si un attaquant accède au panneau Web, il aura accès à tout. Et phpMyAdmin n'est généralement sécurisé qu'avec un simple mot de passe.

Installez phpMyAdmin et Secure MySQL

phpMyAdmin s'exécute sur la pile LAMP (Linux, Apache, MySQL, PHP). Avant même de commencer à installer phpMyAdmin, votre instance de MySQL doit être sécurisée. MySQL fournit un utilitaire pratique pour effectuer certaines tâches de sécurité de base:

sudo mysql_secure_installation

Cela vous guidera à travers la modification du mot de passe root, la désactivation des connexions à distance et la suppression de la base de données de test.

Après cela, vous pouvez installer phpMyAdmin comme d'habitude. Au cours de l'installation, vous serez invité à saisir un mot de passe de l'utilisateur administrateur de la base de données (que vous auriez dû définir pendant mysql_secure_installation), et un nouveau mot de passe pour sécuriser phpMyAdmin avec. Assurez-vous que ce mot de passe est long et sécurisé, car c'est le dernier point de défense avant que les attaquants puissent y accéder.

Idéalement, aucun attaquant ne devrait même avoir une chance de deviner votre mot de passe, vous voudrez donc mettre phpMyAdmin derrière autre chose afin de pouvoir le sécuriser davantage.

Option 1: verrouiller Apache et utiliser la redirection de port SSH

C'est l'option la plus sécurisée, mais elle ne convient vraiment que pour un accès mono-utilisateur, en particulier pour les utilisateurs uniques qui ont un accès administratif complet à l'ensemble du serveur, car il vous oblige à vous connecter via SSH.

Le transfert de port SSH est une méthode de transfert de ports locaux vers un système distant. Par exemple, vous auriez Apache en cours d'exécution sur votre serveur, en écoutant sur le port 80. Si vous avez tunnelé ce port, vous pouvez y accéder en allant sur:

https://localhost:80/

… Dans n'importe quel navigateur Web. Dans un sens, c'est presque comme si Apache fonctionnait sur votre système. Mais le port 80 n’a pas besoin d’être ouvert sur votre serveur; tout le trafic est acheminé via le port standard 22 utilisé pour SSH. Vous devrez vous assurer que SSH est sécurisé avec des clés SSH et, idéalement, ne fonctionne pas sur le port standard, car cette méthode n'est aussi sécurisée que votre connexion SSH.

Pour ce faire, vous devez lier Apache à localhost et vous assurer qu’il n’est pas ouvert à Internet. S'ouvrir /etc/apache2/ports.confet modifiez les trois instructions d'écoute pour n'écouter que sur localhost (aka 127.0.0.1):

Listen 127.0.0.1:80


  Listen 127.0.0.1:443



 Listen 127.0.0.1:443

Redémarrez Apache avec:

sudo service apache2 restart

Et phpMyAdmin devrait être inaccessible. Ceci est attendu. Une fois Apache configuré, vous pouvez tunneliser le port 80 à l'aide de la commande suivante:

ssh -L 80:localhost:80 user@server

Ensuite, vous pouvez accéder à phpMyAdmin depuis localhost:80 dans n'importe quel navigateur Web. Pendant ce temps, votre serveur peut être configuré avec un pare-feu strict pour interdire tout sauf SSH.

Si ssh impossible de se lier au port 80, essayez de remplacer le premier port par un numéro différent et d’y accéder à partir de là sur localhost. Il sera toujours tunnelé vers le port 80 sur la machine distante. Cette connexion est maintenue jusqu'à ce que vous quittiez ssh. Si vous souhaitez l'exécuter en arrière-plan, utilisez le -f drapeau.

Si vous voulez que phpMyAdmin écoute uniquement sur localhost, vous pouvez à la place modifier /etc/apache2/conf-enabled/phpmyadmin.conf et ajoutez les lignes suivantes au Directory bloquer:

  Order deny,allow
  Deny from all
  Allow from 127.0.0.1

Cela empêchera tout sauf localhost d'accéder à l'installation de phpMyAdmin, bien que vous ayez toujours besoin du port 80 ouvert dans votre pare-feu pour autoriser le trafic régulier.

Option 2: verrouiller Apache et utiliser un VPN

Si vous devez autoriser l'accès à plusieurs personnes sans donner un accès SSH, vous pouvez configurer Apache pour écouter sur l'adresse IP privée de votre machine et accepter uniquement les connexions du même cloud. Cela fonctionne particulièrement bien avec des services comme AWS VPC, où chaque serveur que vous lancez est créé dans un réseau virtuel.

Pour trouver votre adresse IP privée, vous pouvez exécuter ifconfig et recherchez le inet adresse sur votre carte réseau principale:

Cette adresse est également visible depuis la console AWS EC2. Une fois que vous avez copié l'adresse, ouvrez /etc/apache2/ports.confet éditez les trois Listen directives à écouter sur l'IP privée:

Listen 172.31.87.118:8


  Listen 172.31.87.118:443



  Listen 172.31.87.118:443

Alternativement, si vous souhaitez simplement sécuriser phpMyAdmin, vous pouvez modifier /etc/apache2/conf-enabled/phpmyadmin.conf et autoriser uniquement à partir de l'adresse IP privée:

Order deny,allow
Deny from all
Allow from 172.31.87.118

Et redémarrez Apache.

Désormais, pour accéder à phpMyAdmin, vous devez configurer un serveur VPN comme OpenVPN. Cela vous permettra de tunneliser votre ordinateur client vers le cloud privé virtuel dans lequel vos serveurs Web s'exécutent et d'accéder au serveur exécutant phpMyAdmin sur l'adresse IP privée comme si vous étiez un autre serveur. Bien sûr, vous devrez configurer les paramètres de votre pare-feu pour autoriser l'accès du serveur OpenVPN à l'instance phpMyAdmin.

Option 3: sécuriser Apache avec HTTPS et authentification de base

Si vous avez vraiment besoin d'utiliser un DNS public et d'avoir votre serveur accessible, vous pouvez utiliser l'authentification de base avec Apache. Il s'agit simplement d'un autre mot de passe devant phpMyAdmin qui empêche les étrangers de faire des requêtes à l'application phpMyAdmin. Vous pouvez l'utiliser avec les autres options de cette liste, car il ne s'agit que d'une couche de défense supplémentaire.

Créez un nouveau fichier de mots de passe avec htpasswd, qui devrait déjà être installé avec Apache (sinon, il est dans apache2-utils):

sudo htpasswd /etc/apache2/.htpasswd phpadmin

Cela vous permet de définir un nouveau mot de passe pour l'utilisateur phpadmin et le stocke dans /etc/apache2/.htpasswd.

S'ouvrir /etc/apache2/conf-enabled/phpmyadmin.confet configurez-le pour utiliser l'authentification de base avec le fichier de mot de passe nouvellement créé:

AuthType Basic
AuthName "Restricted Content"
AuthUserFile /etc/apache2/.htpasswd
Require valid-user

Redémarrez Apache avec:

sudo service apache2 restart

Et lorsque vous essayez d'accéder à phpMyAdmin dans votre navigateur, un nom d'utilisateur et un mot de passe vous seront demandés. Entrer phpadmin et le mot de passe que vous avez créé, et vous devriez être autorisé à y accéder. Sinon, tout ce que vous verrez est un 401 Unauthorized réponse.

★★★★★