One place for hosting & domains

      sécuriser

      Comment installer et sécuriser Grafana sur Ubuntu 20.04


      L’auteur a choisi le COVID-19 Relief Fund pour recevoir un don dans le cadre du programme Write for DOnations.

      Introduction

      Grafana est un outil de visualisation et de surveillance de données open-source qui s’intègre à des données complexes provenant de sources telles que Prometheus, InfluxDB, Graphite et ElasticSearch. Grafana vous permet de créer des alertes, des notifications et des filtres ad hoc pour vos données tout en facilitant la collaboration avec vos coéquipiers grâce aux fonctionnalités de partage intégrées.

      Dans ce tutoriel, vous allez installer Grafana et le sécuriser avec un certificat SSL et un proxy inverse Nginx. Une fois Grafana mis en place, vous aurez la possibilité de configurer l’authentification des utilisateurs via GitHub, ce qui vous permettra de mieux organiser les autorisations de vos équipes.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin de :

      Étape 1 — Installation de Grafana

      Au cours de cette première étape, vous allez installer Grafana sur votre serveur Ubuntu 20.04. Vous pouvez installer Grafana soit en le téléchargeant directement à partir de son site web officiel soit en passant par un référentiel APT. Comme un référentiel APT facilite l’installation et la gestion des mises à jour de Grafana, vous utiliserez cette méthode dans ce tutoriel.

      Téléchargez la clé GPG de Grafana avec wget, puis acheminez la sortie à apt-key Cela ajoutera la clé à la liste des clés de confiance de votre installation APT, ce qui vous permettra de télécharger et de vérifier le paquet Grafana signé par GPG :

      • wget -q -O - https://packages.grafana.com/gpg.key | sudo apt-key add -

      Dans cette commande, l’option -q désactive le message de mise à jour de l’état de wget, et -O génère le fichier que vous avez téléchargé sur le terminal. Ces deux options garantissent que seuls le contenu du fichier téléchargé sont acheminés sur apt-key

      Ensuite, ajoutez le référentiel Grafana à vos sources APT :

      • sudo add-apt-repository "deb https://packages.grafana.com/oss/deb stable main"

      Actualisez votre cache APT pour mettre à jour vos listes de paquets :

      Vous pouvez maintenant passer à l’installation :

      Une fois que Grafana est installé, utilisez systemctl pour démarrer le serveur Grafana :

      • sudo systemctl start grafana-server

      Ensuite, vérifiez que Grafana fonctionne en vérifiant l’état du service :

      • sudo systemctl status grafana-server

      Vous recevrez un résultat similaire à celui-ci :

      Output

      ● grafana-server.service - Grafana instance Loaded: loaded (/lib/systemd/system/grafana-server.service; disabled; vendor preset: enabled) Active: active (running) since Thu 2020-05-21 08:08:10 UTC; 4s ago Docs: http://docs.grafana.org Main PID: 15982 (grafana-server) Tasks: 7 (limit: 1137) ...

      Ce résultat contient des informations sur le processus de Grafana, y compris son statut, l’identificateur principal du processus (PID), et plus encore. active (running) montre que le processus fonctionne correctement.

      Enfin, activez le service pour démarrer automatiquement Grafana au boot :

      • sudo systemctl enable grafana-server

      Vous recevrez le résultat suivant :

      Output

      Synchronizing state of grafana-server.service with SysV service script with /lib/systemd/systemd-sysv-install. Executing: /lib/systemd/systemd-sysv-install enable grafana-server Created symlink /etc/systemd/system/multi-user.target.wants/grafana-server.service → /usr/lib/systemd/system/grafana-server.service.

      Cela confirme que systemd a créé les liens symboliques nécessaires pour démarrer Grafana automatiquement.

      Grafana est maintenant installé et prêt à être utilisé. Ensuite, vous allez sécuriser votre connexion à Grafana avec un proxy inverse et un certificat SSL.

      Étape 2 — Configuration du proxy inverse

      L’utilisation d’un certificat SSL garantira la sécurisation de vos données en cryptant la connexion à destination et en provenance de Grafana. Mais, pour utiliser cette connexion, vous devrez d’abord reconfigurer Nginx comme proxy inverse pour Grafana.

      Ouvrez le fichier de configuration Nginx que vous avez créé lorsque vous avez configuré le bloc serveur Nginx avec Let’s Encrypt dans les Conditions préalables. Vous pouvez utiliser n’importe quel éditeur de texte, mais pour ce tutoriel, nous utiliserons nano :

      • sudo nano /etc/nginx/sites-available/your_domain

      Localisez le bloc suivant :

      /etc/nginx/sites-available/your_domain

      ...
          location / {
              try_files $uri $uri/ =404;
          }
      ...
      

      Comme vous avez déjà configuré Nginx pour communiquer via SSL et que tout trafic web vers votre serveur passe déjà par Nginx, vous n’avez qu’à indiquer à Nginx de transmettre toutes les requêtes à Grafana, qui fonctionne sur le port 3000 par défaut.

      Supprimez la ligne try_files existante dans ce bloc de localisation et remplacez-le par l’option proxy_pass :

      /etc/nginx/sites-available/your_domain

      ...
          location / {
              proxy_pass http://localhost:3000;
          }
      ...
      

      Ceci fera correspondre le proxy au port approprié. Une fois que vous avez terminé, enregistrez et fermez le fichier en appuyant sur CTRL+X, Y, puis ENTER si vous utilisez nano.

      Maintenant, testez les nouveaux paramètres pour vous assurer que tout est configuré correctement :

      Vous recevrez le résultat suivant :

      Output

      nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful

      Enfin, activez les modifications en rechargeant Nginx :

      • sudo systemctl reload nginx

      Vous pouvez maintenant accéder à l’écran de connexion Grafana par défaut en pointant votre navigateur web sur https://your_domain. Si vous ne parvenez pas à joindre Grafana, vérifiez que votre pare-feu est configuré pour autoriser le trafic sur le port 443 et ensuite retracez les instructions précédentes.

      La connexion à Grafana étant cryptée, vous pouvez maintenant mettre en place des mesures de sécurité supplémentaires, en commençant par changer les identifiants administratifs par défaut de Grafana.

      Étape 3 — Mise à jour des identifiants

      Comme chaque installation Grafana utilise les mêmes identifiants administratifs par défaut, il est préférable de changer vos informations de connexion dès que possible. Au cours de cette étape, vous allez mettre à jour les identifiants pour améliorer la sécurité.

      Commencez par aller sur https://your_domain à partir de votre navigateur web. Cela fera apparaître l’écran de connexion par défaut où vous verrez le logo Grafana, un formulaire vous demandant de saisir une adresse e-mail (ou un nom d’utilisateur) et un mot de passe, un bouton de connexion et un lien Mot de passe oublié ?.

      Connexion à Grafana

      Entrez admin dans les champs Email ou nom d’utilisateur et Mot de passe puis cliquez sur le Bouton Connexion.

      À l’écran suivant, vous serez invité à mieux sécuriser votre compte en changeant le mot de passe par défaut :

      Changer de mot de passe

      Entrez le mot de passe que vous souhaitez commencer à utiliser dans les champs Nouveau mot de passe et Confirmez le nouveau mot de passe.

      À partir de là, vous pouvez cliquer sur Envoyer pour enregistrer les nouvelles informations ou appuyez sur Passer pour sauter cette étape. Si vous sautez, vous serez invité à changer le mot de passe la prochaine fois que vous vous connecterez.

      Pour augmenter la sécurité de votre configuration Grafana, cliquez sur Envoyer. Vous accédez au tableau de bord Bienvenue à Grafana :

      Tableau de bord d'accueil

      Vous avez maintenant sécurisé votre compte en changeant les identifiants par défaut. Ensuite, vous allez apporter des modifications à votre configuration Grafana pour que personne ne puisse créer un nouveau compte Grafana sans votre permission.

      Étape 4 — Désactiver les enregistrements et l’accès anonyme à Grafana

      Grafana offre des options qui permettent aux visiteurs de créer des comptes d’utilisateurs pour eux-mêmes et de prévisualiser les tableaux de bord sans s’enregistrer. Lorsque Grafana n’est pas accessible via Internet ou lorsque vous travaillez avec des données accessibles au public comme des statuts du service, vous pouvez vouloir autoriser ces fonctionnalités. Cependant, lorsque vous utilisez Grafana en ligne pour travailler avec des données sensibles, l’accès anonyme peut poser un problème de sécurité. Pour résoudre ce problème, modifiez la configuration de Grafana.

      Commencez par ouvrir le fichier de configuration principal de Grafana pour l’éditer :

      • sudo nano /etc/grafana/grafana.ini

      Localisez la directive suivante allow_sign_up sous le titre [users] :

      /etc/grafana/grafana.ini

      ...
      [users]
      # disable user signup / registration
      ;allow_sign_up = true
      ...
      

      Activer cette directive avec true ajoute un bouton Sign up à l’écran de connexion ce qui permet aux utilisateurs de s’enregistrer et d’accéder à Grafana.

      Désactiver cette directive avec false supprime le bouton Sign up et renforce la sécurité et la confidentialité de Grafana.

      Décommentez cette directive en supprimant le ; au début de la ligne puis en réglant l’option sur false :

      /etc/grafana/grafana.ini

      ...
      [users]
      # disable user signup / registration
      allow_sign_up = false
      ...
      

      Ensuite, localisez la directive enabled suivante sous le titre [auth.anonymous] :

      /etc/grafana/grafana.ini

      ...
      [auth.anonymous]
      # enable anonymous access
      ;enabled = false
      ...
      

      Définir enabled sur true donne aux utilisateurs non enregistrés accès à vos tableaux de bord; définir cette option sur false limite l’accès du tableau de bord aux utilisateurs enregistrés seulement.

      Décommentez cette directive en supprimant le ; au début de la ligne puis en réglant l’option sur false.

      /etc/grafana/grafana.ini

      ...
      [auth.anonymous]
      # enable anonymous access
      enabled = false
      ...
      

      Sauvegardez le fichier et quittez votre éditeur de texte.

      Pour activer les changements, redémarrez Grafana :

      • sudo systemctl restart grafana-server

      Vérifiez que tout fonctionne en vérifiant le statut service de Grafana :

      • sudo systemctl status grafana-server

      Comme auparavant, le résultat fera rapport que Grafana est actif (en cours d'exécution).

      Maintenant, pointez votre navigateur web sur https://your_domain. Pour revenir à l’écran d’inscription, amenez votre curseur sur votre avatar en bas à gauche de l’écran et cliquez sur l’option Déconnexion qui apparaît.

      Une fois que vous vous êtes déconnecté, vérifiez qu’il n’y a pas de bouton Sign up et que vous ne pouvez pas vous connecter sans saisir des identifiants de connexion.

      À ce stade, Grafana est entièrement configuré et prêt à être utilisé. Ensuite, vous pouvez simplifier le processus de connexion pour votre organisation en vous authentifiant via GitHub.

      (Facultatif) Étape 5 — Configuration d’une application GitHub OAuth

      Pour une approche alternative a l’ouverture de session, vous pouvez configurer Grafana pour une authentification via GitHub, ce qui permet un accès à tous les membres des organisations GitHub autorisées. Cela peut s’avérer particulièrement utile lorsque vous souhaitez autoriser plusieurs développeurs à collaborer et accéder aux mesures sans avoir à créer des identifiants spécifiques à Grafana.

      Commencez par vous connecter à un compte GitHub associé à votre organisation puis naviguez sur votre page profil GitHub à l’adresse https://github.com/settings/profile.

      Changez le contexte de paramétrage en cliquant sur votre nom dans la partie gauche de l’écran, puis en sélectionnant votre organisation dans le menu déroulant. Cela changera le contexte des paramètres personnels aux paramètres de l’organization.

      À l’écran suivant, vous verrez votre profil d’organisation où vous pouvez changer des paramètres comme votre nom d’affichage de l’organization, votre Email d’organisation et votre URL d’organisation.

      Comme Grafana utilise OAuth — une norme ouverte ouvert permettant à des tiers distants d’accéder à des ressources locales — ; pour authentifier des utilisateurs via GitHub, vous devrez créer une nouvelle application OAuth dans GitHub.

      Cliquez sur le lien OAuth Apps sous Paramètres du développeur sur le côté inférieur gauche de l’écran.

      Si vous n’avez pas encore d’applications OAuth associées à votre organisation sur GitHub, vous serez informé qu’il n’y a pas d’applications détenue par votre organisation. Sinon, vous verrez une liste des applications OAuth déjà connectées à votre compte.

      Cliquez sur le bouton New OAuth App pour continuer.

      À l’écran suivant, remplissez les détails suivants sur votre installation Grafana :

      • Nom de l’application – Cela vous permet de distinguer vos différentes applications OAuth les unes des autres.
      • URL de la page d’accueil – Cela indique à GitHub où trouver Grafana. Tapez https://your_domain dans ce champ, en remplaçant your_domain par votre domaine.
      • Description de l’application – Ceci fournit une description de l’objet de votre application OAuth.
      • URL de callback de l’application – Il s’agit de l’adresse où les utilisateurs seront envoyés une fois authentifiés avec succès. Pour Grafana, ce champ doit être défini sur https://your_domain/login/github.

      Gardez à l’esprit que les utilisateurs de Grafana qui se connectent via GitHub verront les valeurs que vous avez saisies dans les trois premiers champs précédents, alors assurez-vous de saisir quelque chose de significatif et approprié.

      Une fois terminé, le formulaire ressemblera à ceci :

      GitHub Register OAuth Application

      Cliquez sur le bouton vert Enregistrer l’application

      Vous allez maintenant être redirigé vers une page contenant l’ID Client et le secret Client associé à votre nouvelle application OAuth. Notez les deux valeurs, car vous devrez les ajouter au fichier de configuration principal de Grafana pour compléter la configuration.

      Avertissement : Veillez à garder votre ID Client et votre secret Client dans un endroit sécurisé et non public, car ils peuvent être utilisés comme base d’une attaque.

      Avec votre application GitHub OAuth créée, vous êtes maintenant prêt à reconfigurer Grafana pour utiliser GitHub pour l’authentification.

      (Facultatif) Étape 6 — Configuration de Grafana comme application GitHub OAuth

      Pour terminer l’authentification GitHub pour votre configuration Grafana, vous allez maintenant apporter quelques modifications à vos fichiers de configuration Grafana.

      Pour commencer, ouvrez le fichier de configuration principal de Grafana.

      • sudo nano /etc/grafana/grafana.ini

      Localisez le titre [auth.github] et décommentez cette section en supprimant le ; au début de chaque ligne sauf ;allowed_domains = et ;team_ids =, qui ne sera pas modifié dans ce tutoriel.

      Ensuite, procédez aux modifications suivantes :

      • Définissez enabled et allow_sign_up sur true. Cela activera l’Authentification GitHub et permettra aux membres de l’organisation autorisée de créer eux-mêmes des comptes. Notez que ce paramètre est différent de la propriété allow_sign_up sous [users] que vous avez changé à l’étape 4.
      • Définissez client_id et client_secret sur les valeurs que vous avez obtenues lors de la création de votre application GitHub OAuth.
      • Définissez allowed_organizations sur le nom de votre organisation pour vous assurer que seuls les membres de votre organisation peuvent s’inscrire et se connecter à Grafana.

      La configuration complète ressemblera à ceci :

      /etc/grafana/grafana.ini

      ...
      [auth.github]
      enabled = true
      allow_sign_up = true
      client_id = your_client_id_from_github
      client_secret = your_client_secret_from_github
      scopes = user:email,read:org
      auth_url = https://github.com/login/oauth/authorize
      token_url = https://github.com/login/oauth/access_token
      api_url = https://api.github.com/user
      ;allowed_domains =
      ;team_ids =
      allowed_organizations = your_organization_name
      ...
      

      Vous avez maintenant dit à Grafana tout ce dont elle a besoin de savoir sur GitHub. Pour terminer la configuration, vous devrez activer les redirections derrière un proxy inverse. Cela set fait en réglant une valeur root_url sous le titre [serveur].

      /etc/grafana/grafana.ini

      ...
      [server]
      root_url = https://your_domain
      ...
      

      Sauvegardez votre configuration et fermez le fichier.

      Ensuite, redémarrez Grafana pour activer les changements :

      • sudo systemctl restart grafana-server

      Enfin, vérifiez que le service est opérationnel.

      • sudo systemctl status grafana-server

      La sortie indiquera que le service est actif (en cours d'exécution).

      Maintenant, testez votre nouveau système d’authentification vous rendant sur https://your_domain. Si vous êtes déjà connecté à Grafana, passez votre souris sur l’avatar dans le coin inférieur gauche de l’écran, puis cliquez sur Déconnexion dans le menu secondaire qui apparaît à côté de votre nom.

      Sur la page de connexion vous verrez une nouvelle section sous le bouton Connexion original qui comprend un bouton Connexion avec GitHub avec le logo GitHub.

      Page de connexion Grafana avec GitHub

      Cliquez sur le bouton Connexion avec GitHub pour être redirigé vers GitHub, où vous allez vous connecter à votre compte GitHub et confirmerez votre intention d’autoriser Grafana.

      Cliquez sur le bouton vert Autoriser your_github_organization.

      Remarque : assurez-vous que votre compte GitHub soit membre de votre organisation approuvée et que votre adresse électronique Grafana correspond à votre adresse électronique GitHub. Si vous essayez de vous authentifier avec un compte GitHub qui n’est pas membre de votre organisation approuvée, vous obtiendrez un message Login Failed vous disant l’Utilisateur n’est pas membre de l’une des organisations requises.

      Vous allez maintenant être connecté à votre compte Grafana existant. Si un compte Grafana n’existe pas encore pour l’utilisateur sous lequel vous vous êtes connecté, Grafana créera un nouveau compte utilisateur avec des autorisations Viewer, afin que les nouveaux utilisateurs ne puissent utiliser que les tableaux de bord existants.

      Pour changer les autorisations par défaut pour les nouveaux utilisateurs, ouvrez le fichier de configuration principal de Grafana pour l’éditer.

      • sudo nano /etc/grafana/grafana.ini

      Localisez la directive auto_assign_org_role sous le titre [users], et décommentez le paramètre en supprimant le ; au début de la ligne.

      Définissez la directive sur l’une des valeurs suivantes :

      • Viewer — ne peut utiliser que les tableaux de bord existants
      • Editor — peut utiliser, modifier et ajouter des tableaux de bord
      • Admin — a la permission de tout faire

      Ce tutoriel réglera l’assigner automatique sur Viewer :

      /etc/grafana/grafana.ini

      ...
      [users]
      ...
      auto_assign_org_role = Viewer
      ...
      

      Une fois que vous avez enregistré vos modifications, fermez le fichier et redémarrez Grafana :

      • sudo systemctl restart grafana-server

      Vérifiez l’état du service :

      • sudo systemctl status grafana-server

      Comme auparavant, le statut lira actif (en cours d'exécution).

      À ce stade, vous avez entièrement configuré Grafana pour autoriser des membres de votre organisation GitHub à s’enregistrer et utiliser votre installation Grafana.

      Conclusion

      Dans ce tutoriel, vous avez installé, configuré et sécurisé Grafana, et vous avez également appris à autoriser les membres de votre organisation à s’authentifier via GitHub.

      Pour étendre votre installation Grafana actuelle, consultez la liste des tableaux de bord et des plugins officiels et de la communauté. Pour en savoir plus sur l’utilisation de Grafana en général, consultez la documentation officielle de Grafana, ou consultez nos autres tutoriels de surveillance.



      Source link

      Comment sécuriser Nginx avec Let’s Encrypt sur Ubuntu 20.04


      Introduction

      Let’s Encrypt est une autorité de certification (CA) qui fournit un moyen facile d’obtenir et d’installer des certificats TLS/SSL gratuits, permettant ainsi le cryptage HTTPS sur les serveurs web. Il simplifie le processus en fournissant un logiciel client, Certbot, qui tente d’automatiser la plupart (sinon la totalité) des étapes requises. Actuellement, l’ensemble du processus d’obtention et d’installation d’un certificat est entièrement automatisé sur Apache et Nginx.

      Dans ce tutoriel, vous allez utiliser Certbot pour obtenir un certificat SSL gratuit pour Nginx sur Ubuntu 20.04 et configurer votre certificat pour qu’il se renouvelle automatiquement.

      Ce tutoriel utilisera un fichier de configuration de serveur Nginx séparé au lieu du fichier par défaut. Nous recommandons de créer de nouveaux fichiers de blocage de serveur Nginx pour chaque domaine, car cela permet d’éviter les erreurs courantes et de conserver les fichiers par défaut comme configuration de repli.

      Conditions préalables

      Pour suivre ce tutoriel, vous aurez besoin de :

      • Un serveur Ubuntu 20.04 configuré en suivant ce tutoriel de configuration initiale du serveur pour Ubuntu 20.04, comprenant un utilisateur sudo non root et un pare-feu.

      • Un nom de domaine enregistré. Ce tutoriel utilisera example.com tout du long. Vous pouvez acheter un nom de domaine sur Namecheap, en obtenir un gratuitement avec Freenom, ou utiliser le bureau d’enregistrement de domaine de votre choix.

      • Les deux enregistrements DNS suivants ont été configurés pour votre serveur. Si vous utilisez DigitalOcean, veuillez consulter notre documentation DNS pour plus de détails sur la façon de les ajouter.

        • Un enregistrement A avec example.com​​​ pointant sur l’adresse IP publique de votre serveur.
        • Un enregistrement A avec www.example.com​​​ pointant sur l’adresse IP publique de votre serveur.
      • Nginx installé en suivant le guide Comment installer Nginx sur Ubuntu 20.04. Assurez-vous que vous disposez d’un bloc serveur pour votre domaine. Ce tutoriel utilisera /etc/nginx/sites-available/example.com à titre d’exemple.

      Étape 1 — Installation de Certbot

      La première étape de l’utilisation de Let’s Encrypt pour obtenir un certificat SSL consiste à installer le logiciel Certbot sur votre serveur.

      Installez Certbot et son plugin Nginx avec apt :

      • sudo apt install certbot python3-certbot-nginx

      Certbot est maintenant prêt à l’emploi, mais pour qu’il configure automatiquement le SSL pour Nginx, nous devons vérifier une partie de la configuration de Nginx.

      Étape 2 — Confirmation de la configuration de Nginx

      Certbot doit être capable de trouver le bon bloc serveur dans votre configuration Nginx pour pouvoir configurer automatiquement le SSL. Plus précisément, il recherche une directive server_name qui correspond au domaine pour lequel vous demandez un certificat.

      Si vous avez suivi l’étape de configuration du bloc serveur dans le tutoriel d’installation de Nginx, vous devriez avoir un bloc serveur pour votre domaine dans /etc/nginx/sites-available/example.com avec la directive server_name déjà définie de manière appropriée.

      Pour vérifier, ouvrez le fichier de configuration de votre domaine en utilisant nano ou votre éditeur de texte préféré :

      • sudo nano /etc/nginx/sites-available/example.com

      Recherchez la ligne server_name existante. Cela devrait ressembler à ceci :

      /etc/nginx/sites-available/example.com

      ...
      server_name example.com www.example.com;
      ...
      

      Si c’est le cas, quittez votre éditeur et passez à l’étape suivante.

      Si ce n’est pas le cas, mettez-le à jour pour qu’il corresponde. Ensuite, enregistrez le fichier, quittez votre éditeur et vérifiez la syntaxe de vos modifications de configuration :

      Si vous obtenez une erreur, rouvrez le fichier du bloc serveur et vérifiez s’il y a des fautes de frappe ou des caractères manquants. Une fois que la syntaxe de votre fichier de configuration est correcte, rechargez Nginx pour charger la nouvelle configuration :

      • sudo systemctl reload nginx

      Certbot peut maintenant trouver le bon bloc serveur et le mettre à jour automatiquement.

      Ensuite, mettons à jour le pare-feu pour autoriser le trafic HTTPS.

      Étape 3 — Autorisation du HTTPS à travers le pare-feu

      Si vous avez activé le pare-feu UFW, comme le recommandent les guides des conditions préalables, vous devrez ajuster les paramètres pour autoriser le trafic HTTPS. Heureusement, Nginx enregistre quelques profils avec ufw lors de l’installation.

      Vous pouvez voir les paramètres actuels en tapant :

      Il ressemblera probablement à ceci, ce qui signifie que seul le trafic HTTP est autorisé sur le serveur web :

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx HTTP ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx HTTP (v6) ALLOW Anywhere (v6)

      Pour laisser entrer en plus le trafic HTTPS, autorisez le profil Nginx Full et supprimez l’autorisation de profil HTTP Nginx redondant :

      • sudo ufw allow 'Nginx Full'
      • sudo ufw delete allow 'Nginx HTTP'

      Votre statut devrait désormais ressembler à ceci :

      Output

      Status: active To Action From -- ------ ---- OpenSSH ALLOW Anywhere Nginx Full ALLOW Anywhere OpenSSH (v6) ALLOW Anywhere (v6) Nginx Full (v6) ALLOW Anywhere (v6)

      Ensuite, exécutons Certbot et récupérons nos certificats.

      Étape 4 — Obtention d’un certificat SSL

      Certbot propose différents moyens d’obtenir des certificats SSL par le biais de plugins. Le plugin Nginx se chargera de reconfigurer Nginx et de recharger la configuration chaque fois que nécessaire. Pour utiliser ce plugin, tapez ce qui suit :

      • sudo certbot --nginx -d example.com -d www.example.com

      Cela exécute certbot avec le plugin --nginx, en utilisant -d pour spécifier les noms de domaine pour lesquels nous aimerions que le certificat soit valide.

      Si vous utilisez certbot pour la première fois, vous serez invité à saisir une adresse électronique et à accepter les conditions de service. Après avoir fait cela, certbot communiquera avec le serveur Let’s Encrypt, puis exécutera un défi pour vérifier que vous contrôlez le domaine pour lequel vous demandez un certificat.

      Si cela réussit, certbot demandera comment vous souhaitez configurer vos paramètres HTTPS.

      Output

      Please choose whether or not to redirect HTTP traffic to HTTPS, removing HTTP access. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1: No redirect - Make no further changes to the webserver configuration. 2: Redirect - Make all requests redirect to secure HTTPS access. Choose this for new sites, or if you're confident your site works on HTTPS. You can undo this change by editing your web server's configuration. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Select the appropriate number [1-2] then [enter] (press 'c' to cancel):

      Faites votre choix, puis appuyez sur ENTER. La configuration sera mise à jour, et Nginx se rechargera pour récupérer les nouveaux paramètres. certbot terminera par un message vous indiquant que le processus a réussi et précisant l’emplacement de stockage de vos certificats :

      Output

      IMPORTANT NOTES: - Congratulations! Your certificate and chain have been saved at: /etc/letsencrypt/live/example.com/fullchain.pem Your key file has been saved at: /etc/letsencrypt/live/example.com/privkey.pem Your cert will expire on 2020-08-18. To obtain a new or tweaked version of this certificate in the future, simply run certbot again with the "certonly" option. To non-interactively renew *all* of your certificates, run "certbot renew" - If you like Certbot, please consider supporting our work by: Donating to ISRG / Let's Encrypt: https://letsencrypt.org/donate Donating to EFF: https://eff.org/donate-le

      Vos certificats sont téléchargés, installés et chargés. Essayez de recharger votre site web en utilisant https:// et remarquez l’indicateur de sécurité de votre navigateur. Il devrait indiquer que le site est correctement sécurisé, généralement par une icône de cadenas. Si vous testez votre serveur en utilisant le SSL Labs Server Test​​​1​​​, il obtiendra la note A.

      Pour finir, testons le processus de renouvellement.

      Étape 5 — Verification du renouvellement automatique de Certbot

      Les certificats Let’s Encrypt ne sont valables que quatre-vingt-dix jours. Cette mesure vise à encourager les utilisateurs à automatiser le processus de renouvellement de leur certificat. Le paquet certbot que nous avons installé s’en charge pour nous en ajoutant une minuterie système qui s’exécute deux fois par jour et renouvelle automatiquement tout certificat qui se trouve dans les trente jours avant son expiration.

      Vous pouvez consulter le statut de la minuterie avec systemctl :

      • sudo systemctl status certbot.timer

      Output

      ● certbot.timer - Run certbot twice daily Loaded: loaded (/lib/systemd/system/certbot.timer; enabled; vendor preset: enabled) Active: active (waiting) since Mon 2020-05-04 20:04:36 UTC; 2 weeks 1 days ago Trigger: Thu 2020-05-21 05:22:32 UTC; 9h left Triggers: ● certbot.service

      Pour tester le processus de renouvellement, vous pouvez faire un essai avec certbot :

      • sudo certbot renew --dry-run

      Si vous ne voyez pas d’erreurs, tout est prêt. Si nécessaire, Certbot renouvellera vos certificats et rechargera Nginx pour récupérer les modifications. Si le processus de renouvellement automatisé échoue, Let’s Encrypt enverra un message à l’adresse électronique que vous avez indiquée, vous avertissant de l’expiration prochaine de votre certificat.

      Conclusion

      Dans ce tutoriel, vous avez installé le client Let’s Encrypt certbot, téléchargé les certificats SSL pour votre domaine, configuré Nginx pour utiliser ces certificats et mis en place le renouvellement automatique des certificats. Si vous avez d’autres questions sur l’utilisation de Certbot, la documentation officielle est un bon point de départ.



      Source link

      Comment installer et sécuriser Secure phpMyAdmin sur Ubuntu 20.04


      Une version antérieure de ce tutoriel a été écrite par Brennan Bearnes.

      Introduction

      Si de nombreux utilisateurs ont besoin des fonctionnalités d’un système de gestion de base de données comme MySQL, ils peuvent ne pas se sentir à l’aise pour interagir avec le système uniquement à partir de l’invite MySQL.

      phpMyAdmin a été créé pour que les utilisateurs puissent interagir avec MySQL via une interface web. Dans ce guide, nous allons voir comment installer et sécuriser phpMyAdmin afin que vous puissiez l’utiliser en toute sécurité pour gérer vos bases de données sur un système Ubuntu 20.04.

      Conditions préalables

      Afin de compléter ce guide, il vous faudra :

      De plus, il y a des considérations de sécurité importantes lors de l’utilisation de logiciels comme phpMyAdmin, puisque celui-ci :

      • communique directement avec votre installation MySQL
      • gère l’authentification à l’aide des identifiants MySQL
      • exécute et renvoie des résultats pour des requêtes SQL arbitraires

      Pour ces raisons, et parce qu’il s’agit d’une application PHP largement déployée qui est fréquemment la cible d’attaques, vous ne devriez jamais exécuter phpMyAdmin sur des systèmes distants via une simple connexion HTTP.

      Si vous n’avez pas de domaine existant configuré avec un certificat SSL/TLS, vous pouvez suivre ce guide sur la sécurisation d’Apache avec Let’s Encrypt sur Ubuntu 20.04. Pour cela, vous devrez enregistrer un nom de domaine, créer des enregistrements DNS pour votre serveur et mettre en place un hôte virtuel Apache. 

      Étape 1 — Installer Django

      Vous pouvez utiliser APT pour installer phpMyAdmin à partir des dépôts Ubuntu par défaut.

      En tant qu’utilisateur non root sudo, mettez à jour l’index des paquets de votre serveur :

      Ensuite, vous pouvez installer le paquet phpmyadmin. Parallèlement à ce paquet, la documentation officielle recommande également d’installer quelques extensions PHP sur votre serveur afin d’activer certaines fonctionnalités et d’améliorer les performances.

      Si vous avez suivi le tutoriel préalable sur la pile LAMP, plusieurs de ces modules auront été installés en même temps que le paquet php.   Toutefois, il est recommandé d’installer également ces paquets :

      • php-mbstring : Un module pour gérer les chaînes non ASCII et convertir les chaînes en différents encodages
      • php-zip : Cette extension permet de télécharger des fichiers .zip vers phpMyAdmin
      • php-gd : Permet de prendre en charge la bibliothèque graphique GD
      • php-json : Fournit à PHP un support pour la sérialisation JSON
      • php-curl : Permet à PHP d’interagir avec différents types de serveurs utilisant différents protocoles

      Exécutez la commande suivante pour installer ces paquets sur votre système. Veuillez noter, cependant, que le processus d’installation nécessite que vous fassiez certains choix pour configurer correctement phpMyAdmin. Nous allons bientôt passer en revue ces options :

      • sudo apt install phpmyadmin php-mbstring php-zip php-gd php-json php-curl

      Voici les options que vous devez choisir lorsque vous y êtes invité afin de configurer correctement votre installation :

      • Pour la sélection du serveur, choisissez apache2

        Warning: Lorsque l’invite apparaît, « apache2 » est mis en évidence, mais n’est pas sélectionné. Si vous ne tapez pas sur SPACE pour sélectionner Apache, l’installateur ne déplacera* pas *les fichiers nécessaires pendant l’installation. Appuyez sur SPACE, TAB, puis ENTER pour sélectionner Apache.
      • Sélectionnez Yes quand il est demandé s’il faut utiliser dbconfig-common pour créer la base de données
      • Il vous sera ensuite demandé de choisir et de confirmer un mot de passe d’application MySQL pour phpMyAdmin

      Note : En supposant que vous ayez installé MySQL en suivant l’étape 2 du tutoriel préalable sur la pile LAMP, vous avez peut-être décidé d’activer le plugin Validate Password plugin. A partir de ce moment, l’activation de ce composant déclenchera une erreur lorsque vous tenterez de définir un mot de passe pour l’utilisateur phpmyadmin :

      Erreur de validation du mot de passe phpMyAdmin

      Pour résoudre ce problème, sélectionnez l’option d’annulation pour arrêter le processus d’installation. Ensuite, ouvrez votre prompt MySQL :

      Ou, si vous avez activé l’authentification par mot de passe pour l’utilisateur MySQL root, exécutez cette commande et entrez ensuite votre mot de passe lorsque vous y êtes invité :

      À l’invite, exécutez la commande suivante pour désactiver le composant Validate Password. Notez que cela ne le désinstallera pas réellement, mais empêchera simplement le composant d’être lancé sur votre serveur MySQL :

      • UNINSTALL COMPONENT "file://component_validate_password";

      Ensuite, vous pouvez fermer le client MySQL :

      Essayez ensuite d’installer le paquet phpmyadmin et il fonctionnera comme prévu :

      • sudo apt install phpmyadmin

      Une fois que phpMyAdmin est installé, vous pouvez ouvrir l’invite MySQL une nouvelle fois avec sudo mysql ou mysql -u root -p et ensuite exécuter la commande suivante pour réactiver le composant Validate Password : 

      • INSTALL COMPONENT "file://component_validate_password";

      Le processus d’installation ajoute le fichier de configuration Apache de phpMyAdmin dans le répertoire /etc/apache2/conf-enabled/, où il est lu automatiquement. Pour finir de configurer Apache et PHP afin qu’ils fonctionnent avec phpMyAdmin, la seule tâche qui reste à accomplir dans cette section du tutoriel est d’activer explicitement l’extension PHP mbstring, ce que vous pouvez faire en tapant :

      Ensuite, redémarrez Apache pour que vos modifications soient reconnues :

      • sudo systemctl restart apache2

      phpMyAdmin est maintenant installé et configuré pour fonctionner avec Apache. Toutefois, avant de pouvoir vous connecter et de commencer à interagir avec vos bases de données MySQL, vous devrez vous assurer que vos utilisateurs MySQL disposent des privilèges requis pour interagir avec le programme.

      Étape 2 – Ajustement de l’authentification et des privilèges des utilisateurs

      Lorsque vous avez installé phpMyAdmin sur votre serveur, il a automatiquement créé un utilisateur de base de données appelé phpmyadmin qui effectue certains processus sous-jacents pour le programme. Plutôt que de vous connecter en tant qu’utilisateur avec le mot de passe administratif que vous avez défini lors de l’installation, il est recommandé de vous connecter soit en tant que root user MySQL, soit en tant qu’dedicated user à la gestion des bases de données via l’interface phpMyAdmin.

      Configuration du mot de passe d’accès au compte root MySQL

      Dans les systèmes Ubuntu fonctionnant sous MySQL 5.7 (et versions ultérieures), l’utilisateur MySQL root est configuré pour s’authentifier en utilisant le plugin auth_socket par défaut plutôt qu’avec un mot de passe. Cela permet une plus grande sécurité et facilité d’utilisation dans de nombreux cas, mais cela peut également compliquer les choses lorsque vous devez autoriser un programme externe – comme phpMyAdmin – pour accéder à l’utilisateur.

      Afin de vous connecter à phpMyAdmin en tant qu’utilisateur MySQL root, vous devrez changer sa méthode d’authentification de auth_socket à une méthode qui utilise un mot de passe, si vous ne l’avez pas déjà fait. Pour ce faire, ouvrez l’invite MySQL depuis votre terminal :

      Ensuite, vérifiez la méthode d’authentification utilisée par chacun de vos comptes utilisateurs MySQL à l’aide de la commande suivante :

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | | auth_socket | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

      Dans cet exemple, vous pouvez voir que l’utilisateur root s’authentifie effectivement en utilisant le plugin auth_socket. Pour configurer le compte root afin qu’il s’authentifie avec un mot de passe, exécutez la commande ALTER USER suivante.   Assurez-vous de changer password par un mot de passe fort de votre choix :

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

      Remarque : L’instruction ALTER USER précédente définit l’utilisateur MySQL root pour s’authentifier avec le plugin caching_sha2_password. Selon la documentation officielle de MySQL, caching_sha2_password est le plugin d’authentification préféré de MySQL, car il fournit un cryptage de mot de passe plus sûr que l’ancien, mais encore largement utilisé, mysql_native_password.

      Cependant, certaines versions de PHP ne fonctionnent pas de manière fiable avec caching_sha2_password. PHP a signalé que ce problème a été corrigé à partir de PHP 7.4, mais si vous rencontrez une erreur en essayant de vous connecter à phpMyAdmin plus tard, vous pourriez vouloir définir root pour vous authentifier avec mysql_native_password à la place :

      • ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Ensuite, vérifiez à nouveau les méthodes d’authentification employées par chacun de vos utilisateurs pour confirmer que le root ne s’authentifie plus à l’aide du plugin auth_socket :

      • SELECT user,authentication_string,plugin,host FROM mysql.user;

      Output

      +------------------+-------------------------------------------+-----------------------+-----------+ | user | authentication_string | plugin | host | +------------------+-------------------------------------------+-----------------------+-----------+ | root | *DE06E242B88EFB1FE4B5083587C260BACB2A6158 | caching_sha2_password | localhost | | mysql.session | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | mysql.sys | *THISISNOTAVALIDPASSWORDTHATCANBEUSEDHERE | caching_sha2_password | localhost | | debian-sys-maint | *8486437DE5F65ADC4A4B001CA591363B64746D4C | caching_sha2_password | localhost | | phpmyadmin | *5FD2B7524254B7F81B32873B1EA6D681503A5CA9 | caching_sha2_password | localhost | +------------------+-------------------------------------------+-----------------------+-----------+ 5 rows in set (0.00 sec)

      Vous pouvez voir à partir de cette sortie que le root user s’authentifiera à l’aide d’un mot de passe. Vous pouvez maintenant vous connecter à l’interface phpMyAdmin en tant que root user avec le mot de passe que vous lui avez attribué ici.

      Configuration de l’accès par mot de passe pour un utilisateur MySQL dédié

      Alternativement, certains peuvent trouver qu’il est plus adapté à leur travail de se connecter à phpMyAdmin avec un dedicated user. Pour ce faire, ouvrez à nouveau le shell MySQL :

      Si vous avez activé l’authentification par mot de passe pour votre root user, comme décrit dans la section précédente, vous devrez exécuter la commande suivante et saisir votre mot de passe lorsque vous y serez invité afin de vous connecter :

      De là, créez un nouvel utilisateur et attribuez-lui un mot de passe fort :

      • CREATE USER 'sammy'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password';

      Note : Encore une fois, selon la version de PHP que vous avez installée, vous voudrez peut-être configurer votre nouvel utilisateur pour qu’il s’authentifie avec le mot de passe mysql_native_password au lieu du mot de passe caching_sha2_password :

      • ALTER USER 'sammy'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';

      Ensuite, accordez à votre nouvel utilisateur les privilèges appropriés. Par exemple, vous pourriez accorder les privilèges d’utilisateur à toutes les tables de la base de données, ainsi que le pouvoir d’ajouter, de modifier et de supprimer des privilèges d’utilisateur, avec cette commande :

      • GRANT ALL PRIVILEGES ON *.* TO 'sammy'@'localhost' WITH GRANT OPTION;

      Ensuite, quittez le shell MySQL :

      Vous pouvez maintenant accéder à l’interface web en visitant le nom de domaine ou l’adresse IP publique de votre serveur suivi de /phpmyadmin :

      https://your_domain_or_IP/phpmyadmin
      

      Écran de connexion à phpMyAdmin

      Connectez-vous à l’interface, soit commeroot ou avec le nouveau nom d’utilisateur et le nouveau mot de passe que vous venez de configurer. 

      Lorsque vous vous connecterez, vous verrez l’interface utilisateur, qui ressemblera à ceci :

      Interface utilisateur de phpMyAdmin

      Maintenant que vous êtes capable de vous connecter et d’interagir avec phpMyAdmin, il ne vous reste plus qu’à renforcer la sécurité de votre système pour le protéger des attaques.

      Étape 3 – Sécuriser votre instance phpMyAdmin

      En raison de son ubiquité, phpMyAdmin est une cible populaire pour les attaquants, et vous devriez faire très attention à empêcher tout accès non autorisé. Une façon de procéder consiste à placer une passerelle devant l’ensemble de l’application en utilisant les fonctionnalités d’authentification et d’autorisation .htaccess intégrées à Apache.

      Pour ce faire, vous devez d’abord activer l’utilisation des fichiers .htaccess en modifiant le fichier de configuration Apache de votre installation de phpMyAdmin.

      Utilisez votre éditeur de texte favori pour modifier le fichier phpmyadmin.conf qui a été placé dans votre répertoire de configuration Apache. Ici, nous utiliserons nano :

      • sudo nano /etc/apache2/conf-available/phpmyadmin.conf

      Ajoutez une directive AllowOverride All dans la section <Directory /usr/share/phpmyadmin> du fichier de configuration, comme ceci :

      /etc/apache2/conf-available/phpmyadmin.conf

      <Directory /usr/share/phpmyadmin>
          Options FollowSymLinks
          DirectoryIndex index.php
          AllowOverride All
          . . .
      

      Lorsque vous avez ajouté cette ligne, enregistrez et fermez le fichier. Si vous avez utilisé nano pour éditer le fichier, faites-le en appuyant sur CTRL + X, Y, puis ENTER

      Pour mettre en œuvre les modifications que vous avez apportées, redémarrez Apache :

      • sudo systemctl restart apache2

      Maintenant que vous avez autorisé l’utilisation de fichiers .htaccess pour votre application, vous devez en créer un pour mettre en place une certaine sécurité. 

      Pour que cela soit possible, le fichier doit être créé dans le répertoire de l’application. Vous pouvez créer le fichier nécessaire et l’ouvrir dans votre éditeur de texte avec les privilèges root en tapant :

      • sudo nano /usr/share/phpmyadmin/.htaccess

      Dans ce fichier, entrez les informations suivantes :

      /usr/share/phpmyadmin/.htaccess

      AuthType Basic
      AuthName "Restricted Files"
      AuthUserFile /etc/phpmyadmin/.htpasswd
      Require valid-user
      

      Voici ce que signifie chacune de ces lignes :

      • AuthType Basic : Cette ligne précise le type d’authentification que vous mettez en œuvre. Ce type mettra en œuvre l’authentification par mot de passe à l’aide d’un fichier de mots de passe.
      • AuthName : Définit le message pour la boîte de dialogue d’authentification. Vous devez conserver ce générique afin que les utilisateurs non autorisés n’obtiennent aucune information sur ce qui est protégé.
      • AuthUserFile : permet de définir l’emplacement du fichier de mots de passe qui sera utilisé pour l’authentification. Cela doit se faire en dehors des répertoires qui sont desservis. Nous allons créer ce dossier prochainement.
      • Require valid-user : Ceci spécifie que seuls les utilisateurs authentifiés doivent avoir accès à cette ressource. C’est ce qui empêche en fait les utilisateurs non autorisés d’entrer.

      Lorsque vous avez terminé, enregistrez et fermez le fichier.

      L’emplacement que vous avez choisi pour votre fichier de mots de passe était /etc/phpmyadmin/.htpasswd. Vous pouvez maintenant créer ce fichier et le transmettre à un utilisateur initial avec l’utilitaire htpasswd :

      • sudo htpasswd -c /etc/phpmyadmin/.htpasswd username

      Vous serez invité à sélectionner et à confirmer un mot de passe pour l’utilisateur que vous créez. Ensuite, le fichier est créé avec le mot de passe haché que vous avez entré.

      Si vous voulez entrer un utilisateur supplémentaire, vous devez le faire sans le drapeau -c, comme ceci :

      • sudo htpasswd /etc/phpmyadmin/.htpasswd additionaluser

      Maintenant, lorsque vous accédez à votre sous-répertoire phpMyAdmin, il vous sera demandé le nom de compte et le mot de passe supplémentaires que vous venez de configurer :

      https://domain_name_or_IP/phpmyadmin
      

      Mot de passe apache de phpMyAdmin

      Après avoir entré l’authentification Apache, vous serez dirigé vers la page d’authentification phpMyAdmin habituelle pour entrer vos identifiants MySQL. En ajoutant un ensemble supplémentaire d’identifiants non-MySQL, vous apportez à votre base de données une couche de sécurité supplémentaire. Ceci est souhaitable, puisque phpMyAdmin a été vulnérable aux menaces de sécurité par le passé.

      Conclusion

      Vous devriez maintenant avoir configuré phpMyAdmin et être prêt à l’utiliser sur votre serveur Ubuntu 20.04. Cette interface vous permet de créer des bases de données, des utilisateurs et des tableaux, ainsi que d’effectuer les opérations habituelles comme la suppression et la modification de structures et de données.



      Source link