Ves al contingut

Odoo 19 Community: Web RBL – llista de bloqueig per al trànsit d'atac a les pròpies webs

24 de setembre de 2026 per
Odoo 19 Community: Web RBL – llista de bloqueig per al trànsit d'atac a les pròpies webs

Codi font: github.com/Alex0176/odoo-web-rbl — AGPL-3, d'ús lliure.

Qui opera un servidor Odoo a Internet rep visites. No ocasionalment, sinó sense interrupció. Durant disset dies hem registrat i analitzat a les nostres cinc webs 731.297 sol·licituds. 110.511 d'aquestes no eren visitants, sinó cerca automatitzada de vulnerabilitats, credencials i fitxers de configuració.

Aquesta entrada descriu Web RBL, un mòdul de codi obert per a Odoo 19 Community que detecta, valora, registra i rebutja aquest trànsit, i que publica la llista de bloqueig com a llista RBL, és a dir, en el format que els tallafocs i els servidors intermediaris inversos (reverse proxy) llegeixen directament. Totes les xifres provenen de l'operativa real.

Què sap fer el mòdul: les funcions d'un cop d'ull

FuncióQuè faLliurament
Detecció de patronsDetecta sondejos per la ruta i l'extensió: .env, .git, fitxers de configuració, claus de núvol, instruccions de compilació CI/CD, WordPress, PHP, path traversal, gestors de bases de dades, GraphQL, execució d'ordres mitjançant /api/fs/exec i interfícies semblantsbloquejar
Tres nivells per patróbloquejar, comptar o avisar: es pot canviar per a cada patró, sense codiper patró
LlindarsTantes coincidències del mateix patró abans de bloquejar; per a inicis de sessió, deu10 a l'inici de sessió
Defensa d'inici de sessióInicis de sessió fallits mitjançant el formulari i XML-RPC/JSON-RPC, comprovacions de sessió fallides, accessos al gestor de bases de dades; tot a la base de dades, no a la memòria de treballactivat
Detecció de bots a l'inici de sessióQui ignora el missatge d'espera després de deu intents fallits i continua trucant, és bloquejat immediatamentbloquejar
Detecció de comportamentAdreces que en cinc minuts generen vint pàgines d'error i gairebé cap pàgina existent, és a dir, endevinen en lloc de llegiravisar
Puntuació 0–100Quina és la certesa que darrere de l'adreça hi ha un atacant? A partir de la gravetat del patró, el nombre de patrons diferents, dies destacables, dominis afectats i nombre de coincidències, amb justificació en text claractivat
Bloqueig d'inici de sessió segons la puntuacióA partir d'una puntuació configurable, l'inici de sessió queda prohibit, la web continua sent llegiblea partir de 40
Sospita de credencials robadesUn inici de sessió reeixit des d'una adreça sospitosa es notifica i, si es vol, s'assigna com a tasca — una vegada per adreça i diaactivat
Llistes d'amenacesNodes de sortida de Tor, Spamhaus DROP, FireHOL Level 1 i blocklist.de ja preconfigurats; qualsevol altra llista RBL es pot afegir per adreça, comparació diària, un nivell propi per a cada llistaavisar
Sense accés a l'inici de sessióEl quart nivell per a llistes i països: el web es pot llegir, però el formulari d'inici de sessió i les interfícies queden tancats — la resposta adequada a TorOpció
País d'origenPaís per a cada coincidència i adreça mitjançant GeoLite2; el mòdul manté la base de dades actualitzada per si mateix amb una clau de llicència gratuïtamostrar
Regles per paísBloquejar, sense accés a l'inici de sessió, notificar o permetre expressament — per a cada país, deliberadament sense cap valor per defectecap
Configuracions erròniesQNAP, Synology, Exchange Autodiscover, ActiveSync i WebDAV/CalDAV/CardDAV es detecten, mai es bloquegen i es posen en una llista de treball amb el diagnòstic i el domini afectatavisar
Tiquet per adreçaD'un diagnòstic en surt, si es vol, un tiquet — exactament un per adreça; un de tancat es torna a obrir en lloc de duplicar-sedesactivat
Pàgines obligatòries i recol·lectorsLa ruta canònica de l'avís legal sempre continua accessible; s'hi detecta la prova automàtica de grafies alienes i, si es vol, es bloquejaavisar
Llista d'excepcionsAdreces i xarxes que no es bloquegen mai; s'omple cada dia a partir del tallafoc (extrems de VPN) i dels intervals d'adreces publicats de Googlebot i Bingbotactivat
Assignació de clientUna coincidència procedent de la xarxa d'un client se li assigna a ell — a partir de la llista d'excepcions, mai endevinada a màactivat
Domini i identificador per coincidènciaQuin web s'ha consultat i amb quin user-agent — dues dades que falten al registre d'accésactivat
AnàlisiGràfic i taula dinàmica sobre totes les coincidències: per patró, dia, domini, país i adreçaactivat
EsquerLes sondes reben respostes inventades amb un valor canari; qui el consulta més tard, les ha llegitdesactivat
Lliurament RBLLa llista de bloqueig com a simple llista d'adreces o JSON en una adreça pròpia protegida amb token — per a HAProxy, OPNsense i qualsevol tallafoc que llegeixi llistes d'URLactivat

