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è fa | Lliurament |
|---|---|---|
| Detecció de patrons | Detecta 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 semblants | bloquejar |
| Tres nivells per patró | bloquejar, comptar o avisar: es pot canviar per a cada patró, sense codi | per patró |
| Llindars | Tantes coincidències del mateix patró abans de bloquejar; per a inicis de sessió, deu | 10 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 treball | activat |
| 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 immediatament | bloquejar |
| Detecció de comportament | Adreces que en cinc minuts generen vint pàgines d'error i gairebé cap pàgina existent, és a dir, endevinen en lloc de llegir | avisar |
| Puntuació 0–100 | Quina é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 clar | activat |
| Bloqueig d'inici de sessió segons la puntuació | A partir d'una puntuació configurable, l'inici de sessió queda prohibit, la web continua sent llegible | a partir de 40 |
| Sospita de credencials robades | Un 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 dia | activat |
| Llistes d'amenaces | Nodes 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 llista | avisar |
| 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 Tor | Opció |
| País d'origen | Paí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ïta | mostrar |
| Regles per país | Bloquejar, sense accés a l'inici de sessió, notificar o permetre expressament — per a cada país, deliberadament sense cap valor per defecte | cap |
| Configuracions errònies | QNAP, 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 afectat | avisar |
| Tiquet per adreça | D'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-se | desactivat |
| Pàgines obligatòries i recol·lectors | La 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 bloqueja | avisar |
| Llista d'excepcions | Adreces 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 Bingbot | activat |
| Assignació de client | Una 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ència | Quin web s'ha consultat i amb quin user-agent — dues dades que falten al registre d'accés | activat |
| Anàlisi | Gràfic i taula dinàmica sobre totes les coincidències: per patró, dia, domini, país i adreça | activat |
| Esquer | Les sondes reben respostes inventades amb un valor canari; qui el consulta més tard, les ha llegit | desactivat |
| Lliurament RBL | La 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'URL | activat |
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í.
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.txten una reglahttp-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
denyd'un fitxerincludegenerat - 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.
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.
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.ymlo.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/logini les interfícies/xmlrpc/2/commoni/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.
| Nivell | La sol·licitud desencadenant | Conseqüència per a l'adreça |
|---|---|---|
| bloquejar | és rebutjada | bloquejada 24 hores, de manera permanent després de tres dies sospitosos |
| comptar | passa | només es registra, sense bloqueig |
| notificar | passa | es 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'atac | Sol·licituds | Adreces |
|---|---|---|
Captació de .env | 57.721 | 223 |
| Sondes PHP | 12.237 | 256 |
| Path traversal amb un objectiu profitós | 10.046 | 64 |
| Fitxers de configuració | 5.535 | 114 |
| Claus d'accés al núvol | 4.388 | 152 |
| Sondes de WordPress | 3.366 | 385 |
Captació de .git | 2.811 | 255 |
| Exploració d'Odoo (administrador de bases de dades, consulta de versió) | 2.500 | 213 |
Cadenes d'eines d'IA i execució d'ordres (/mcp, /api/fs/exec) | 2.450 | 74 |
| Instruccions de construcció (CI/CD) | 1.907 | 88 |
| Punts finals GraphQL | 1.878 | 71 |
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
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.
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.