SkyMinds ~ by Matt - dev expert WordPress et WooCommerce

Illustration numérique avec des motifs de circuits géométriques dans les tons sarcelle et orange. Au premier plan, un texte blanc indique "SSH" avec un symbole d'invite de terminal à gauche et une icône de clé à droite, évoquant SSH-Audit et les étapes pour sécuriser le serveur SSH.

Comment sécuriser efficacement votre serveur SSH avec SSH-Audit

La sécurité SSH est souvent négligée… jusqu’au jour où une attaque brute force ou une mauvaise configuration vous met à genoux. Heureusement, il existe un outil open source simple, rapide et redoutablement efficace pour auditer la sécurité de votre serveur SSH : SSH-Audit.

Dans ce guide, on va voir ensemble comment utiliser SSH-Audit pour scanner, comprendre les failles et corriger les erreurs sur un serveur Ubuntu 24.04.

Installer SSH-Audit avec Python

SSH-Audit est un script Python autonome. Pas besoin de bibliothèque externe, pas de dépendances lourdes. Juste Python, un terminal et c’est parti :

pipx install ssh-audit

Résultat:

  installed package ssh-audit 3.3.0, installed using Python 3.12.3
  These apps are now globally available
    - ssh-audit
done! ✨ 🌟 ✨Code language: CSS (css)

Vous pouvez lancer l’audit depuis votre fenêtre de terminal:

ssh-audit monserveur.exemple.com -pPORTNUMBERCode language: CSS (css)

Si vous voulez tester sans rien installer, vous pouvez aussi passer par le service en ligne ssh-audit.com : entrez simplement l’adresse IP ou le nom de domaine de votre serveur, SSH-Audit vous renvoie un rapport clair et lisible.

Voici le rapport de ssh-audit pour un Ubuntu Server de base, avant optimisation :

# general
(gen) banner: SSH-2.0-OpenSSH_9.6p1 Ubuntu-3ubuntu13.12
(gen) software: OpenSSH 9.6p1
(gen) compatibility: OpenSSH 9.6+, Dropbear SSH 2020.79+
(gen) compression: enabled (zlib@openssh.com)

# key exchange algorithms
(kex) sntrup761x25519-sha512@openssh.com    -- [info] available since OpenSSH 8.5
                                            `- [info] default key exchange from OpenSSH 9.0 to 9.8
                                            `- [info] hybrid key exchange based on post-quantum resistant algorithm and proven conventional X25519 algorithm
(kex) curve25519-sha256                     -- [info] available since OpenSSH 7.4, Dropbear SSH 2018.76
                                            `- [info] default key exchange from OpenSSH 7.4 to 8.9
(kex) curve25519-sha256@libssh.org          -- [info] available since OpenSSH 6.4, Dropbear SSH 2013.62
                                            `- [info] default key exchange from OpenSSH 6.5 to 7.3
(kex) ecdh-sha2-nistp256                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) ecdh-sha2-nistp384                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) ecdh-sha2-nistp521                    -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(kex) diffie-hellman-group-exchange-sha256 (3072-bit) -- [info] available since OpenSSH 4.4
                                                      `- [info] OpenSSH's GEX fallback mechanism was triggered during testing. Very old SSH clients will still be able to create connections using a 2048-bit modulus, though modern clients will use 3072. This can only be disabled by recompiling the code (see https://github.com/openssh/openssh-portable/blob/V_9_4/dh.c#L477).
(kex) diffie-hellman-group16-sha512         -- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73
(kex) diffie-hellman-group18-sha512         -- [info] available since OpenSSH 7.3
(kex) diffie-hellman-group14-sha256         -- [warn] 2048-bit modulus only provides 112-bits of symmetric strength
                                            `- [info] available since OpenSSH 7.3, Dropbear SSH 2016.73
