

Configure Cloudflare Account IP List mode, synchronisation interval, historical WAF lookback, and block threshold from Network Admin.
Grey Rock Block Synchroniser for Wordfence and Cloudflare sends qualifying Wordfence firewall blocks to Cloudflare so hostile traffic can be stopped at Cloudflare’s network edge before it reaches the WordPress server.
The name Grey Rock is inspired by the grey rock method: becoming uninteresting and unrewarding to someone seeking attention or a reaction.
Grey Rock applies that concept to hostile website traffic. Wordfence identifies qualifying blocked IP addresses, and Grey Rock synchronises them with Cloudflare. Cloudflare can then stop those addresses at the network edge before their requests reach WordPress.
The objective is simple: make your website boring to repeat attackers. Instead of allowing the same hostile traffic to keep reaching the server, Grey Rock helps the site respond with less exposure, less interaction and fewer consumed server resources.
Grey Rock does not replace Wordfence, Cloudflare or a layered security program. It connects them so qualifying Wordfence blocks can be enforced earlier, closer to the source of the traffic.
The plugin supports two Cloudflare destinations.
Creates Cloudflare IP block rules for one zone.
Use this mode when Wordfence blocks should protect one Cloudflare zone.
Adds IP addresses to a reusable Cloudflare account-level IP list.
Use this mode when several domains or Cloudflare zones should share the same list.
An Account IP List does not block traffic by itself. You must create a Cloudflare Custom Rule with the Block action in every zone that should use the list.
Example rule:
ip.src in $wordfence_hot_blocklist
The recommended list name is:
wordfence_hot_blocklist
The plugin can synchronise:
blocked:waf.Historical synchronisation is configurable:
Repeated events from the same address are deduplicated before synchronisation.
Invalid, private and reserved IP addresses are rejected during historical-event processing.
The optional administrator allow list is intended for administrators
whose public address changes and is already maintained by a DDNS
provider.
Enter a hostname only, for example:
admin.example.com
Do not enter a URL, path or port.
Grey Rock does not create or update DNS records. It also does not provide a DDNS service or require DNS editing permission.
If Cloudflare hosts the DDNS record, configure the dedicated hostname
as DNS only. A proxied hostname returns Cloudflare proxy addresses
instead of the administrator’s actual public address.
Grey Rock resolves public A and AAAA records. Private, loopback,
link-local, reserved and invalid addresses are rejected. Multiple valid
public results are displayed and handled separately.
Configuration procedure:
When enabled, the resolved addresses are excluded from current and
historical Wordfence candidates.
During synchronisation, Grey Rock removes those addresses from the
configured Cloudflare Account IP List or Zone Access Rules destination.
Related local synchronisation records are cleared only after
Cloudflare confirms the required final state.
A failed Cloudflare removal causes the synchronisation to fail so a
later run can retry.
Grey Rock refreshes the lookup when settings are saved and before
synchronisation when the previous attempt is at least five minutes old.
A temporary DNS failure retains the last successful addresses for up
to 24 hours. After that period, no stored address remains effective
until resolution succeeds.
A successful lookup replaces the old address set. Previous addresses
are no longer trusted after DNS returns a different set.
IPv4 and IPv6 addresses remain exact individual addresses. Grey Rock
does not expand IPv6 addresses to /64 and does not create inferred
CIDR allow-list entries.
In multisite, Network Admin may provide one shared DDNS hostname for
all inheriting sites. Site-specific configurations may use a separate
hostname.
A DNS-only DDNS hostname exposes its current public address through
DNS. Use a dedicated non-web hostname and consider that disclosure
before enabling the feature.
Grey Rock supports three scheduling methods:
Available intervals are every minute, every 5 minutes, every 15 minutes and hourly.
WP-Cron is request-driven. Selecting every minute makes synchronization eligible every minute but does not guarantee execution at an exact minute boundary.
External scheduling does not require Docker. An ordinary WordPress installation can use:
wp --path=/var/www/html grey-rock-block-synchroniser-for-wordfence-and-cloudflare sync-site --due
A multisite network can use:
wp --path=/var/www/html grey-rock-block-synchroniser-for-wordfence-and-cloudflare sync-network --due
sync-network processes only sites inheriting Network Admin settings. A selected multisite site can use `sync-site` with WP-CLI's `--url` parameter.
An external scheduler may check every minute. The --due command reads the GUI interval and exits successfully without synchronizing when the interval has not elapsed or External scheduler is not selected.
The GUI buttons and --force commands run immediately regardless of scheduling method or interval. Every attempt, including a manual or failed attempt, resets the due interval.
A site-level atomic lock prevents overlapping synchronization. An abandoned lock becomes stale after 15 minutes.
Selecting External scheduler or Manual synchronization only removes only Grey Rock’s synchronization event. It does not disable WordPress cron globally.
Cleanup is separate maintenance and remains scheduled hourly in all three modes.
Complete systemd, traditional cron, hosting control-panel and optional Docker Compose examples are provided in the GitHub README.
When network activated:
The plugin provides:
Wordfence does not provide a stable public API for every block source used by this plugin.
Grey Rock checks whether the installed Wordfence active-block interface is available before using it. When that interface is unavailable, historical WAF synchronisation continues through the Wordfence event table.
A future Wordfence release could change its internal class or database schema. Such a change may require a Grey Rock compatibility update.
Grey Rock Block Synchroniser for Wordfence and Cloudflare is developed independently by Greyscale Zone.
This plugin is not affiliated with, endorsed by or sponsored by Wordfence or Cloudflare. Wordfence and Cloudflare are trademarks of their respective owners.
This plugin connects to the Cloudflare API when an administrator:
The Cloudflare API is required because the plugin’s purpose is to create and remove Cloudflare firewall entries.
Depending on the configured mode and operation, the plugin sends some or all of the following data to Cloudflare:
The plugin retrieves Cloudflare account lists, list items and firewall access rules so it can validate settings, avoid duplicates, reconcile state and remove entries.
Communication is sent directly from the WordPress server to Cloudflare over HTTPS using the WordPress HTTP API.
DDNS lookups use the DNS resolver configured for the WordPress server. The resolver operator may receive the queried hostname and ordinary DNS request metadata. The DNS lookup does not include the Cloudflare API token and does not update the DNS record.
The plugin does not send WordPress post content, user passwords, email addresses or the Cloudflare token to Greyscale Zone. It does not provide Greyscale Zone with telemetry or usage analytics.
By configuring and using Cloudflare functions in this plugin, the administrator directs the plugin to transmit the described information to Cloudflare.
Cloudflare Terms of Service:
https://www.cloudflare.com/terms/
Cloudflare Privacy Policy:
https://www.cloudflare.com/privacypolicy/
Cloudflare API documentation:
https://developers.cloudflare.com/api/
The plugin stores its configuration in the WordPress database. This includes the Cloudflare API token and Cloudflare identifiers entered by an administrator.
The plugin stores synchronised public IP addresses, block reasons, timestamps, expiration information and retry state in a site-specific WordPress database table.
When DDNS lookup is configured, the plugin also stores the hostname, the most recently accepted public addresses, lookup timestamps, lookup status and a safe error message in WordPress options.
IP addresses may constitute personal data under some privacy laws. Site administrators are responsible for establishing a lawful basis, retention policy and appropriate disclosure for their use of Wordfence, Cloudflare and this plugin.
Historical entries receive an expiration based on the configured lookback period. Temporary active Wordfence blocks may use the Wordfence expiration time.
Manually added Cloudflare account-list entries remain until an authorised administrator or another authorised Cloudflare operation removes them.
Uninstalling the plugin removes its local plugin options and tables according to the included uninstall routine. It does not automatically remove every entry previously sent to Cloudflare. Administrators should review the Cloudflare destination when permanently discontinuing the plugin.