Mon installation pour sécuriser WordPress

2 sujets de 1 à 2 (sur un total de 2)
  • Auteur
    Articles
  • #3846
    nam1962nam1962
    Maître des clés

    Sécuriser WordPress sans se prendre la tête !

    Vous avez dû remarquer que l’Almanet doLys est sous WordPress et bien sûr il est important de sécuriser WordPress.

    Se sécuriser, c’est se respecter et respecter ses visiteurs !

    J’y fais attention depuis longtemps et il m’est arrivé de galérer, de partir dans des bidouilles pas possibles, d’installer une multitude d’outils de sécurisation, pares-feu, anti-spam, captchas… Tout çà pour voir des alertes dans tous les sens et mes sites super ralentis.

    C’est en forgeant qu’on devient forgeron : j’ai appris que l’acronyme anglais KISS (Keep It Simple, Stupid !) s’appliquait pour moi aussi et suis arrivé à quelque chose de pas mal !

    On est jamais complètement à l’abri d’un piratage, mais avec ce que je vais vous indiquer, vous devriez pouvoir être tranquilles et ne pas vivre les gros ennuis que même certaines grandes entreprises peuvent rencontrer. Avec le cortège de coûts, perte de confiance des visiteurs et temps perdu qui vont avec  ! (Un dirigeant peut couler son entreprise en peu de temps en perdant la main sur son site).

    WordPress est un super outil de gestion de contenus, adapté à tout les types de site (blogs, forums, sites institutionnels, sites d’e-commerce…)

    Sur ce dernier point (e-commerce) mon expérience m’a montré qu’il était bien plus simple et bien plus facile à référencer, grâce à l’extension woocommerce, que toute autre solution d’e-commerce, quand on est une TPE/PME. Au delà de 20 000 références, il a peut-être des limites, mais à ce niveau là on emploie une agence !

    Le truc crucial (comme pour tout autre outil de gestion de site) est donc la sécurité.

    Personne ne veut voir son site victime d’un défacement, d’un ransomware, d’un cryptolocker, d’un vol de données ou de tout autre virus ou hacking.

    Je divise la sécurité sous WordPress en trois parties :

    • le petit rappel qui va bien sur les principes de base
    • tout ce qui simplifie la vie, permet de déléguer
    • tout ce qui est sous le capot.

    L’ordre dans lequel on se protège est simple :

    1. Avoir un serveur protégé (ça c’est un métier de pro : l’hébergeur)
    2. Avoir une administration WordPress protégée (c’est le travail du firewall et un peu le vôtre)
    3. Avoir une gestion des utilisateurs et du contenu protégée du spam et des visiteurs indésirables (c’est le boulot d’un logiciel et marginalement du webmaster, donc de vous et moi)

    Ne vous inquiétez pas, nous resterons dans des ajustements simples !

    J’utilise abondamment tous les services et outils que je vais vous indiquer, les liens vous permettant d’y souscrire pourront dans certains cas m’amener une commission de leur part (sans modifier votre coût).

    Je suis aussi très exigeant : si vous les utilisez et êtes déçus, n’hésitez pas à me le dire ! Cela dit, vous ne devriez pas être déçus 😉

    Enfin, je privilégie toujours les solutions open source ou les fournisseurs à l’esprit open source, cela a plein d’avantages, c’est mieux documenté, souvent moins cher (on paye le service, mais pas une licence d’exploitation).

    On a moins de risque de perdre un produit ou service, les codes sources restant connus et enfin, il est plus facile de changer de fournisseur le cas échéant.

    N’oublions pas que open source ne veut pas dire purement gratuit, dans les versions gratuites on fait tout soi-même, or il est souvent plus judicieux de rémunérer le service et l’expertise qui vont avec.

    Les bases de la sécurité d’un site wordpress

    • Bon, alors, évidemment, nous ne nous appelons pas « Admin » et notre mot de passe n’est ni « Password », ni « 123456 », mais là je ne vais pas vous prendre pour des billes !

    Petite astuce pour le mot de passe, j’utilise un outil qui génère un mot de passe que je ne connais même pas moi-même et qui n’est pas stocké : MasterPassword

     

    • Quand j’ai terminé d’administrer en ligne, j’efface mon historique, caches, cookies, etc, comme ça, quelqu’un qui mettrait la main sur l’ordi en question n’irait pas loin.
    • J’étudie systématiquement les plugins (extensions) que j’installe,  leurs commentaires et leur date de mise à jour (plus d’un an est souvent fort ennuyeux).
    • Bien entendu, je ne prends mes thèmes qu’à des sources sûres (les thèmes gratuits proposés sur WordPress sont souvent de très bonne facture, assurez vous qu’ils soient suivis !)
    • Je fais systématiquement les mises à jour, ça ne se discute pas, c’est comme ça ! Nous reviendrons sur ce point plus bas.
    • Il faut faire ses mises à jour.
    • Ne pas oublier les mises à jour (je me répète, oui, mais tous les jours on voit des sites piratés, même dans de très grosses entreprises… juste par exploitation d’une faille pourtant corrigée !)

    Il y a une très amusante et ridicule excuse pour ne pas faire les mises à jour « ah oui, ça peut casser le site ».

    Eh bien, il vaut mieux avoir un site en panne technique (qu’on pourra de toutes façons réparer) plutôt qu’un site sur lequel un pirate a mis la main ! (ceci est valable pour tous nos devices et tous nos logiciels)

    • Évidemment, je fais systématiquement mes sauvegardes (en fait non, c’est mon hébergeur qui les fait pour moi 😉 )

    Erreurs que j’ai faites et qui vous permettent de les éviter :

    • Croire que nous pouvons tout faire nous même, eh non ! Ça prend un temps fou et ceux qui le font tous les jours le font mieux : il faut déléguer !
    • Penser que mettre deux, trois, quatre firewalls protégera mieux, là aussi, c’est raté ! Ça multiplie les incohérences.
    • Utiliser des services Saas qui font transférer une partie de votre flux chez eux, non seulement vous ne maîtrisez plus rien, mais si leur serveur tombe, ou vous tombez aussi ou vous n’êtes plus protégé (sans compter que ça ralentit).
    • Utiliser des suites « tout-en-un », non seulement elles ne font pas tout bien, mais je me suis tapé des heures à les désinstaller : elles laissent des traces partout !
    • Utiliser des captcha : cela barbe nos visiteurs et c’est souvent contourné (les bots de hacking progressent tout le temps).
    • Bidouiller soi-même sur la base de tutos parfois très anciens, trois semaines après on ne sait plus ce qu’on a fait et on a des fichiers de config tous pourris !
    • Utiliser des caches ou plugins de caches. C’est inutile sur le web 2.0 (ou 3.0 : on progresse tous les jours), c’est un point d’entrée pour les hackers et il est beaucoup plus sain de faire faire le turbin par le navigateur de vos visiteurs.
      Leur navigateur ne consommera rien de plus, il suffit de lui dire de garder nos pages en cache, comme vous le verrez plus bas.

    Ce que nous déléguons.

    Nous pouvons toujours tenter de tout faire nous même, mais à moins d’être informaticien professionnel, il est plus sage de déléguer les trois points vus en introduction !

    Vous serez d’accord pour considérer que la délégation doit simplifier la vie !

    La délégation commence par l’hébergeur.

    Après avoir pas mal étudié et expérimenté, j’ai choisi PlanetHoster qui a des serveurs en France et au Canada.

    Hébergeur web PlanetHoster

    J’ai fait pour vous une analyse détaillée des exigences vis à vis d’un hébergeur web et des qualités de PlanetHoster

    La délégation continue avec le firewall

    Là aussi j’ai tourné comme un ventilateur ! Installé des tas de trucs qui alourdissaient, m’envoyaient des rapports pubs tous les jours, j’ai planté des sites sans rien comprendre…

    Le pire est que j’utilisais sur l’un de mes sites, depuis plusieurs années, la soluce que j’utilise désormais exclusivement : Ninjafirewall.

    Ninjafirewall a tous les atouts : facile à installer (c’est un plugin disponible directement depuis l’interface WordPress), facile à désinstaller le cas échéant, léger et surtout, il intervient avant que le visiteur indélicat ne soit dans WP (ils appellent ça le mode « full WAF »).

    Outre sa légèreté, et le fait qu’il n’alourdisse pas notre WP, j’apprécie le fait que les tests externes de sécurité montrent qu’ils ne trouvent pas de firewall : Ninjafirewall se cache bien et les « bots » qui tentent à jet continu de forcer la porte des sites auront du mal à le voir (donc à le contourner).

    Le réglage par défaut est très bien, on peut le renforcer et l’adapter (je vous montrerai comment) et.. il m’a fait passer de F à B sur le benchmark Mozilla Observatory ! Ce benchmark est très strict (si bien que si on est à A on risque bien de bloquer toute interaction avec son site ! 😀 )

    La seule contrainte de Ninjafirewall est que si on a des domaines et sous-domaines, il faut absolument les installer de bas en haut (du sous-domaine le plus bas dans la hiérarchie au domaine le plus haut).

    Il protège aussi un sous-domaine qui ne serait pas sous WordPress (dans ce cas il faut être attentif, car un ou deux réglages manuels seront nécessaires si vous prenez la version gratuite, j’ai par exemple eu à les effectuerer pour pouvoir utiliser l’excellente suite de webmarketing Mautic).

    Évidemment avant d’installer Ninjafirewall, assurez-vous d’avoir complètement désinstallé tout autre firewall, suite de sécurité, outil captcha, plugin de cache, antispam.

    Le menu de base de NinjaFirewall est très complet, pour finaliser son installation il faut passer les rubriques de une à une.

    Vous pouvez toujours faire des réglages plus stricts que les réglages par défaut, mais attention cela pourrait devenir bloquant ce dont se souviennent plusieurs amis/membres de l’Almanet 😛 (Bon, on peut toujours revenir en arrière, et peaufiner, comme vous allez voir) :

    Dans les politiques du pare-feu, il me semble important de bloquer l’énumération des auteurs et surtout de whitelister l’administrateur ! (Vous !)

    Pensez aussi à mettre en place le file guard et le file check qui vont vous alerter si des changements non prévus de vos fichiers de configuration avaient lieu.

    Pensez surtout à activer la protection de la page de connexion : ceci limitera les risques d’attaque en brute force.

    Si d’aventure un visiteur est inutilement bloqué, il lui suffira de vous transmettre son message de blocage. Vous verrez sa catégorie dans le journal du pare-feu et vous pourrez amender votre politique dans l’éditeur de règles (petit menu déroulant des règles activées ci-dessous où vous verrez le numéro de règle incriminé).

    Voilà , vous êtes protégé !

    Et quand des bots décident d’une petite campagne, vous serez comme moi, content de voir qu’alors que nos petits camarades tombent comme des mouches, nous on voit juste ça (sans ralentissement sur notre site) :

    Pour vous informer et installer Ninjafirewall, cliquez sur ce lien vers le site de Ninjafirewall , vous pourrez ensuite l’installer via les extensions WordPress 😉

    La délégation, enfin, passe par la gestion du spam et des visiteurs.

    Là encore je suis passé par tous les trucs possibles dont plusieurs ont carrément épuisé mes visiteurs (les fameux captchas) Et bien sûr, ces applis s’en vont faire plein de requêtes externes (en nous bouffant de la donnée au passage) ce qui alourdit tout.

    Et puis je suis tombé sur un plugin basé sur les travaux d’un développeur de Mozilla (vous savez, ceux qui font le navigateur Firefox).

    Il s’agit de WordPress Zero Spam.

    C’est super léger, hyper facile à déployer (là encore via la gestion des extensions WordPress) et ça fait le boulot !

    Ça bloque les spams et surtout les inscriptions de comptes spam !

    Avant d’installer WordPress Zero Spam, revérifiez que vous avez complètement désinstallé toute suite de sécurité, outil captcha, plugin de cache, antispam.

    J’aime bien peaufiner les réglages : il suffit d’aller dans votre interface WP sur [Réglages] – [Zero Spam] et là, en deux passes vous obtenez ceci (ce plugin est en anglais, mais ne vous inquiétez pas, tellement simple que vous comprendrez même si vous ne maîtrisez pas la langue des Beatles 😉 )

    J’aime bien être poli avec mes visiteurs, sans trop en raconter au bots, donc j’ai renseigné les messages  Zero Spam :

    • IP bloquée, contactez-nous d’une autre IP si vous pensez que c’est une erreur.
    • Message bloqué comme SPAM, contactez-nous si vous pensez que c’est une erreur.
    • etc…

    Bien sûr, cela suppose que le visiteur se débrouille un peu pour vous contacter, mais je n’ai pas constaté à ce stade de faux positifs (visiteurs légitimes indûment bloqués). Dans deux cas de visiteur légitime, je leur ai appris que leur IP était compromise.

    Quand ensuite on voit dans l’onglet « blocked IPs » on est content !

    Wordpress Zero Spam est gratuit et open source, mais si vous l’utilisez professionnellement, soyez reconnaissants en leur envoyant une contribution en ligne (la page de gestion comporte un joli bouton « Donate »). Pour savoir combien, eh bien c’est une fonction du temps que vous avez gagné et du prix des extensions privatives dans le domaine.

    Pour installer WordPress Zero Spam, passez par ce lien vers Zero Spam, vous pourrez ensuite l’installer par les extensions WordPress

    Sur le sujet des spams, une fois n’est pas coutume, vous pouvez la jouer « ceinture et bretelles » en activant Akismet (toujours proposé par défaut et maintenu par les éditeurs de WordPress : Automaticc).
    Pas obligatoire avec Zero Spam, mais si ça peut vous rassurer. 😉

    Tant qu’on est sur le sujet « pot de miel », installons en un pour bloquer les faux moteurs de recherche (qui en fait cherchent souvent une faille type site pas mis à jour). Pour cela j’utilise Blackhole for bad bots

    Enfin, pour compléter tout ce dispositif, si vous indiquez des email de contact sur votre site, utilisons la fonction (antispambot) de WordPress.

    Deux moyens : soit insérer ceci dans le functions.php de votre thème (en principe vous devriez utiliser un thème enfant/child theme) :

    function shortcode_email_mechants_spammeurs( $atts , $content = null ) {
    	if ( ! is_email( $content ) ) { return; }
    	return '<a href="mailto:' . antispambot( $content ) . '">' . antispambot( $content ) . '</a>';
    }
    
    add_shortcode( 'email', 'shortcode_email_mechants_spammeurs' );

    soit utilisez l’extension Anti-Spambot

    Dans les deux cas, utilisez ensuite le shortcode pour vos adresses. (vous pouvez ajouter un titre à l’adresse, par exemple ?subject=contact du site qui ajoutera un titre à l’email

    Par exemple : [email]super_adresse@foo.truc

    Un peu de mains dans le cambouis : allons sous le capot !

    Jusque là, nous avons utilisé des services et logiciels.

    Pour peaufiner la sécurité de WordPress, quelques petites manips sont utiles.

    Pour vos sauvegardes perso, WordPress a fait un tuto  :  https://codex.wordpress.org/fr:Sauvegardes_WordPress

    Mais vous pouvez utiliser un plugin pour cela : j’utilise pour cela l’excellent Duplicator qui sert aussi à migrer les sites.

    Côté sécurité du visiteur, voici la méthode que j’utilise pour passer un site WordPress en https

    En intro, je vous ai dit par trois fois qu’il fallait faire les mises à jour, c’est in-dis-pen-sa-ble.

    Pensez à passer régulièrement sur votre interface de gestion, bien sûr, mais comme moi vous n’avez pas que ça à faire, nous allons donc automatiser cela.

    Vous allez être contents : vous allez apprendre à coder (enfin, à recopier des lignes de code 😉 )

    Nous allons commencer par la mise à jour automatique des extensions (plugins)

    Là c’est un peu fastidieux : avec l’outil ftp de PlanetHoster ou avec Filezilla, nous allons accéder à notre serveur, aller dans le répertoire du site, dans le dossier [wp-content] puis dans le sous dossier [themes], puis dans le dossier de votre thème (dont vous connaissez forcément le nom 😛 )

    On cherche le dossier functions.php , nous mettons le curseur à la fin de la dernière ligne (derrière le dernier caractère) et nous ajoutons cette ligne :

    add_filter( 'auto_update_plugin', '__return_true' ); // Plugins

    (Pour sélectionner sans erreurs une ligne de code, faites un triple clic dessus, puis copiez et collez-la où il faut)

    Ensuite, vous enregistrez et vous assurez que c’est bien enregistré sur votre site.

    Il faut bien sûr suivre cette procédure pour chacun de vos sites WP !

    Maintenant, nous allons gérer ce fameux cache du navigateur de notre visiteur

    Je vous avais dit plus haut que les caches WordPress étaient une source de faille de sécurité.

    Si vous en avez déployé auparavant, même si en suivant ce tuto vous les avez désinstallés, il restera peut-être des traces dans l’installation.

    Là encore, avec votre outil ftp, allez dans le dossier [wp-content] de chacun de vos sites, vous y verrez un dossier [cache] que vous pouvez supprimer sans arrière pensée !

    Puis nous allons nous tourner vers le fichier magique : .htaccess (à la racine du site).

    Vous l’ouvrez et vous ajoutez en bas  tout ceci :

    Header unset Pragma
    FileETag None
    Header unset ETag
    # EXPIRES CACHING ##
    <IfModule mod_expires.c>
    ExpiresActive On
    ExpiresByType image/jpg "access 1 year"
    ExpiresByType image/jpeg "access 1 year"
    ExpiresByType image/gif "access 1 year"
    ExpiresByType image/png "access 1 year"
    ExpiresByType text/css "access 1 month"
    ExpiresByType text/html "access 1 month"
    ExpiresByType application/pdf "access 1 month"
    ExpiresByType text/x-javascript "access 1 month"
    ExpiresByType application/x-shockwave-flash "access 1 month"
    ExpiresByType image/x-icon "access 1 year"
    ExpiresByType audio/mpeg3 "access 1 year"
    ExpiresDefault "access 1 month"
    </IfModule>
    ## EXPIRES CACHING ##

    Puis bien entendu vous enregistrez et sauvegardez à nouveau dans le site avec l’outil de ftp.

    Désormais, votre site ne fera plus de signaux ou stockages inutiles, c’est juste le navigateur du visiteur qui gardera ce qu’il a de toutes façons stocké en cache (ça c’est de la délégation ! 🙂 ).

    Il y a églement des pseudo moteurs de recherche qui « attaquent les sites récents (et créent plein de liens doûteux).

    Pour les éviter, j’ajoute en haut du .htaccess :

    # BEGIN Customization
    # Some description explaining what the entries below are supposed to do.
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteCond %{HTTP_REFERER} site\.ru [NC,OR]
    RewriteCond %{HTTP_REFERER} burger-imperia\.com [NC]
    RewriteRule ^(.*)$ - [F]
    </IfModule>
    # END Customization

    Tant que nous y sommes, nous allons empècher les curieux de visiter l’arborescence du site :

    Options All -Indexes

    Comme nous avons touché au .htaccess, nous allons prendre une petite précaution : il arrive que ça fâche WordPress, nous allons donc dans notre interface d’administration WP sur [Réglages] – [Permaliens], là nous allons noter la structure des permaliens, les remettre en « simple », puis les remettre comme avant.

    Si vous ne les aviez pas réglés avant, mettez les juste sur « nom de l’article », c’est meilleur pour le référencement.

    Enfin, allons à la racine du site dans le fichier wp-config.php et supprimons la ligne :

    define('WP_CACHE', true);

    Enfin, nous allons peaufiner WordPress car je suis perfectionniste !

    Pour exécuter des tâches de maintenance, comme les mises à jour, les serveurs sous Unix ou Linux utilisent un protocole appelé cron quiva déclencher la tâche selon un agenda.

    WP utilise cron, mais d’une manière curieuse : wp-cron.php stocke l’agenda et le déclenche quand un visiteur ouvre une page. Ceci peut créer des soucis, si un site est très peu visité (le cron n’est pas déclenché) ou si il y a plusieurs sites sur le même hébergement (les tâches peuvent être déclenchées en même temps et surcharger le serveur).

    Bref, il est mieux de contrôler ses crons (et en plus d’être averti s’il y a un souci).

    Pour cela deux manips.

    Dans un premier temps, nous allons désactiver le cron de WordPress dans le fichier wp-config.php qui se trouve à la racine du site, il faut pour cela ajouter juste en dessous de cette ligne

    define('DB_COLLATE', '');

    les deux lignes suivantes

     /** Desactivate WordPress WP_CRON **/
    define ('DISABLE_WP_CRON', true);

    Puis nous allons sur cPanel chez PlanetHoster sur « tâches cron »

    Et nous renseignons la tâche cron (en l’occurrence, le déclenchement par le serveur du cron de WP)

    php -q /home/lenomdemoncompte/public_html/lecheminversmonsite/wp-cron.php >/dev/null 2>&1

    où vous renseignez bien sûr le vrai nom de votre compte et le bon chemin du site (astuce, il apparaît dans la fenêtre de filezilla).

    Nous précisons bien sûr la fréquence (ici toute les heures, 15 minutes après l’heure).

    Si vous avez plusieurs sites WordPress sur l’hébergement, pensez à décaler les déclenchements pour que les cron se passent bien l’un après l’autre !

    Et surtout, n’hésitez pas à demander au support de PlanetHoster de vous confirmer la bonne syntaxe de votre commande : c’est crucial pour le bon fonctionnement de vos sites et ils seront ravis de vous aider.

    Le bon robots.txt pour WordPress

    Il est utile pour les robots des moteurs de recherche de savoir ce qu’ils n’ont pas à indexer.(ça allège le boulot du moteur, bref, c’est bon pour le référencement.)

    Normalement il est créé virtuellement par WP et éventuellement amendé par vos extensions SEO ou de sécurité.

    Pour le SEO, j’utilise The SEO Framework, ou quand j’aide des utilisateurs uniquement francophones, SEOPress.

    L’interface chaise/clavier

    Là c’est nous !

    N’oublions jamais que si le pirate a du mal à attaquer le site, il peut tenter de demander à l’admin de lui donner les clefs ! Donc pensez à être prudents !

    Pour vous amuser, regardez cette tentative de m’extorquer les identifiants et mots de passe 😉

    Voilà, nous avons ensemble sécurisé un site WordPress en contrôlant les éléments clefs :

    • sécurité du serveur
    • sécurité de l’administration WordPress
    • sécurité du contenu et des visiteurs
    • avec un protocole de sauvegardes
    • avec un protocole de mises à jour
    • avec un protocole de reporting

    Ça nous a pris une grosse heure et nous pouvons désormais nous consacrer l’âme en paix à nos tâches constructives.

    (pensez à vos mentions légales et à l’information sur les cookies)

    Nos visiteurs peuvent interagir en confiance avec notre site !

    Voici un exemple de sité sécurisé avec la méthode de l’Almanet : les T-shirts pour homme GoudronBlanc

    Nous avons un site bien propre et bien référencé : les moteurs de recherche font attention à la sécurité eux aussi 😉

    N’hésitez pas à poser des questions sur ce tuto, grâce à vous il pourra s’améliorer.

    Si vous avez des questions sur votre cas particulier, je serai ravi d’y répondre à titre professionnel.

    [dkpdf-button]

    Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

    #11534
    nam1962nam1962
    Maître des clés

    Depuis que j’ai installé mes sites et ceux que je fais pour d’autres avec cette finalisation, je ne vois que des utilisateurs ravis :

    – quasi pas de fausses inscriptions (quelques unités par an)
    – pas de référencement pourri
    – sites qui ne sont pas ralentis.
    – pas de stress quand on apprend l’existence de malware comme Linux.Ngioweb

    😉

    Un jeune site que j'aime bien, la ferrari du T-shirt ...bio en plus : GoudronBlanc

2 sujets de 1 à 2 (sur un total de 2)
  • Vous devez être connecté pour répondre à ce sujet.