(kex) ext-info-s                            -- [info] available since OpenSSH 9.6
                                            `- [info] pseudo-algorithm that denotes the peer supports RFC8308 extensions
(kex) kex-strict-s-v00@openssh.com          -- [info] pseudo-algorithm that denotes the peer supports a stricter key exchange method as a counter-measure to the Terrapin attack (CVE-2023-48795)

# host-key algorithms
(key) rsa-sha2-512 (3072-bit)               -- [info] available since OpenSSH 7.2
(key) rsa-sha2-256 (3072-bit)               -- [info] available since OpenSSH 7.2, Dropbear SSH 2020.79
(key) ecdsa-sha2-nistp256                   -- [fail] using elliptic curves that are suspected as being backdoored by the U.S. National Security Agency
                                            `- [warn] using weak random number generator could reveal the key
                                            `- [info] available since OpenSSH 5.7, Dropbear SSH 2013.62
(key) ssh-ed25519                           -- [info] available since OpenSSH 6.5, Dropbear SSH 2020.79

# encryption algorithms (ciphers)
(enc) chacha20-poly1305@openssh.com         -- [info] available since OpenSSH 6.5, Dropbear SSH 2020.79
                                            `- [info] default cipher since OpenSSH 6.9
(enc) aes128-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52
(enc) aes192-ctr                            -- [info] available since OpenSSH 3.7
(enc) aes256-ctr                            -- [info] available since OpenSSH 3.7, Dropbear SSH 0.52
(enc) aes128-gcm@openssh.com                -- [info] available since OpenSSH 6.2
(enc) aes256-gcm@openssh.com                -- [info] available since OpenSSH 6.2

# message authentication code algorithms
(mac) umac-64-etm@openssh.com               -- [warn] using small 64-bit tag size
                                            `- [info] available since OpenSSH 6.2
(mac) umac-128-etm@openssh.com              -- [info] available since OpenSSH 6.2
(mac) hmac-sha2-256-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) hmac-sha2-512-etm@openssh.com         -- [info] available since OpenSSH 6.2
(mac) hmac-sha1-etm@openssh.com             -- [fail] using broken SHA-1 hash algorithm
                                            `- [info] available since OpenSSH 6.2
(mac) umac-64@openssh.com                   -- [warn] using encrypt-and-MAC mode
                                            `- [warn] using small 64-bit tag size
                                            `- [info] available since OpenSSH 4.7
(mac) umac-128@openssh.com                  -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 6.2
(mac) hmac-sha2-256                         -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56
(mac) hmac-sha2-512                         -- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 5.9, Dropbear SSH 2013.56
(mac) hmac-sha1                             -- [fail] using broken SHA-1 hash algorithm
                                            `- [warn] using encrypt-and-MAC mode
                                            `- [info] available since OpenSSH 2.1.0, Dropbear SSH 0.28

# fingerprints
(fin) ssh-ed25519: SHA256:YnkJfR0z/UMb2wQ+wYvEwgTJPheozRsMH41BvEXL56Q
(fin) ssh-rsa: SHA256:Ax+2iFsBx5juS8y+bVXxvs3DT0bdoX4nKAdGje1iknQ

# algorithm recommendations (for OpenSSH 9.6)
(rec) -ecdh-sha2-nistp256                   -- kex algorithm to remove
(rec) -ecdh-sha2-nistp384                   -- kex algorithm to remove
(rec) -ecdh-sha2-nistp521                   -- kex algorithm to remove
(rec) -ecdsa-sha2-nistp256                  -- key algorithm to remove
(rec) -hmac-sha1                            -- mac algorithm to remove
(rec) -hmac-sha1-etm@openssh.com            -- mac algorithm to remove
(rec) -diffie-hellman-group14-sha256        -- kex algorithm to remove
(rec) -hmac-sha2-256                        -- mac algorithm to remove
(rec) -hmac-sha2-512                        -- mac algorithm to remove
(rec) -umac-128@openssh.com                 -- mac algorithm to remove
(rec) -umac-64-etm@openssh.com              -- mac algorithm to remove
(rec) -umac-64@openssh.com                  -- mac algorithm to removeCode language: PHP (php)

Et le résultat en image :

