LOL I'm delighted it's been taken over by the nerds!Do you mind if the nerds continue to cyber-squat on this thread..
This is actually one of the finest threads i've seen on the net about this topic
LOL I'm delighted it's been taken over by the nerds!Do you mind if the nerds continue to cyber-squat on this thread..
This is actually one of the finest threads i've seen on the net about this topic
That's really kind, Anthony. I'll keep that in mind. Thank you.XTR threat monitor works on everything, hosting has nothing to do with anything. If you have Xenforo running, its just an addon, like any other addon. You won't have access to firewalls and such, but you can use Cloudflare.
If you need help, reach out to me. I am retired, I help people for free which gives me something to do.




(ip.src.asnum in {139341 24620 211590 210558 133210 14061 51167 150493 201814 209605 215930 209854 202877 31898 150895 9009 216071 48090 213737 270716 51396 59651 211273 62240 396986 138699 150436 60068 213438 45899 45293 213230 137409 23033 786 55967 20473 203020 18779 45905}) or (ip.src in {91.224.92.0/24 141.98.11.0/24 75.119.128.0/19 185.194.178.0/24})
Roughly half an hour ago I enabled two rules that force interactive challenge for anyone who isn't logged in (doesn't have the xf_user= cookie)

(ip.src eq YOUR.ADMIN.IP.ADDRESS)
(ip.src eq 203.0.113.10)
robots.txt and ads.txt.(http.request.uri.path eq "/robots.txt") or
(http.request.uri.path eq "/ads.txt")
(http.request.uri.path eq "/admin.php") or
(http.request.uri.path wildcard r"/admin.php/*") or
(http.request.uri.path eq "/install") or
(http.request.uri.path wildcard r"/install/*") or
(http.request.uri.path eq "/api") or
(http.request.uri.path wildcard r"/api/*") or
(http.request.uri.path eq "/src") or
(http.request.uri.path wildcard r"/src/*") or
(http.request.uri.path eq "/internal_data") or
(http.request.uri.path wildcard r"/internal_data/*") or
(http.request.uri.path eq "/library") or
(http.request.uri.path wildcard r"/library/*") or
(http.request.uri.path eq "/cmd.php") or
(http.request.uri.path wildcard r"/cmd.php/*") or
(http.request.uri.path eq "/htaccess.txt")
/api part. You may need to remove or adjust that section.not cf.client.bot
not cf.client.bot and
(
lower(http.user_agent) contains "googlebot" or
lower(http.user_agent) contains "googlebot-image" or
lower(http.user_agent) contains "mediapartners-google" or
lower(http.user_agent) contains "google-read-aloud" or
lower(http.user_agent) contains "adsbot-google" or
lower(http.user_agent) contains "adsbot-google-mobile" or
lower(http.user_agent) contains "googleother" or
lower(http.user_agent) contains "google-inspectiontool" or
lower(http.user_agent) contains "storebot-google" or
lower(http.user_agent) contains "bingbot" or
lower(http.user_agent) contains "duckduckbot" or
lower(http.user_agent) contains "facebookexternalhit" or
lower(http.user_agent) contains "facebot" or
lower(http.user_agent) contains "twitterbot" or
lower(http.user_agent) contains "hetrixtools"
)
lower(http.user_agent) contains "ahrefsbot" or
lower(http.user_agent) contains "mj12bot" or
lower(http.user_agent) contains "dotbot" or
lower(http.user_agent) contains "semrushbot" or
lower(http.user_agent) contains "serankingbacklinksbot" or
lower(http.user_agent) contains "barkrowler" or
lower(http.user_agent) contains "awariobot" or
lower(http.user_agent) contains "trendictionbot" or
lower(http.user_agent) contains "proximic" or
lower(http.user_agent) contains "criteobot" or
lower(http.user_agent) contains "ias crawler" or
lower(http.user_agent) contains "ias_crawler" or
lower(http.user_agent) contains "ttd-content" or
lower(http.user_agent) contains "adkerneltopiccrawler" or
lower(http.user_agent) contains "sirdatabot" or
lower(http.user_agent) contains "uipbot" or
lower(http.user_agent) contains "yandexbot" or
lower(http.user_agent) contains "yandexrenderresourcesbot" or
lower(http.user_agent) contains "yandeximages" or
lower(http.user_agent) contains "baiduspider" or
lower(http.user_agent) contains "bytespider" or
lower(http.user_agent) contains "qwantbot" or
lower(http.user_agent) contains "petalbot" or
lower(http.user_agent) contains "coccocbot" or
lower(http.user_agent) contains "yisouspider" or
lower(http.user_agent) contains "chatgpt-user" or
lower(http.user_agent) contains "oai-searchbot" or
lower(http.user_agent) contains "claudebot" or
lower(http.user_agent) contains "claude-searchbot" or
lower(http.user_agent) contains "perplexitybot" or
lower(http.user_agent) contains "youbot" or
lower(http.user_agent) contains "amazonbot" or
lower(http.user_agent) contains "amzn-searchbot" or
lower(http.user_agent) contains "leikibot" or
lower(http.user_agent) contains "surdotlybot" or
lower(http.user_agent) contains "webcrawler" or
lower(http.user_agent) contains "feedly" or
lower(http.user_agent) contains "applebot" or
lower(http.user_agent) contains "headlesschrome" or
lower(http.user_agent) contains "semrushbot-ba" or
lower(http.user_agent) contains "baiduspider-render"
GET requests to common XenForo areas that can be hit repeatedly by bots or crawlers.not cf.client.bot
and http.request.method eq "GET"
and not any(http.request.cookies["xf_user"][*] ne "")
and (
http.request.uri.path wildcard r"/forums/*" or
http.request.uri.path wildcard r"/threads/*" or
http.request.uri.path wildcard r"/whats-new/*" or
http.request.uri.path wildcard r"/search/*" or
http.request.uri.path wildcard r"/members/*"
)
(
http.request.uri.path wildcard r"/forums/*" or
http.request.uri.path wildcard r"/threads/*" or
http.request.uri.path wildcard r"/whats-new/*" or
http.request.uri.path wildcard r"/search/*" or
http.request.uri.path wildcard r"/members/*"
)
and not cf.client.bot
and http.request.method eq "GET"
/api block carefully.CloudFlare Dashboard > domain you manage > Security > Security Rules > + Create rule > Custom rule.How did you deploy this one please?
(not http.cookie contains "xf_user=" and http.request.uri.path contains "/forums/misc/cookies") or (not http.cookie contains "xf_user=" and not ip.src.country in {"DE" "GB" "US"})

