Vous êtes ici : Accueil / Debian GNU/Linux / Applications Web / Administration / Afficher les statuts d'un serveur

Afficher les statuts d'un serveur

Par Pierre-Yves Landuré Dernière modification 11/11/2017 09:29

Apache 2, PHP-FPM, APC, et beaucoup d'autres outils fournissent des outils de statistiques d'utilisation accessibles par le web. Les informations fournies par ces statistiques sont sensibles. Il est important d'en protéger l'accès. Ce guide propose la mise en place d'un sous-domaine sécurisé dédié à l'affichage des statuts du serveur HTTP.

Ce guide est testé sur:

  • Debian 6.0 Squeeze
  • Debian 7.0 Wheezy
  • Debian 9.0 Stretch

Prérequis

Ce guide nécessite:

    Paramètres

    Renseignez le nom de domaine où seront disponibles les statuts (ajustez la valeur graissée à votre configuration):

    domain="status.domain.com"

    Renseignez le nom du certificat SSL à utiliser pour chiffrer l'application avec HTTPS (créé via la procédure Créer un certificat SSL / TLS sur Debian ou via Let's Encrypt) (optionnel, recommandé):

    sslKeyName="auto

    Si vous souhaitez que les statuts apparaissent dans un sous-dossier du domaine, renseignez le sous-dossier:

    # subFolder="/status/$(command hostname --fqdn)"

    Paramètres de sécurisation

    Si vous disposez d'une connexion Internet avec adresse IP fixe, renseignez votre adresse IP (optionnel):

    # userFixedIp="xx.xx.xx.xx"

    Vous pouvez obtenir votre adresse IP actuelle sur le site monip.org.

    Renseignez un nom d'utilisateur utilisé lorsque vous n'êtes pas à votre domicile/travail (optionnel, recommandé):

    # userName="username"

    Installation

    Détectez le proxy de commande (command ou sudo):

    cmdProxy='command'
    command type -f 'sudo' &>'/dev/null' && cmdProxy='sudo'

    Calculez le chemin installation:

    installPath="/opt/apache2/${domain}"

    Préparation de l'environnement

    Installez les outils nécessaires:

    ${cmdProxy} apt-get install apg apache2-utils

    Créez le dossier destiné à contenir les fichiers de la page de statuts:

    ${cmdProxy} mkdir -p "${installPath}"

    Ajoutez un fichier listant les statuts disponibles:

    ${cmdProxy} tee "/opt/apache2/${domain}/index.html" \
    <<< "<html><head><title>$(command hostname --fqdn) servers status</title></head><body>
    <h1>$(command hostname --fqdn) server status:</h1>
    <ul>
    </ul>
    </body></html>"

    Configuration du serveur HTTP

    Détectez les options de protection spécifiées:

    command test "${userName}" = "username" && userName=""
    command test "${userFixedIp}" = "xx.xx.xx.xx" && userFixedIp=""

    Générez un mot de passe aléatoire pour votre utilisateur:

    command test -n "${userName}" && userPassword="$(command apg -q -a 0 -n 1 -M NCL)"

    Créez le dossier destiné à contenir le fichier des mots de passe:

    command test -n "${userName}" && ${cmdProxy} mkdir -p '/etc/apache2/passwords'

    Créez le fichier de mot de passe pour votre domaine:

    command test -n "${userName}" && ${cmdProxy} htpasswd -cb "/etc/apache2/passwords/${domain}.pwd" "${userName}" "${userPassword}"

    Créez la configuration de protection du site selon les paramètres fournis:

    if [ -n "${userName}" ]; then
      security="
    # Protect default access
    <IfVersion < 2.4>
        Order deny,allow
        Deny from all

       # Allow access from user main Internet connexion
        #Allow from ${userFixedIp}/32
    </IfVersion>

    <IfVersion >= 2.4>
         # Allow access from user main Internet connexion
        #Require ip ${userFixedIp}
    </IfVersion>

        # Auth configuration
        # Allow auth either by user, or by IP
      Satisfy any

        # We enable password authentication
        AuthType Basic
        AuthName \"${domain} Apache 2 status pages\"
        AuthUserFile /etc/apache2/passwords/${domain}.pwd
        Require valid-user"
    else
    if [ -n "${userFixedIp}" ]; then
        security="
        # Protect default access
    <IfVersion < 2.4>
        Order deny,allow
        Deny from all

        # Allow access from user main Internet connexion
         #Allow from ${userFixedIp}/32
    </IfVersion>

    <IfVersion >= 2.4>
         # Allow access from user main Internet connexion
        #Require ip ${userFixedIp}
    </IfVersion>"
      else
        security="
        # No protection on access
     <IfVersion < 2.4>
        Order deny,allow
        Allow from all
    </IfVersion>

    <IfVersion >= 2.4>
    Require all granted
    </IfVersion>"
    fi
    fi

    Déterminez l'option SSL:

    sslOption=""
    if [[ -n "${sslKeyName}" && ( -e "/etc/ssl/private/${sslKeyName}.key" || "${sslKeyName}" = 'auto' ) ]]; then
      sslOption="--ssl=${sslKeyName}"
    fi

    Créez le fichier de configuration Apache 2 pour le domaine:

    ${cmdProxy} a2tools --template="custom" ${sslOption} "${domain}" "
    DocumentRoot ${installPath}

    <Location />
    ${security}
    </Location>
    #########################################################
    ### STATUS PAGES CONFIGURATION START (do not remove). ###

    ### STATUS PAGES CONFIGURATION END (do not remove). ###
    #########################################################
    "

    Détectez le fichier de configuration du site de statut:

    statusVhost="$(command grep -rl \
        "STATUS PAGES CONFIGURATION END" \
        '/etc/apache2/sites-available')"

    Activez l'autorisation de l'adresse IP fournie (si nécessaire):

    if [ -n "${userFixedIp}" ]; then
      ${cmdProxy} sed -i \
    -e "s/#Allow from ${userFixedIp}/Allow from ${userFixedIp}/" \
    -e "s/#Require ip ${userFixedIp}/Require ip ${userFixedIp}/" \
        "${statusVhost}"
    fi

    Vérifiez la nouvelle configuration d'Apache 2:

    ${cmdProxy} apache2ctl -t

    Rechargez la configuration d'Apache 2:

    ${cmdProxy} service apache2 reload

    La commande qui suit affiche les paramètres de connexion:

    echo "URL: https://${domain}/
    Identifiant      : ${userName}
    Mot de passe : ${userPassword}"

    Accès via un sous-dossier

    Détectez le fichier de configuration du site de statut:

    statusVhost="$(command grep --max-count=1 -rl \
        "STATUS PAGES CONFIGURATION END" \
        '/etc/apache2/sites-available')"

    Appliquez la configuration:

    if [ -n "${subFolder}" ]; then
      ${cmdProxy} sed -i -e "/DocumentRoot/a\\
      Alias ${subFolder} ${installPath}\\
    RewriteCond %{REQUEST_URI} \!^(/php5.fastcgi)*/php-fpm-ping\\
    RewriteCond %{REQUEST_URI} \!^(/php5.fastcgi)*/php-fpm-status\\
    RewriteCond %{REQUEST_URI} \!^(/php5.fastcgi)*${subFolder}\\
    RewriteRule ^/(.*) ${subFolder}/\$1 [R=301,L]" \
    ${statusVhost}
    fi

    Vérifiez la nouvelle configuration d'Apache 2:

    ${cmdProxy} apache2ctl -t

    Rechargez la configuration d'Apache 2:

    ${cmdProxy} service apache2 reload

    Ajout des pages de statut

    • Système (phpSysInfo)

      Affichez les informations sur les ressources systèmes.

    • Apache 2

      Accédez aux statuts d'un serveur Apache 2 via une interface Web intégrée dans un espace dédié à l'état en temps réel de votre serveur.

    • PHP-FPM (FastCGI Process Manager)

      Accédez aux statuts d'un serveur PHP-FPM via une interface Web intégrée dans un espace dédié à l'état en temps réel de votre serveur.

    • Informations PHP (phpinfo())

      Affiche les informations sur la version de PHP utilisée par le serveur.

    • PHP APC (Alternative PHP Cache)

      Affichez les statistiques d'utilisation de PHP APC.

    • PHPMyAdmin

      Autorisez l'accès à PHPMyAdmin via les pages de statuts du serveur.

    • PHPPgAdmin

      Autorisez l'accès à PHPPgAdmin via les pages de statuts du serveur.

    • Google mod_pagespeed

      Accédez aux statistiques d'utilisation du module Apache 2 Google PageSpeed via une interface Web intégrée dans un espace dédié à l'état en temps réel de votre serveur.

    • HAproxy

      Accédez aux statuts d'un serveur HAproxy via une interface Web intégrée dans un espace dédié à l'état en temps réel de votre serveur.

    • Tomcat (pages d'administration)

      Accéder aux pages d'administration d'un serveur Tomcat.