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'administrateur de la base de données (que vous auriez dû définir lors de 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 cela 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 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, 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.conf
et modifiez les trois instructions d'écoute pour n'écouter que sur localhost (aka 127.0.0.1
):
Écouter 127.0.0.1:80Écouter 127.0.0.1:443 Écouter 127.0.0.1:443
Redémarrez Apache avec:
redémarrage du service sudo apache2
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 utilisateur @ serveur
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 Annuaire
bloquer:
Commander refuser, autoriser Refuser de tous Autoriser à partir de 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 l'accès SSH, vous pouvez configurer Apache pour écouter sur l'adresse IP privée de votre machine et n'accepter que 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 le Console AWS EC2. Une fois que vous avez copié l'adresse, ouvrez /etc/apache2/ports.conf
et éditez les trois Ecoutez
directives à écouter sur l'IP privée:
Écoutez 172.31.87.118:8Écoutez 172.31.87.118:443 Écoutez 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:
Commander refuser, autoriser Refuser de tous Autoriser à partir de 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 entendu, 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 l'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.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 Exiger un utilisateur valide
Redémarrez Apache avec:
redémarrage du service sudo apache2
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 Non autorisé
réponse.