Tot el que s'entrega amb notificar, desactivat o opció és així deliberadament: qui activa un bloqueig de manera efectiva ha de fer-ho perquè ha estat uns dies observant, per aquest cas concret — no perquè el valor per defecte ho volgués així.

Anàlisi de Web RBL: coincidències per patró al llarg de set dies

L'anàlisi: coincidències per patró al llarg de set dies. La barra més alta és la cerca de fitxers .env.

Llistes RBL: una via estandarditzada per distribuir bloquejos

RBL significa Real-time Blackhole List. El terme prové del món del correu, on Spamhaus i altres publiquen des dels anys noranta llistes d'adreces de remitents maliciosos. El principi és tan senzill com es pot ser i precisament per això està tan estès: una adreça per línia, accessible per HTTP i recarregada de manera regular. Cap format que s'hagi d'analitzar primer, cap interfície per a la qual calgui una eina.

Pràcticament qualsevol tallafoc i qualsevol servidor intermediari invers pot llegir una llista d'aquest tipus i construir-ne regles. Els fabricants li donen noms diferents, però el mecanisme és el mateix a tot arreu:

  • OPNsense i pfSense — URL Table Alias: carregar la llista d'adreces per HTTP, utilitzar-la com a àlies en regles de tallafoc, actualització cada hora o cada dia
  • HAProxy — fitxers ACL i mapes: src -f sperrliste.txt en una regla http-request deny, que es pot tornar a carregar mitjançant l'API d'execució sense reiniciar
  • nginx — mòdul geo amb un fitxer d'adreces inclòs, o instruccions deny d'un fitxer include generat
  • Fortinet FortiGate — External Block List o Threat Feed: una URL de la qual el tallafoc obté una llista d'IP i la fa servir en les polítiques
  • Palo Alto Networks — External Dynamic List (EDL): el mateix principi, com a tipus d'objecte propi en les polítiques de seguretat
  • Check Point — Custom Intelligence Feeds i IP Block Lists mitjançant una URL
  • Cisco Secure Firewall (Firepower) — Security Intelligence Feeds amb fonts de llistes pròpies
  • Sophos Firewall — Third-Party Threat Feeds: llistes d'adreces d'una URL com a font per a regles de bloqueig
  • Juniper SRX — Dynamic Address Entries a partir de feeds
  • MikroTik RouterOS — Address Lists, omplertes des d'una URL mitjançant un script i fetch
  • CrowdSec — llistes pròpies com a font per als bouncers de qualsevol sistema compatible

Web RBL lliura la seva llista de bloqueig exactament en aquest format. El tallafoc descarta els paquets abans que arribin al servidor web — i amb ells qualsevol altre intent de la mateixa adreça, per exemple contra el servidor de correu o la passarel·la VPN.

Els dos sentits, però al lloc adequat

La via també funciona a l'inrevés: a Web RBL es pot afegir qualsevol llista RBL — una URL, un nivell i llestos. Els nodes de sortida de Tor, Spamhaus DROP, FireHOL i blocklist.de ja vénen preconfigurats; se n'hi afegeixen més amb tres clics. El mòdul descompon cada llista en intervals d'adreces i hi comprova cada sol·licitud en pocs microsegons.

