web-dev-qa-db-fra.com

Comment sécuriser phpmyadmin

OK, donc j'ai plusieurs sites sur un vps avec des certificats ssl. J'ai la configuration de sécurité mod ainsi que tripwire. Ma question concerne ensuite la sécurité de phpmyadmin. Si mon adresse IP est 123.123.123.123, je peux accéder à phpmyadmin à l'aide de 123.123.123.123/mypmyadmin-IHaveChangedThisURL.

Et même si j'ai changé l'URL de phpmyadmin, phpmyadmin est toujours accessible si vous pouvez trouver l'URL.

J'ai ajouté un fichier html vierge au répertoire racine et aucun index de répertoire n'est donc donné à l'aide du nom d'hôte vps ou de l'adresse IP vps.

Y a-t-il autre chose que je puisse faire pour protéger l'utilisation de l'IP et tenter d'obtenir phpmyadmin, etc.?

Toute orientation appréciée. Merci.

4
Hawk007

Plusieurs choses pourraient être faites. Je vais expliquer mes idées et la manière dont elles pourraient être mises en œuvre dans Apache2.


1. Utilisez la connexion HTTPS pour protéger vos données contre le sniffing


2. Changer l'URI de PhpMyAdmin

Pour modifier l'URI, dans la configuration par défaut, vous devez éditer /etc/phpmyadmin/Apache.conf et modifier la première partie (/phpmyadmin) de cette directive:

Alias /phpmyadmin /usr/share/phpmyadmin

Redémarrez Apache et vous pourrez accéder à PhpMyAdmin via le nouvel URI.


3. Lancez PhpMyAdmin sur un port différent

Voici un manuel étape par étape: Comment exécuter PhpMyAdmin sur un port différent . N'oubliez pas d'ouvrir ce port dans le pare-feu.


4. Accédez à PhpMyAdmin uniquement localement via le tunnel SSH

Exécutez PhpMyAdmin sur un port différent. Supposons qu'il s'agisse du port 99. Fermez ce port dans le pare-feu. Ensuite, établissez une connexion SSH avec une commande similaire à:

ssh -fTN -R 99:localhost:99 <user>@<domain>or<ip>
  • Cette commande créera ssh tunnel , où le port -R99 distant est transmis au port local 99 sur le localhost (127.0.0.1).
  • Les options -fTN pousseront la connexion en arrière-plan.

Ensuite, PhpMyAdmin devrait être accessible via le navigateur Web de votre machine locale à l’URL http://localhost:99/. Plus d'idées pourraient être trouvées ici:


5. Protégez le chemin URI PhpMyAdmin via l'authentification par mot de passe

Plus de détails peuvent être trouvés dans ce manuel d'Apache: Authentification et autorisation . Le package Apache2-utils doit être installé. En bref, les étapes sont les suivantes:

  • Créez un dossier en dehors de /var/www, où le fichier de mots de passe sera conservé. Puis générez le fichier de mot de passe. Supposons que le nom de ce nouveau dossier est /var/www-auth:

    $ Sudo mkdir /var/www-auth
    $ cd /var/www-auth
    $ Sudo htpasswd -c .htpasswd.phpmyadmin <user>
    New Password: *********
    Re-Type New Password: *********
    Adding Password For User <user>
    
    • .htpasswd.phpmyadmin est le nom du fichier dans lequel le mot de passe sera stocké.
    • user est le nom de connexion qui sera utilisé.
    • ********* est le mot de passe :)
    • -c signifie créer un nouveau fichier. Si cette option est omise, la commande htpasswd essaiera d’ajouter le nouveau login name à un .htpasswd.file existant.
  • Modifiez le type d'authentification PhpMyAdmin en modifiant le /etc/phpmyadmin/Apache.conf de cette manière (ou créez le fichier .htaccess):

        <Directory /usr/share/phpmyadmin>
        .....
            <IfModule mod_authz_core.c>
                <IfModule mod_authn_file.c>
                    AuthType Basic
                    AuthName "The name of the authentication form - type some user and password hints"
                    AuthUserFile /var/www-auth/.htpasswd.phpmyadmin
                </IfModule>
                Require valid-user
            </IfModule>
        .....
        </Directory>
    
  • Activez les modules et redémarrez Apache2 pour appliquer la nouvelle configuration:

        Sudo a2enmod authz_core authz_user authn_file
        Sudo systemctl restart Apache2.service
    
  • Maintenant, pour accéder à l'URI de PhpMyAdmin, vous devez entrer le nom de connexion user et son password.


