- Problem
- In one day, 27 to 29 of the 32 "users" our analytics counted on BLE Radar were one crawler pool in Shanghai: 33 rotating addresses inside a single /24 of China Telecom, running a real Chrome, one page per address, walking the public per-hex data pages. It skewed every analytics number and harvested data our terms of use forbid scraping.
- Evidence
- Web server logs, read as counts and networks only, and 14 days of app traffic: 0 real app users from China. The pool never asked for robots.txt, and no address made more than 3 requests to the stats page, so a per-address rate limit would never have fired.
- My decision
- Block China on BLE Radar only. Every other site stays open.
- What was built
- Sentinel built an nginx geo map of every China prefix (RIPEstat country data: 5,689 IPv4 and 2,383 IPv6 prefixes) that answers 403 before any PHP runs, scoped to one site. Carve-outs for our own server, search engines, payment webhooks. One command each for on, off, uninstall and refresh, a backup first, and an automatic undo if the config test fails.
- How it was tested
- A 61-check harness on a full copy of the nginx config with a private nginx: blocked against allowed addresses, uninstall leaves the site config byte-identical, bad list data is refused. I installed it myself, in manual mode.
- Result
- Live on BLE Radar only, with one command each to switch it on or off.
- Also found
- Every per-hex page cost about 1.4 s of database work: a denial-of-service lever for anyone, from any country. It is now cached at about 0.07 s, with the values verified equal to a direct read.