I tanmateix: té més sentit utilitzar les llistes alienes al tallafoc que hi ha al davant. Per tres motius. El tallafoc veu tots els serveis, no només HTTP — una adreça de la llista de Spamhaus també ha de fracassar al servidor de correu i a la VPN. El tallafoc descarta a nivell de paquet, abans que s'estableixi cap connexió, i així no costa res al servidor d'aplicacions. I és el lloc on aquestes llistes ja es mantenen de totes maneres; una segona còpia a l'aplicació és un segon lloc que es pot quedar obsolet.

Per a què serveixen, doncs, les llistes del mòdul: per a allò que un tallafoc no pot fer. No coneix cap formulari d'inici de sessió. Web RBL pot denegar a una adreça de la llista de Tor l'accés a l'inici de sessió i lliurar igualment el web — qui vol llegir de manera anònima, ho ha de poder fer; qui vol provar contrasenyes de manera anònima, no. I pot notificar com a cas sospitós un inici de sessió reeixit d'una adreça llistada. Tots dos casos necessiten la llista allà on es fa l'inici de sessió.

Valoració en lloc d'intuïció

Una adreça que ha demanat una sola vegada /wp-login.php és una cosa diferent d'una que ha actuat durant dos dies amb cinc patrons diferents sobre tres dominis. Web RBL ho converteix en una puntuació de 0 a 100 — a partir del que ha vist per si mateix, sense cap servei extern ni cap consulta a l'exterior.

Entrada de Web RBL amb puntuació 84 i justificació

Una entrada: 99 coincidències, puntuació 84 i la justificació en text clar — patró més greu, cinc patrons greus diferents, dos dies sospitosos, més de vint coincidències.

La puntuació decideix dues coses. A partir d'un valor ajustable, l'inici de sessió queda prohibit — el web continua sent llegible, però qui ja ha buscat dades d'accés no té l'oportunitat de provar les que hagi trobat. I un inici de sessió reeixit des d'una adreça amb puntuació es notifica: aleshores algú ja no ha endevinat, sinó que ho sabia. O bé l'usuari legítim era de viatge, o bé les dades d'accés s'han perdut — el mòdul no ho decideix, ho presenta a algú que pot preguntar-ho. La contrasenya en si no es toca en cap moment.

Llista de bloqueig de Web RBL, filtrada per puntuació a partir de 40

La llista de bloqueig, filtrada per puntuació a partir de 40: nombre de coincidències, dies sospitosos, dominis afectats i l'última ruta per adreça.

Què protegeix Web RBL — l'efecte protector en detall

1. Les dades d'accés romanen sense descobrir

La classe d'atac més gran mesurada no busca bretxes a Odoo, sinó secrets oblidats. En disset dies:

  • 57.721 sol·licituds de fitxers .env — hi figuren contrasenyes de bases de dades, claus d'API i secrets de sessió
  • 5.535 sol·licituds de fitxers de configuració
  • 4.388 sol·licituds de credencials de núvol: credentials.json, service-account.json, firebase-adminsdk.json, rclone.conf, .git-credentials
  • 2.811 sol·licituds de directoris .git — qui en troba un descarrega el codi font complet amb tot l'historial
  • 1.907 sol·licituds d'instruccions de construcció com .github/workflows/deploy.yml o .gitlab-ci.yml, on figuren registres i noms de claus

El decisiu no és el nombre de sol·licituds, sinó el nombre d'adreces diferents: /credentials.json va venir de 98 adreces, /.git-credentials de 92. No es tracta d'un escàner aïllat, sinó d'un repertori estàndard que funciona arreu del món alhora.

2. Els intents d'inici de sessió no porten enlloc — de manera permanent

Odoo incorpora un fre propi contra la prova sistemàtica de contrasenyes. Té tres límits, documentats al mateix codi font d'Odoo: el comptador es troba a la memòria principal del procés de treball i es reinicia a cada reinici, només endarrereix en lloc de bloquejar, i només compta els intents que arriben fins a la comprovació de la contrasenya.

