From 40a1fa1e427fb487cb3f0ac661312b4a93bb8b7b Mon Sep 17 00:00:00 2001 From: Frans Veldman Date: Fri, 12 Jun 2026 12:07:17 +0000 Subject: [PATCH] Enhanced the README file, added picture --- README.md | 26 +++++++++++++++----------- captcha.jpg | Bin 0 -> 34292 bytes 2 files changed, 15 insertions(+), 11 deletions(-) create mode 100644 captcha.jpg diff --git a/README.md b/README.md index 5245a9a..ed0629d 100644 --- a/README.md +++ b/README.md @@ -8,13 +8,15 @@ My SearxNG instance on [searx.thefloatinglab.world](https://searx.thefloatinglab Despite the deployment of botlists, limiters, and manually blocking the most obvious bots, it still remained an endless battle. Most of the time my instance was useless. So either I had to give up on this project, or find a way to block the bots and let the genuine users through. A captcha system might not be popular, but on the other hand, a useless site is well, pretty useless. By combining the captcha system with a cookie, only once in 90 days the user has to solve the captcha. A small price to pay for access to a wonderfull instance! +![picture](https://git.thefloatinglab.world/TheFloatingLab/SearxNG-Captcha/raw/branch/main/captcha.jpeg?raw=1) + # Features - No modification of the SearxNG code is necessary, the captcha system runs entirely within Nginx. - The captcha, once solved, stays valid for 90 days. - No puzzles to solve, just a confirmation click. - It is possible and encouraged to self host the captcha system, so no information leaks to the outside world. - The privacy and security of SearxNG are maintained if a self hosted captcha system is used. -- Optional automatic reporting to AbuseIPDB. +- Optional automatic reporting to [AbuseIPDB](https://www.abuseipdb.com). - Optionally, Cloudflare Turnstile can be used as captcha provider instead. - Everything is script based, no compilation is necessary. - In an emergency, all existing cookies can be invalidated at once. @@ -28,7 +30,7 @@ I have not made an attempt to add subdirectories to this git, so you have to dow - Lua and some dependencies needs to be installed (apt install lua) - It is recommended to self host the captcha engine, see: [github.com/tiagozip/cap](https://github.com/tiagozip/cap). - A site/secret key set and URL/API-key for the captcha engine. -- Optionally, an API key for AbuseIPDB. +- Optionally, an API key for [AbuseIPDB](https://www.abuseipdb.com). ## 00-captcha-init.conf *This file resides on my system in "/etc/nginx/conf.d".* @@ -43,12 +45,14 @@ The COOKIE_SECRET must be generated with "openssl rand -hex 32" ~~~ COOKIE_SECRET = ABUSEIPDB_API_KEY = <*Optional! obtain a key at abuseipdb for automated bot reporting, or leave empty for no bot reporting*> -CAP_API_URL = https://captcha.thefloatinglab.world # *self hosted site* -CAP_SITE_KEY = 1a9933aa22 # Example, change this! -CAP_SECRET_KEY = sk-TF8Gn4KKMSC0h46j83AqZWNnga6nlc5v4hoHwn7nE # Example, change this! -\# *Leave the CAP entries empty to use the Turnstile captcha.* -TURNSTILE_SITE_KEY = 0x4AAAAAADisco1ig4Qu4hPJ # Example, change this! -TURNSTILE_SECRET_KEY = 0x4AAAAAADisca-OEq9hnPskVM6G57pTXsM # Example, change this! +# Enter here the url of your self hosted CAP captcha provider. +CAP_API_URL = https://captcha.thefloatinglab.world +# Enter here your own keys: +CAP_SITE_KEY = 1a9933aa22 +CAP_SECRET_KEY = sk-TF8Gn4KKMSC0h46j83AqZWNnga6nlc5v4hoHwn7nE +# Leave the CAP entries empty to use the Turnstile captcha instead. +TURNSTILE_SITE_KEY = 0x4AAAAAADisco1ig4Qu4hPJ +TURNSTILE_SECRET_KEY = 0x4AAAAAADisca-OEq9hnPskVM6G57pTXsM ~~~ ## captcha.conf @@ -100,7 +104,7 @@ Most bots search by using "/?q=" but some also from "/searxng/?q=". So both loca - I'm not affiliated in any way with the CAP self hosted captcha provider, but it looks like a sound project to me. You can fall back on Cloudflare Turnstile if you have more confidence in them, but beware that they do some logging and analysis which partly defeats the purpose of SearxNG. ## Logging -- You will not see everything in your logs! Bots are immediately redirected to the captcha system, before an entry in the nginx log is made. Many bots are not even capable of properly interfacing with this redirection and simply nevere make it to the captcha, and vanish without leaving a trail. +- You will not see everything in your logs! Bots are immediately redirected to the captcha system, before an entry in the nginx log is made. Many bots are not even capable of properly interfacing with this redirection and simply never make it to the captcha, and vanish without leaving a trail. - You will see a sharp decline in bots. This is not a malfunction but the intention. Some bots learn quickly, and getting listed in AbuseIPDB doesn't encourage them. It looks like they are coded to detect reporting, or some bot owners might receive automated notifications if they get listed, but one way or the other, they avoid sites that put and keep them on public blacklists. ## Self hosted CAP @@ -112,7 +116,7 @@ Most bots search by using "/?q=" but some also from "/searxng/?q=". So both loca - Performance & UX. Cap's PoW is invisible-style: the user clicks one checkbox, then watches a brief spinner. Solve time depends on the client device (Cap reports a default-difficulty solve at roughly 2–3s on modern hardware) — much snappier than image puzzles, but slightly more "interactive" than Turnstile's typical zero-click case. ## AbuseIPDB -- Reporting to AbuseIPDB is not just for others but it benefits you too! Abusers have their own lists, and you might end up on their lists for "sites to avoid because they report" and it might carry over to other services on your site(s) as well. +- Reporting to [AbuseIPDB](https://www.abuseipdb.com) is not just for others but it benefits you too! Abusers have their own lists, and you might end up on their lists for "sites to avoid because they report" and it might carry over to other services on your site(s) as well. - Threshold of 10 per two hours is a reasonable default but tweak WALKAWAY_THRESHOLD and WALKAWAY_TTL to taste. With WALKAWAY_TTL = 3600, the counter auto-expires after an hour of silence, so a slow trickle never builds up. I have my treshold set on two hours. - One report per IP per 15 minutes. The ts_reported:add() with REPORT_COOLDOWN makes sure you don't spam AbuseIPDB if a botnet member keeps hitting you. Free tier caps at 1000 reports/day; with this design you'd need ~700 distinct repeat-offender IPs/day to come close. - Behind a CDN / reverse proxy? ngx.var.remote_addr would be the proxy's IP, not the client's. Either configure ngx_http_realip_module (set_real_ip_from/real_ip_header X-Forwarded-For) so $remote_addr reflects the real client, or change the calls to ngx.var.http_x_forwarded_for (and parse out the first hop yourself). Don't ship to AbuseIPDB without verifying which IP you're sending — reporting your CDN's IP would be embarrassing. @@ -124,6 +128,6 @@ Most bots search by using "/?q=" but some also from "/searxng/?q=". So both loca - Audit trail. Every report logs to error.log at notice level with the IP and the count, so you can grep 'reported.*AbuseIPDB' /var/log/nginx/error.log | wc -l for a daily tally. If you want richer accounting (which paths the bot hit, user-agent, ASN), you can pass them through to the timer and stitch them into the comment field — AbuseIPDB shows the comment verbatim on the IP's public page. # License -See the license file. +See the [license file](LICENSE). The original of this project can be found at [git.thefloatinglab.world/TheFloatingLab/SearxNG-Captcha](https://git.thefloatinglab.world/TheFloatingLab/SearxNG-Captcha) which is part of [www.thefloatinglab.world](https://www.thefloatinglab.world) diff --git a/captcha.jpg b/captcha.jpg new file mode 100644 index 0000000000000000000000000000000000000000..e5ca22360ed677193975584a9772c9a596379cf8 GIT binary patch literal 34292 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 literal 0 HcmV?d00001