Comment installer phpMyAdmin en toute sécurité

0
183

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

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

Habituellement, vous auriez 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 une application s'exécutait également sur ce serveur, elle communiquerait directement. Il n'y a aucun moyen pour un attaquant d'accéder à moins de cracker 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 en 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.

Publicité
< p>Après cela, vous pouvez installer phpMyAdmin comme d'habitude. Lors de l'installation, vous serez invité à saisir un mot de passe de l'utilisateur administrateur de la base de données (que vous devriez avoir défini lors de l'installation de mysql_secure_installation) et un nouveau mot de passe pour sécuriser phpMyAdmin. 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 cependant, aucun attaquant ne devrait même avoir la chance de deviner votre mot de passe, vous voudrez donc mettre phpMyAdmin derrière quelque chose d'autre 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 qu'à un accès utilisateur unique, en particulier pour les utilisateurs uniques disposant d'une administration complète. accès à 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 exécuté sur votre serveur, écoutant sur le port 80. Si vous tunneliez ce port, vous pourriez y accéder en allant à :

https://localhost:80/

… dans n'importe quel navigateur Web. Dans un sens, c'est presque comme si Apache s'exécutait 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, qu'il ne s'exécute pas sur le port standard, car cette méthode 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 sur Internet. Ouvrez /etc/apache2/ports.conf et modifiez les trois instructions d'écoute pour n'écouter que sur localhost (alias 127.0.0.1) :

Listen 127.0.0.1:80 <IfModule ssl_module> Écoutez 127.0.0.1:443 </IfModule> <IfModule mod_gnutls> Écoutez 127.0.0.1:443 </IfModule>

Redémarrez Apache avec :

sudo service apache2 restart Publicité

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

ssh -L 80:localhost:80 user@server

Ensuite, vous pouvez accéder à phpMyAdmin à partir de 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 ne peut pas 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 tunnelisé 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 l'indicateur -f.

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

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 permettre un trafic régulier.

Option 2 : Verrouillez Apache et utilisez un VPN

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

Publicité

Pour trouver votre adresse IP privée, vous pouvez exécuter ifconfig et rechercher l'adresse inet sur votre adaptateur réseau principal :

Cette adresse est également visible depuis la console AWS EC2. Une fois l'adresse copiée, ouvrez /etc/apache2/ports.conf et modifiez les trois directives d'écoute pour écouter sur l'adresse IP privée :

Écouter 172.31.87.118:8 <IfModule ssl_module> Écoutez 172.31.87.118:443 </IfModule> <IfModule mod_gnutls> Écoutez 172.31.87.118:443 </IfModule>

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 :

Refuser l'ordre, autoriser le refus de tous Autoriser à partir de 172.31. 87.118

Et redémarrez Apache.

Maintenant, pour accéder à phpMyAdmin, vous devez configurer un serveur VPN comme OpenVPN. Cela vous permettra de tunneler 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 vos paramètres de pare-feu pour autoriser l'accès du serveur OpenVPN à l'instance phpMyAdmin.

Option 3 : Secure Apache avec HTTPS et authentification de base

Si vous avez vraiment besoin d'utiliser un DNS public et que votre serveur soit 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 personnes extérieures de faire des requêtes à l'application phpMyAdmin. Vous pouvez l'utiliser avec les autres options de cette liste, car c'est juste une couche de défense supplémentaire.

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

sudo htpasswd /etc/apache2/.htpasswd phpadmin Advertisement

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

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

AuthType Basic AuthName ” Contenu restreint” 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, vous demandé un nom d'utilisateur et un mot de passe. Entrez phpadmin et le mot de passe que vous avez créé, et vous devriez être autorisé à y accéder. Sinon, vous ne verrez qu'une réponse 401 non autorisée.