Web RBL actua als mateixos punts, però escriu a la base de dades. Així, es compleix que:

  • L'estat sobreviu a qualsevol reinici i val per a tots els processos de treball
  • Es registren les dues vies: el formulari d'inici de sessió /web/login i les interfícies /xmlrpc/2/common i /jsonrpc
  • També es registren els intents que no arriben mai fins a la comprovació de la contrasenya — per exemple, inicis de sessió sense un identificador de sessió vàlid
  • Un accés fallit a l'administrador de bases de dades es comptabilitza; és l'intent d'inici de sessió més greu de tots

El llindar per als inicis de sessió està fixat en deu, i el motiu és una mesura: de nou inicis de sessió fallits en disset dies, la majoria eren de clients que es configuraven ells mateixos l'accés en un altre dispositiu i hi van introduir el domini equivocat — en un cas el propi, només que amb un guionet en lloc de punt. Un bloqueig al primer intent fallit no hauria afectat els atacants, sinó els clients durant la configuració.

Qui, en canvi, continua insistint tot i que el servidor ja ha respost «espereu un moment», és bloquejat a l'instant. Aquest missatge el llegeix una persona i espera; qui l'ignora, és un programa. Un patró propi amb llindar zero atrapa precisament aquest cas, i no pot afectar cap company: només hi arriba qui ja porta deu intents fallits a l'esquena i després segueix insistint.

3. L'atac ja no costa res al servidor

Una sonda a una ruta com /@fs/../../.env era cara abans del mòdul: Odoo cerca la pàgina d'error, la renderitza, ensopega al construir l'adreça amb els segments de punts i fracassa aleshores també amb la pàgina d'error de la pàgina d'error. Dos registres de pila per sonda. Es van mesurar 28.401 errors d'aquest tipus en disset dies, més 9.467 errors derivats.

Web RBL intervé a ir.http._match, és a dir, abans de la cerca de la ruta. La resposta es dona sense plantilla, sense accés a la base de dades més enllà de la comprovació del bloqueig i sense cap línia de registre. La comprovació de la llista d'excepcions, de les llistes d'amenaces i de les regles per país s'executa des de la memòria cau mitjançant intervals d'adreces ordenats — pocs microsegons, fins i tot amb més de trenta mil intervals.

4. El tallafoc fa fora l'atacant abans que arribi

La llista de bloqueig es publica com a llista RBL, que HAProxy i OPNsense llegeixen directament. Així, l'atacant ja no arriba al servidor web — ni a cap altre servei del mateix amfitrió. Un accés detectat un cop com a maliciós protegeix així retroactivament tota la màquina.

Tres nivells: bloquejar, comptar, notificar

No tota sol·licitud que no porta enlloc és un atac. Per això Web RBL distingeix tres nivells, i el nivell es pot canviar per a cada patró sense tocar el codi.

NivellLa sol·licitud desencadenantConseqüència per a l'adreça
bloquejarés rebutjadabloquejada 24 hores, de manera permanent després de tres dies sospitosos
comptarpassanomés es registra, sense bloqueig
notificarpassaes registra amb text de diagnòstic i mai es bloqueja

Per a les llistes d'amenaces i els països n'hi ha un quart: sense accés a l'inici de sessió. El web continua sent llegible, però el formulari d'inici de sessió i les interfícies queden tancats. És la via intermèdia per a tot allò que és sospitós, però que no té per què ser maliciós — Tor, un interval d'un centre de dades, un país sense clients.

Quins atacs es detecten

Tots els patrons s'han comprovat amb trànsit real. El nombre d'adreces diferents hi figura al costat deliberadament — mostra si un patró afecta un únic escàner o un procediment estès.

Classe d'atacSol·licitudsAdreces
Captació de .env57.721223
Sondes PHP12.237256
Path traversal amb un objectiu profitós10.04664
Fitxers de configuració5.535114
Claus d'accés al núvol4.388152
Sondes de WordPress3.366385
Captació de .git2.811255
Exploració d'Odoo (administrador de bases de dades, consulta de versió)2.500213
Cadenes d'eines d'IA i execució d'ordres (/mcp, /api/fs/exec)2.45074
Instruccions de construcció (CI/CD)1.90788
Punts finals GraphQL1.87871