Audit SSH sous un serveur Ubuntu avant optimisation, pas top!
Audit SSH sous un serveur Ubuntu avant optimisation, pas top :(

Ce n’est pas vraiment idéal ! Passons à l’étape suivante pour sécuriser le service SSH.

Lire la suite

Une fenêtre de terminal stylisée avec "WP-CLI" à côté d'une icône de fichier ZIP - parfait pour sauvegarder vos extensions WordPress. La fenêtre du terminal a une barre de titre bleue, un fond noir, et l'icône ZIP grise et blanche comporte une étiquette "ZIP" rouge.

Comment sauvegarder, archiver et installer par lots des extensions WordPress avec WP‑CLI

Lors d’un diagnostic de performance ou d’une enquête sur une infection malware dans WordPress, il devient souvent nécessaire de désactiver l’ensemble des extensions à un moment donné du processus. Il est également judicieux de sauvegarder toutes les extensions WordPress individuellement sous forme d’archives .zip, afin de prévenir toute perte ou confusion durant les manipulations.

Réinstaller manuellement chaque extension à partir de ses fichiers zip serait une tâche particulièrement fastidieuse. C’est pourquoi, dans cet article, je vous montre comment automatiser entièrement cette procédure.

Nous commencerons par compresser chaque extension WordPress dans un fichier .zip distinct, que nous placerons dans un dossier temporaire. Pour compléter ce script, j’ai également inclus une boucle simple permettant de réinstaller en lot toutes ces sauvegardes via WP‑CLI.

1. Sauvegarde de la base de données

Connectez-vous dans le répertoire racine de votre site via SSH, puis exécutez :

wp db export sauvegarde.sqlCode language: JavaScript (javascript)

Cela génère un fichier SQL contenant l’intégralité de la base de données.

2. Archivage des fichiers du site

Au même emplacement, empaquetez l’intégralité du site :

zip -r archive_site.zip * .htaccessCode language: CSS (css)

Cette commande comprime tous les fichiers, incluant .htaccess, en omettant les autres fichiers cachés.

Important : n’oubliez pas de supprimer ensuite le fichier .sql et l’archive .zip afin d’éviter toute exposition non sécurisée.

Lire la suite

Image du logo montrant « WPML » avec chaque lettre dans des couleurs différentes : W en bleu, P en bleu sarcelle, M en orange et L en marron. Une bulle de dialogue stylisée gris foncé se trouve à gauche de « WPML ». Une icône de balai avec un manche en bois et des poils jaunes se trouve à droite, faisant allusion à la maintenance ou au nettoyage de WordPress.

Désinstaller proprement WPML et nettoyer la base de données avec WP-CLI

Après avoir supprimé et désinstallé les plugins WPML et ses modules complémentaires, vous devez également nettoyer la base de données.

Cette installation particulière que j’ai nettoyée lors d’un projet Codeable n’avait pas WooCommerce ni le module complémentaire WPML WooCommerce installés, donc malheureusement ce guide ne couvre pas le nettoyage spécifique à cela.

Cependant, si vous abandonnez WPML pour des raisons de performance et souhaitez de l’aide pour nettoyer votre base de données, n’hésitez pas à me contacter ici. Vous pouvez également utiliser phpMyAdmin ou Adminer pour nettoyer WPML si vous préférez.

Sauvegardez d’abord votre base de données et testez minutieusement sur un site de staging avant de continuer !

Supprimer les tables et options de base de données WPML

Dans ces sections, nous allons supprimer les lignes pertinentes de WPML de la table wp_options, puis les tables de base de données dédiées à WPML elles-mêmes.

Si vous le souhaitez, vous pouvez recueillir le nombre de données autochargées à l’aide de la commande wp doctor (voir le tutoriel) afin que nous puissions voir à quel point les données autochargées dans wp_options diminuent après avoir nettoyé les plugins WPML.

wp doctor check autoload-options-size --allow-root --skip-plugins --skip-themes

Résultats :

+-----------------------+---------+------------------------------------------------------------+
| name                  | status  | message                                                    |
+-----------------------+---------+------------------------------------------------------------+
| autoload-options-size | warning | Autoloaded options size (1.03mb) exceeds threshold (900kb) |
+-----------------------+---------+------------------------------------------------------------+

Nous dépassons déjà le seuil recommandé de 900 KB de données autochargées dans wp_options (voir ici comment nettoyer les données autochargées).

Lire la suite