Block Groups
One-click edge blocking for known hacking-attempt traffic — WordPress, PHP, Magento probes, dotfile exposure, webshells. Saves bandwidth, cleans your analytics, included on every plan.
Most non-trivial websites are hammered around the clock by bots probing for
/wp-admin/, /phpmyadmin/, /.git/HEAD, /wp-config.php, /shell.php,
and a long tail of similar paths. If your site doesn't run that stack,
serving even a 404 is wasted bandwidth, wasted origin CPU, and pollution in
your analytics and firewall dashboards.
Block Groups give you curated, opt-in lists of these path patterns. Enable a group on a domain and matching requests get a bodyless 404 at the edge — before any upstream fetch.
Free on every plan. Disabled by default per domain; you opt in to the groups that fit your stack.
How it works
Visitor → Serpwise edge → ┐
├─ path matches an enabled block group?
│ yes → return 404, never reach origin
│ no → continue normal request flow
▼
OriginMatching happens after AI Access decisions and before the redirect/cache/ rules pipeline. Per-domain matchers are compiled once at config load — the hot path is a single regex automaton scan over your enabled groups, sub-microsecond in practice. Adding more groups doesn't slow real traffic.
Available groups
| Group | What it blocks | Safe on… |
|---|---|---|
| WordPress probes | /xmlrpc.php, /wp-config.php*, /wp-mail.php, /wp-signup.php, /wp-activate.php, /wp-trackback.php, /wlwmanifest.xml, /wp-load.php, /wp-settings.php, /wp-blog-header.php — paths no real visitor or admin requests | Any site, including WordPress |
| WordPress admin protection | /wp-admin, /wp-admin/*, /wp-login.php — needs an IP allowlist or the bot filter to start blocking. Until you configure one, the group only monitors. | Any WordPress site where you know your admin IPs (or want to drop scripted brute-force traffic) |
| PHP probes | /phpmyadmin/*, /pma/*, /phpinfo.php, /admin.php, /install.php, .user.ini | Any non-PHP site |
| Magento | /index.php/admin/*, /downloader/*, /connect/*, Magento_Version, app/etc/local.xml | Non-Magento sites |
| Drupal & Joomla | /administrator/*, /sites/default/*, /CHANGELOG.txt, web.config, common installer paths | Non-Drupal, non-Joomla sites |
| Source control & dotfile exposure | /.git/*, /.svn/*, /.env*, /.aws/*, /.ssh/*, /.DS_Store, /.htaccess, /.htpasswd | Every site |
| Known webshell paths | c99.php, r57.php, wso.php, cmd.php, shell.php, eval.php, adminer.php, cgi-bin/*, common Tomcat manager paths | Every site |
| Config & secrets probes | /server-status, /server-info, /credentials*, /secrets*, *.sql, docker-compose.yml, Dockerfile | Every site |
| API & docs probes | /graphql, /graphiql, /api/graphql, /swagger*, /swagger-ui*, /api-docs*, /openapi.*, /v1–/v3/api-docs, /redoc*, /actuator/*, /management/* | Sites without a GraphQL endpoint or exposed API docs |
We curate these lists from CrowdSec community blocklists, OWASP CRS, and the 404 patterns we see hitting actual Serpwise customer domains. Lists update with every gateway release — no config change needed on your end.
Block mode vs monitor mode
Each subscription has a mode you control per group:
- Block — matching requests get a bodyless 404 immediately. This is the default when you enable a group.
- Monitor — matching requests are logged but pass through to origin unchanged. Use this if you want to see what would be blocked before committing to active blocking.
You can switch a group between modes any time. Changes take effect within a few seconds on every edge node.
Bot filter
Each block group also has a bot filter controlling who the block applies to:
- All traffic (default) — block every matched request, regardless of
who sent it. This is the right mode for groups that match paths no human
ever legitimately requests (
/xmlrpc.php,/.git/*,/phpinfo.php). - Known bots only — block only requests classified as bots by the gateway or matching one of your custom User-Agent substrings. Humans hitting the same path pass through to origin.
The bot filter is the right tool for protecting paths that real humans
also hit — like WordPress admin login. With the filter set to Known
bots only, the gateway lets you log in normally from any browser, but
404s scripted brute-force traffic that announces itself with
python-requests/2.x or a known bot User-Agent.
Custom bot patterns
Under the bot filter you can add your own User-Agent substrings to the "bad bot" list. The match is case-insensitive substring — no regex. Common picks the dashboard offers as one-click chips:
AhrefsBot SemrushBot MJ12bot DotBot PetalBot
python-requests curl/ wget/Avoid short generic substrings like bot — they'll match real bots you
want to allow (Googlebot) and incidental browser strings too. The
dashboard enforces a 2-character minimum and rejects regex metacharacters.
IP allowlist
Every block group also accepts an IP allowlist. Requests coming from an allowlisted IP bypass the block group entirely — they're recorded as allowlisted in the request log but otherwise treated as normal traffic.
- IPv4 (
203.0.113.42,203.0.113.0/24) and IPv6 (2001:db8::1,2001:db8::/32) are both accepted. - Bare IPs without a prefix are promoted to
/32(v4) or/128(v6) on load —203.0.113.42and203.0.113.42/32are equivalent.
Find your current IP at ipinfo.io. For office
networks behind a stable egress IP, the /24 form covers the whole block
in one entry.
Evaluation order
When a request matches a block group's path patterns, the gateway runs these checks in order:
- IP allowlist — if the client IP is allowlisted, pass through.
- Bot filter — if set to "Known bots only" and the request doesn't look like a bot, pass through.
- Safe-default fallback — for groups that require an allowlist
(
wordpress-admin), if no allowlist is configured the group drops to monitor-only so admins never get locked out by an empty config. - Verified search bots — Googlebot and Bingbot are always exempt.
- Block — return 404.
Enable for a domain
- Open the domain → Settings → Security, then click the Block Groups tab.
- Toggle the groups that fit your stack.
- Each group defaults to block mode. Switch to monitor mode for a few days first if you want to be cautious.
That's it. No origin code, no firewall config, no waiting on engineering.
The Block Groups tab is bookmarkable: ?securityTab=block-groups opens
it directly.
See what's been blocked
The org dashboard surfaces a Blocked bot requests this week widget with the weekly total, a daily sparkline, and the top three groups by hit count. The Block Groups sub-tab also shows a per-group seven-day count so you can see which lists are pulling their weight.
Everything is logged in the standard request log too — block_group_key,
block_mode, and fp_signal columns are populated for any request that
matched a group.
False positives
When a request that matched a block group looks like it might be a real visitor — for example, the Referer comes from a legitimate page on your own domain — Serpwise records a false-positive signal alongside the block event. In monitor mode this is logged and the request continues normally. In block mode the 404 is still returned (the curated lists are tight enough that real users hitting these paths are extremely rare), but the signal is captured so we can review and tune the curated lists across all customers.
If you ever see a legitimate path being blocked, disable the relevant group or flip it to monitor mode while you sort it out, and let us know — we review false-positive candidates regularly and prune patterns that cause real-world friction.
What is never blocked
- Verified search engine crawlers (Googlebot, Bingbot) — even in block mode, block groups never deny these. Real search bots probing odd paths is rare but possible, and staying invisible to them is cheap insurance.
- Allowlisted IPs — anything you put on a group's IP allowlist bypasses it entirely.
- Humans on "Known bots only" groups — when the bot filter is set to "Known bots only", requests that don't look like bots pass through regardless of the path match.
- Anything outside the enabled groups. Paths you haven't subscribed to are forwarded to origin exactly as before.
Legacy wordpress group
The original combined WordPress group was retired in favor of
wordpress-probes + wordpress-admin. Existing subscriptions were
migrated automatically to wordpress-probes — you keep the safe blocking
behavior for the always-illegitimate paths. To protect /wp-admin and
/wp-login.php, subscribe to wordpress-admin and add your admin IP to
the allowlist (or enable the bot filter).
Limitations
- Custom block groups aren't editable from the dashboard. The curated catalog is maintained by Serpwise. If you want to block a path pattern not covered by an existing group, use a Rule instead.
- Bot filter is User-Agent based. A determined attacker can spoof a browser User-Agent and slip past "Known bots only". For high-value paths, combine the bot filter with the IP allowlist — the allowlist is the stronger control.
- Not a WAF. Block Groups handle one specific, high-leverage class of noise: known hacking-attempt path patterns. For application-layer attacks inside legitimate routes (SQL injection in a query string, request smuggling, etc.), see Shield and your origin's WAF.