La classe més recent és notable. /api/fs/exec s'ha sol·licitat 369 vegades des de 54 adreces diferents — això no és un accés de lectura, sinó un intent d'executar ordres. Aquests objectius no existien fa dos anys; provenen d'interfícies de les noves eines d'IA i de cues de tasques. Qui orienta la seva defensa només cap a WordPress i PHP, no en veu res. A la puntuació, aquesta classe pesa en conseqüència.

Llistes d'amenaces i país d'origen

Llistes d'amenaces de Web RBL: Tor, Spamhaus DROP, FireHOL, blocklist.de

Quatre llistes, 32.851 intervals d'adreces, totes en «només notificar». Cada llista addicional és una adreça i un nivell.

Una llista aliena és una afirmació que fa algú altre, per motius que desconeixem, sobre un trànsit que mai no hem vist. Pot ser errònia, obsoleta o pensada per a un altre propòsit: blocklist.de recull sobretot adreces que han provat inicis de sessió SSH en altres llocs, i això diu ben poc d'un servidor web. Per això Web RBL manté les llistes alienes separades de la llista de bloqueig pròpia, i per això el valor per defecte és notificar. I la llista d'excepcions pròpia guanya sempre: un client que coneixem pesa més que l'opinió d'un tercer.

El país d'origen consta a cada coincidència i a cada adreça. Per valorar és insubstituïble — un intent d'inici de sessió des del propi país a les deu del matí és una cosa diferent d'un des d'un país sense cap client. Per bloquejar de manera generalitzada serveix de poc, i ho diuen les nostres pròpies xifres: els atacants de la nostra llista procedien majoritàriament d'àrees de núvol de Bèlgica, Finlàndia i els Països Baixos. Un bloqueig de tot el que queda fora de l'àmbit germanòfon no els hauria afectat — però sí els nostres propis empleats de vacances i clients de viatge de negocis.

Regles per país de Web RBL: lliurades buides, amb explicació

Les regles per país es lliuren buides, i la vista explica el perquè.

Notificar les configuracions errònies en lloc de bloquejar

El cas més freqüent en el trànsit real no és ni un atac ni un visitant, sinó programari defectuós que pren el servidor web per alguna altra cosa:

  • 1.367 crides a la interfície web d'un NAS QNAP — un client de sincronització la destinació del qual ja no és correcta. Un sol accés hi va trucar 962 vegades.
  • 65 consultes d'Autodiscover — un Outlook que pren el domini web pel seu Exchange

Aquestes adreces no es bloquegen mai. Un bloqueig no soluciona el defecte, l'amaga — i afecta qui té el dispositiu ja mal configurat. En lloc d'això es crea una entrada amb text de diagnòstic i els dominis afectats, de la qual, si es vol, s'obté automàticament un tiquet: exactament un per adreça, i si es tanca i l'adreça torna a destacar, el mateix tiquet es reobre en lloc de crear-ne un de segon.

Es detecten QNAP, Synology, Exchange Autodiscover, ActiveSync i també clients WebDAV, CalDAV i CardDAV. Els patrons indiquen noms de fitxer i directoris exactes, mai simples extensions: Al mateix directori /cgi-bin/ hi ha les crides de sincronització inofensives just al costat de sondes clàssiques com printenv.pl.

La llista d'excepcions: adreces que no es bloquegen mai

El preu d'un error no és el mateix per a totes les adreces. Amb un escàner d'un centre de dades, una falsa alarma no costa res. Amb l'extrem d'un túnel entre seus, costa la seu.

Per això hi ha una segona llista que va davant de la primera: adreces i xarxes que no es bloquegen mai. No silencia res — qui hi figura continua sent comprovat i registrat, només s'omet la conseqüència. Aquesta és la diferència respecte d'una excepció al tallafoc: aquella et deixa cec, aquesta només et fa pacient.

