Les deux révisions précédentesRévision précédenteProchaine révision | Révision précédente |
informatique:securite:wordfence [28/05/2024 23:02] – [Wordfence -> firewall] cyrille | informatique:securite:wordfence [02/08/2024 12:02] (Version actuelle) – [Autour de Wordfence] cyrille |
---|
====== Wordfence (wordpress plugin) ====== | ====== Wordfence (wordpress WAF plugin) ====== |
| |
Pare-feu d'applications Web ([[/glossaire/WAF]]) pour [[/informatique/wordpress|Wordpress]]. | Pare-feu d'applications Web ([[/glossaire/WAF]]) pour [[/informatique/wordpress|Wordpress]]. |
| |
Super plugin que je utilise depuis des années sur de nombreux sites. | Super plugin que je utilise depuis des années sur de nombreux sites. |
| |
| ===== Configuration ===== |
| |
| ==== General Wordfence Options ==== |
| |
| Cocher "Bypass the LiteSpeed "noabort" check". |
| |
| ==== Advanced Firewall Options ==== |
| |
| Immediately block IPs that access these URLs: |
| <code> |
| /.git/* |
| /.env |
| /wp-config.php |
| /wp-content/debug.log |
| /vendor/phpunit/* |
| </code> |
| |
| ==== Activity Report ==== |
| |
| List of directories to exclude from recently modified file list |
| <code> |
| wp-content/cache |
| wp-content/wflogs |
| wp-content/et-cache |
| </code> |
| |
| ===== Autour de Wordfence ===== |
| |
| * [[https://github.com/kadekjayak/notification-wordfence|kadekjayak/notification-wordfence]] Catch Wordfence email alert and send it to your notification channel (Slack or Telegram) |
| * [[https://github.com/SentinalMax/LogFence|SentinalMax/LogFence]] Wordfence attack log exporting tool |
| * [[https://github.com/Paolo-Monti/Firewall-WAF-Wordfence|Paolo-Monti/Firewall-WAF-Wordfence]] qui scanne la datatable de Wordfence et reproduit la liste d'ip bloquées sur iptables. C'est un gain de performance notable. |
| |
| collection of bad username and file paths for WordFence: |
| * https://github.com/SimonHayter/Wordfence-Ban-Users-and-URL-list |
| * https://github.com/itconsulting-live/wordpress-urls-to-block |
| |
===== Wordfence -> firewall ===== | ===== Wordfence -> firewall ===== |
* les ''blocked:wfsn'' et ''blocked:wordfence'' sont-ils tous relayés par les ''actions'' ? | * les ''blocked:wfsn'' et ''blocked:wordfence'' sont-ils tous relayés par les ''actions'' ? |
* quelles actions ''wordfence_security_event'' traquées ? | * quelles actions ''wordfence_security_event'' traquées ? |
* oui : ''loginLockout'' | * oui : ''loginLockout'', ''block'' |
* ??? : ''increasedAttackRate'', ''block'' | * ??? : ''increasedAttackRate'' |
* Un daemon/cron qui exploite les DB tables de Wordfence pour reproduire les IPs bloquées en règles pour le FW | * Un daemon/cron qui exploite les DB tables de Wordfence pour reproduire les IPs bloquées en règles pour le FW |
* atttention aux évolutions de Wordfence qui pourraient changer le schéma de la DB | * atttention aux évolutions de Wordfence qui pourraient changer le schéma de la DB |
| * Ou alors une solution qui reste dans la philosophie de Crowdsec: |
| * générer un fichier de log |
| * utiliser un scénario pour déclencher les décisions |
| |
Les données WF dans la DB | Les données WF dans la DB |
| * en synthèse les données ne sont pas disponibles longtemps |
* la table ''wfblockediplog'' ne contient que les stats par ip des 30 derniers jours (//champ ''unixday''//) | * la table ''wfblockediplog'' ne contient que les stats par ip des 30 derniers jours (//champ ''unixday''//) |
* la table ''wfhits'' contient les logs des attaques sur un temps long (//exemple champ ''ctime'' 2024-04-29 -> 2022-03-30//) | * la table ''wfhits'' contient par défaut 2000 lignes des attaques |
| * réglable dans "Tool Options > Live Traffic Options >" avec la combinaison de "Amount of Live Traffic data to store (number of rows)" et "Maximum days to keep Live Traffic data (1-30 days)" |
* les actions: | * les actions: |
* blocked:wfsn : Blocked by Wordfence Security Network | * blocked:wfsn : Blocked by Wordfence Security Network |
* lockedOut, loginFailInvalidUsername, loginFailValidUsername, loginOK, logout, lostPassword, scan:detectproxy, user:passwordReset | * lockedOut, loginFailInvalidUsername, loginFailValidUsername, loginOK, logout, lostPassword, scan:detectproxy, user:passwordReset |
| |
| |
Projets: | |
* [[https://github.com/Paolo-Monti/Firewall-WAF-Wordfence|Paolo-Monti/Firewall-WAF-Wordfence]] qui scan la data table de Wordfence et reproduit la liste d'ip bloquées sur iptables. C'est un gain de performance notable. | |
| |
===== Autour de Wordfence ===== | |
| |
* [[https://github.com/kadekjayak/notification-wordfence|kadekjayak/notification-wordfence]] Catch Wordfence email alert and send it to your notification channel (Slack or Telegram) | |
* [[https://github.com/SentinalMax/LogFence|SentinalMax/LogFence]] Wordfence attack log exporting tool | |
| |
| |
collection of bad username and file paths for WordFence: | |
* https://github.com/SimonHayter/Wordfence-Ban-Users-and-URL-list | |
* https://github.com/itconsulting-live/wordpress-urls-to-block | |
| |
===== Tech ===== | ===== Tech ===== |
==== WP actions ==== | ==== WP actions ==== |
| |
* do_action('wordfence_security_event', '**autoUpdate**', ['version']) | |
* do_action('wordfence_security_event', '**wafDeactivated**', ['username', 'ip']) | |
* do_action('wordfence_security_event', '**wordfenceDeactivated**', ['username', 'ip']) | |
* do_action('wordfence_security_event', '**block**', ['ip', 'reason', 'duration']) | * do_action('wordfence_security_event', '**block**', ['ip', 'reason', 'duration']) |
| * en rapport avec le ''throttling'' |
| * déclenchée depuis les fonctions ''takeBlockingAction($configVar, $reason)'' et ''do503($secsToGo, $reason, $sendEventToCentral = true)'' |
* do_action('wordfence_security_event', '**throttle**', ['ip', 'reason', 'duration']) | * do_action('wordfence_security_event', '**throttle**', ['ip', 'reason', 'duration']) |
| * déclenchée depuis les fonctions ''takeBlockingAction($configVar, $reason)'' |
* do_action('wordfence_security_event', '**lostPasswdForm**', ['email', 'ip']) | * do_action('wordfence_security_event', '**lostPasswdForm**', ['email', 'ip']) |
| * sous certaines conditions peut initier un blocage d'ip via l'appel à '''lockOutIP($IP, $reason)'' |
* do_action('wordfence_security_event', '**loginLockout**', ['ip', 'reason', 'duration']) | * do_action('wordfence_security_event', '**loginLockout**', ['ip', 'reason', 'duration']) |
* déclenché depuis les fonctions ''lockOutIP($IP, $reason)'' et ''processBruteForceAttempt($authUser, $username, $passwd)'' ; il s'agit bien de bloquer une IP pour abus sur le login ou lostpassword | * bloquer une IP pour abus sur le login ou lostpassword |
| * déclenchée depuis les fonctions ''lockOutIP($IP, $reason)'' et ''processBruteForceAttempt($authUser, $username, $passwd)'' |
* do_action('wordfence_security_event', '**NewLocation**', ['username', 'ip']) aka 'newDevice' | * do_action('wordfence_security_event', '**NewLocation**', ['username', 'ip']) aka 'newDevice' |
* do_action('wordfence_security_event', '**nonAdminLogin**', ['username', 'ip']) | * do_action('wordfence_security_event', '**nonAdminLogin**', ['username', 'ip']) |
* do_action('wordfence_security_event', '**breachLogin**', ['username', 'resetPasswordURL', 'supportURL', 'ip']) | * do_action('wordfence_security_event', '**breachLogin**', ['username', 'resetPasswordURL', 'supportURL', 'ip']) |
* do_action('wordfence_security_event', '**increasedAttackRate**', ['attackCount', 'attackTable', 'duration', 'ip']) | * do_action('wordfence_security_event', '**increasedAttackRate**', ['attackCount', 'attackTable', 'duration', 'ip']) |
| * do_action('wordfence_security_event', '**autoUpdate**', ['version']) |
| * do_action('wordfence_security_event', '**wafDeactivated**', ['username', 'ip']) |
| * do_action('wordfence_security_event', '**wordfenceDeactivated**', ['username', 'ip']) |
| |
* do_action_ref_array('wp_authenticate', [&$username, &$password]) | * do_action_ref_array('wp_authenticate', [&$username, &$password]) |
* do_action('wfls_xml_rpc_blocked', 2) | * do_action('wfls_xml_rpc_blocked', 2) |