An excellent collection of rules, thank you very much!It is just a practical rule set that may help people
CloudFlare Dashboard > domain you manage > Security > Security Rules > + Create rule > Custom rule.
Here's an example expression and how you can build that visually in the dashboard.
(not http.cookie contains "xf_user=" and http.request.uri.path contains "/forums/misc/cookies") or (not http.cookie contains "xf_user=" and not ip.src.country in {"DE" "GB" "US"})
View attachment 338675
An excellent collection of rules, thank you very much!
Just a grain of salt on some of it, though: some of the rules are based on conventions that robots should follow robots.txt directives, and that all applications, including browsers, scripts or bots, should correctly identify themselves through user-agent.
Both conventions are largely ignored these days, and might not be worth the trouble of trusting them too much. The appeal of grabbing all the possible data and monetizing it is far greater than the zero penalty of breaching a gentleman's agreement that was based on principles of trust and fairness. Any rules that are based on this will only partially and temporarily work, as long as the bots' maintaners are willing to continue to abide to the conventions.
There are bots which do read robots.txt, but only a few of them do follow the allow or disallow directives; others take it as hints on which URLs to probe for juicy stuff, and many other robots which ignore it altogether.
Scrapers in particular going through residential proxies and through scraping services try their best to simulate a real person so that they blend into the general traffic. It's only the pattern of their visits that gives them away, not the client characteristics they provide as user-agent.
Probably best to share the expression, as that converts into the visual. Much easier for people... just my two cents.Here's an example expression and how you can build that visually in the dashboard.

Nice, you can do that at Nginx web server level with similar fingerprint nginx modules.The basic idea is this: scrapers and AI crawlers often try to look “new” by changing IP addresses, clearing cookies, or coming back from different networks. So instead of only looking at an IP address or a cookie, this add-on also uses an open-source library called FingerprintJS.
FingerprintJS looks at a range of browser and device signals and generates a visitor ID. It is not magic, and it is not treated as proof that someone is human or a bot, but it gives the add-on another way to recognise when similar traffic may be coming back again.
That matters because a lot of scraping traffic does not behave like a normal person reading a forum. It may rotate through IPs, hit lots of pages quickly, trigger repeated errors, skip normal JavaScript or cookie behaviour, access unusual routes, or keep coming back looking “fresh”.

Nice, you can do that at Nginx web server level with similar fingerprint nginx modules.
Cloudflare Enterprise plans have ja3 and ja4 fingerprint support https://developers.cloudflare.com/bots/additional-configurations/ja3-ja4-fingerprint/ as part of Cloudflare Enterprise Bot Management. It's very powerful been using it on my Cloudflare Enterprise plan for past 5+ yrs
CF Enterprise plans also have detection ids tracking and usage for CF WAF https://developers.cloudflare.com/bots/additional-configurations/detection-ids/
Example for ClaudeBot request in CF Security Events analytics
View attachment 338700
CF JA4 Signal Intelligence fields explained https://developers.cloudflare.com/b...ons/ja3-ja4-fingerprint/signals-intelligence/
Shame it's CF Enterprise plan only.
That's a very interesting approach, and hopefully a very good alternative for people who'd rather avoid adding CloudFlare as a completely new dependency in their chain.
I will still pursue CF filtering for the simple reason that it prevents something in my own hosting from going far deeper than IP addresses to fingerprint visitor devices, because that would make my life a whole lot harder to explain the monstrosity of GDPR compliance to some bureaucrats, to prove that I have informed the visitor about the data being collected and obtained their consent before storing any of it... yeeeesh. The easiest way to address an issue is to make sure that the issue cannot manifest itself at all. So the more filtering I can offload to CF upstream, based on very high level rules about the country or ISP or presence of a cookie or whatever that can not be easily and directly linked to an individual, and before that traffic even reaches my forum, the better.
[edit] Just caught a bot sneaking in: identifies itself as Facebook External Hit and came through... a residential connection. Man, these are desperate to try ANYTHING to get in!
We use essential cookies to make this site work, and optional cookies to enhance your experience.