S'omple cada dia a partir de dues fonts: del tallafoc mateix amb tots els extrems de VPN, perquè un túnel acabat de configurar no depengui que algú pensi en la llista de bloqueig — i dels intervals d'adreces publicats de Google i Microsoft per als seus rastrejadors. Només així es pot distingir un Googlebot autèntic d'un escàner que es fa dir així. Els cercadors no s'han de bloquejar mai; qui els tanca la porta, retira el seu web de la indexació sense camí de tornada.

Aquí hi ha una regla més important que la comparació: una resposta buida no esborra mai. Si la font no respon, respon buida o de manera incomprensible, la llista queda inalterada. Una llista d'excepcions que es buida ella mateixa davant d'una avaria s'emporta en el pitjor moment imaginable tots els túnels.

Si una entrada de la llista d'excepcions porta un client, cada coincidència de la seva xarxa se li assigna a ell. Així, una configuració errònia té de seguida un interlocutor, sense que ningú hagi de consultar adreces.

Informació obligatòria i recol·lectors automatitzats de dades

L'avís legal no és una pàgina qualsevol. Ha de continuar accessible per a les persones, perquè un bloqueig sobre aquesta pàgina crea precisament la infracció que busca un recol·lector. Alhora és la pàgina on figuren el nom i l'adreça — i, per tant, l'objectiu de la collita automàtica.

Durant l'onada austríaca d'advertències per les tipografies de Google incorporades, els registres van mostrar que les cartes no provenien de visites aïllades, sinó d'una ofensiva automatitzada: diversos amfitrions sense relació entre ells amb una diferència de mil·lisegons.

Web RBL ho resol amb una degradació en lloc d'una excepció. La ruta canònica /impressum no coincideix amb cap patró i sempre continua accessible. Les grafies alienes com /impressum.php — que no poden existir en una pàgina d'Odoo — es notifiquen, i qui no vol tolerar la collita automàtica, canvia un paràmetre. sitemap i robots en queden exclosos i, per principi, no es poden bloquejar: no contenen cap dada personal, i obtenir-los és la tasca de tot rastrejador de cercadors.

Domini i identificador: el que falta al registre d'accés

El registre d'accés de werkzeug no escriu ni l'amfitrió consultat ni l'identificador de qui fa la crida. Odoo rep ambdós, evidentment — sense l'amfitrió, amb diversos webs no podria triar el correcte. Però després ja no es pot consultar.

Web RBL conserva les dues dades per a cada coincidència. Això respon a dues preguntes que d'una altra manera no es poden respondre: quin web s'adreça amb una configuració errònia — i, per tant, de quin client és el domini — i si una adreça visita una pàgina o totes. Diversos dominis sense relació de la mateixa adreça són el senyal de l'ofensiva, i augmenten la puntuació.

Fins a quin punt importa l'identificador ho va mostrar una anàlisi en un dels nostres webs: més del setanta per cent de tot el trànsit venia d'un sol visitant, repartit en més de cent adreces. Sense l'identificador hauria semblat un scraper distribuït. Era GPTBot, el rastrejador d'OpenAI — demanava una vegada i una altra robots.txt i s'havia comportat de manera del tot correcta.

Els aspectes de seguretat en detall

1. La detecció del servidor intermediari — el punt més perillós de tots

Si Odoo funciona darrere d'un servidor intermediari invers i proxy_mode està mal configurat, el mòdul veu a cada sol·licitud la mateixa adreça: la del servidor intermediari. Un bloqueig tancaria tots els visitants alhora.

Per això Web RBL comprova abans de cada bloqueig si la determinació de l'adreça és fiable. Exigeix proxy_mode juntament amb una capçalera de reenviament, es nega a treballar si arriba un reenviament sense proxy_mode i es nega igualment si hi ha més d'un servidor intermediari. En cas de dubte, no es bloqueja.

2. Mai les pròpies xarxes

Els intervals d'adreces privades, el loopback, el link-local i el CGNAT en queden exclosos de manera fixa. En cap circumstància poden acabar a la llista, ni tan sols a mà. El mateix val per a les llistes alienes: els intervals privats i reservats, així com les xarxes absurdament grans, es descarten en llegir-los.

3. Un error propi no pot arrossegar el web