6. Protégez le chemin URI PhpMyAdmin via l’authentification à 2 facteurs (2FA):

  • Suivez les étapes 1 et 3 de ce manuel pour générer le fichier .google_authenticator, situé dans votre répertoire $HOME. À l'étape 4 est décrite comment générer des codes d'authentification.

  • Créez un nouveau répertoire sous /var/www-auth. Supposons que le nom de ce nouveau dossier est google_authenticator:

    Sudo mkdir -p /var/www-auth/google_authenticator
    
  • Copiez le fichier $HOME/.google_authenticator dans ce répertoire et modifiez ses autorisations (il doit être lisible pour www-data):

    Sudo cp $HOME/.google_authenticator /var/www-auth/google_authenticator/user
    Sudo chown www-data:www-data /var/www-auth/google_authenticator/user
    

    Veuillez noter que le nom du fichier détermine le nom de connexion! Le nom du fichier sera utilisé comme nom d’utilisateur lors de la connexion à votre site Web sécurisé.

  • Modifiez le nouveau fichier en ajoutant la directive " PASSWORD=qwerty, où qwerty est le nouveau mot de passe de connexion.

     E3CY3TNSNBXXXXXX 
     "RESETTING_TIME_SKEW ... 
    " RATE_LIMIT 3 30 ... 
     "WINDOW_SIZE 17 
    " DISALLOW_REUSE 48885555 ... 
     "TOTP_AUTH 
    "MOT DE PASSE = qwerty
     4567 ... 
    
  • Installez mod_authn_google pour Apache2. Malheureusement, ce module n’est pas disponible dans le référentiel d’Ubuntu, mais nous pouvons l’obtenir de ce référentiel . Les étapes sont les suivantes: (1) accédez à votre Downloads, (2) téléchargez le package dba-apa24-mod_authn_google-r22... .rpm , (3) extrayez mod_authn_google.so, (4) placez le fichier dans /usr/lib/Apache2/modules/, (5) accordez les autorisations appropriées, ( 6) Créer un fichier de chargement de module:

    cd $HOME/Downloads
    wget http://download.opensuse.org/repositories/home:/csbuild:/DBA/RedHat_RHEL-7/x86_64/dba-apa24-mod_authn_google-r22-1.1.x86_64.rpm
    
    rpm2cpio dba-apa24-mod_authn_google-r22-1.1.x86_64.rpm | cpio -iv --to-stdout ./DBA/Apache24/WWW/2.4.x/modules/mod_authn_google-r22.so > mod_authn_google.so
    
    Sudo mv mod_authn_google.so /usr/lib/Apache2/modules/
    Sudo chown root:root /usr/lib/Apache2/modules/mod_authn_google.so
    Sudo chmod g-w /usr/lib/Apache2/modules/mod_authn_google.so
    
    echo "LoadModule authn_google_module /usr/lib/Apache2/modules/mod_authn_google.so" | Sudo tee /etc/Apache2/mods-available/authn_google.load
    
    Sudo a2enmod authn_google
    
  • Modifiez le type d'authentification PhpMyAdmin en modifiant le /etc/phpmyadmin/Apache.conf de cette manière (ou créez le fichier .htaccess):

        <Directory /usr/share/phpmyadmin>
        .....
            <IfModule mod_authz_core.c>
                <IfModule mod_authn_google.c>
                    AuthType Basic
                    AuthName "The name of the authentication form - type some user and password hints"
                    AuthBasicProvider "google_authenticator"
                    GoogleAuthUserPath /var/www-auth/google_authenticator
                    GoogleAuthCookieLife 3600
                    GoogleAuthEntryWindow 2
                </IfModule>
                Require valid-user
            </IfModule>
        .....
        </Directory>
    
  • Activez les modules et redémarrez Apache2 pour appliquer la nouvelle configuration:

        Sudo a2enmod authz_core authz_user authn_google
        Sudo systemctl restart Apache2.service
    
  • Maintenant, pour accéder à l'URI de PhpMyAdmin, vous devez entrer le nom de connexion user, son password et ses 6 chiffres token code:

    enter image description here


7. Utiliser ModSecurity pour Apache

Avec ModSecurity, vous pouvez ajouter des restrictions plus souples à l'URI de PhpMyAdmin. Dans cette réponse , sous la section "Règles de sécurité ModS>> SAS > Iptables ", j'ai brièvement décrit comment créer des règles personnalisées pour ModSecurity.

3
pa4080