Tota la comprovació s'executa dins d'una protecció que capta qualsevol error. El que falla aquí es registra i la sol·licitud continua sense canvis. Un mòdul de protecció que, davant d'un error propi, s'emporta el web, és pitjor que cap. A més, totes les consultes del camí de la sol·licitud s'executen sense l'idioma del navegador del visitant i sense ordenació per camps traduïts — un visitant amb un idioma no instal·lat no pot fer fracassar la comprovació.

4. Observar abans de bloquejar

Després de la instal·lació, el bloqueig d'adreces llistades en sol·licituds ordinàries està desactivat. Les sondes es rebutgen i es registren, tota la resta passa. Així es pot seguir uns dies qui acaba realment a la llista, abans que algú sigui bloquejat. El mateix val per a la detecció de comportament, les llistes d'amenaces i les regles per país: primer notificar, bloquejar després de valorar-ho.

5. Patrons estrets en lloc de xarxes amples

Un visitant mal detectat és més car que una sonda passada per alt. Per això cada patró porta el seu nivell, que es pot canviar per a cada patró. Una extensió de fitxer sola rarament n'hi ha prou: amb .php hi ha 14.012 sondes reals contra un grapat d'enllaços antics; amb .asp la proporció és inversa. Aquestes decisions s'han de mesurar, no estimar.

6. Una autorització manual es manté

Qui autoritza una adreça, tenia un motiu. Una coincidència posterior no deixa sense efecte aquesta decisió de manera silenciosa.

7. La llista està protegida, però no és cap secret

El punt final exigeix un token i, sense un token vàlid, respon amb 404, no amb 403 — així no s'hi confirma ni l'existència de l'adreça. La comparació s'executa en temps constant. La llista en si no conté res de confidencial: consisteix en adreces que han trucat a la nostra porta per pròpia iniciativa.

8. Cap secret a la comptabilitat

En els inicis de sessió fallits es deixa constància del nom d'usuari intentat, mai de la contrasenya. A l'administrador de bases de dades no es llegeix absolutament res dels valors lliurats: allà hi ha en primera posició la contrasenya mestra, i una entrada en una llista de bloqueig acaba a cada còpia de seguretat de la base de dades. La clau de llicència de GeoLite2 es troba només al paràmetre del sistema i en cap línia de registre.

9. L'esquer no revela res aprofitable

Opcionalment, Web RBL respon a les sondes amb contingut inventat que conté un valor canari inequívoc. Qui consulta aquest valor més tard, ha llegit la resposta falsificada i hi ha actuat — una falsa alarma hi queda descartada. Els esquers no contenen cap dada aprofitable, cap ruta real i cap credencial vàlida. Aquesta funció es lliura desactivada, perquè canvia el comportament de manera visible cap a l'exterior.

El que el mòdul no pot fer

No substitueix ni un tallafoc ni un Web Application Firewall. Detecta patrons de sondeig coneguts en rutes, inicis de sessió fallits i comportament sospitós — no atacs a formularis, ni intents d'injecció en paràmetres.

A més, només veu el que torna per HTTP. El que un atacant fa amb accessos robats a bases de dades o bústies roman invisible — i precisament per això els valors canari són rutes i no pas dades d'accés.

I no substitueix la diligència: un mòdul que rebutja les sondes de .env no fa inofensiu un fitxer .env lliurat per descuit.

Disponibilitat

Web RBL és de disponibilitat pública sota l'AGPL-3 i funciona en producció a casa nostra en cinc webs:

github.com/Alex0176/odoo-web-rbl

El mòdul requereix Odoo 19 Community i no té dependències a banda de base i web. La connexió amb tiquets és opcional i no necessita cap sistema de tiquets determinat; sense cap, simplement no passa res. El país d'origen necessita la base de dades gratuïta GeoLite2 de MaxMind; si falta, el camp queda buit i tota la resta funciona sense canvis.

Per saber-ne més: Com encaixa Web RBL en una arquitectura de seguretat completa -- juntament amb tallafoc, autenticació de dos factors i permisos, amb instruccions pas a pas: Combinar correctament l'arquitectura de seguretat d'Odoo 19.

Rebem de bon grat preguntes, comentaris i informes d'errors — preferiblement com a issue a GitHub.