Preskoči na sadržaj

Odoo 19 Community: Web RBL – crna lista za napadački saobraćaj na vlastitim web stranicama

24. septembar 2026. by
Odoo 19 Community: Web RBL – crna lista za napadački saobraćaj na vlastitim web stranicama

Izvorni kod: github.com/Alex0176/odoo-web-rbl — AGPL-3, slobodno upotrebljiv.

Ko pogoni Odoo server na internetu, dobija posjete. Ne povremeno, nego neprekidno. Tokom sedamnaest dana na naših pet web stranica zabilježili smo i analizirali 731.297 zahtjeva. 110.511 od njih nisu bili posjetitelji, nego automatizirano traženje slabosti, pristupnih podataka i konfiguracijskih datoteka.

Ovaj članak opisuje Web RBL, open source modul za Odoo 19 Community koji prepoznaje, ocjenjuje, evidentira i odbija ovaj saobraćaj – i koji crnu listu objavljuje kao RBL listu, dakle u formatu koji firewalli i reverse proxyji odmah čitaju. Svi brojevi potiču iz stvarnog rada.

Šta modul može — funkcije u pregledu

FunkcijaŠta radiIsporuka
Prepoznavanje uzorakaPrepoznaje sondiranja po putanji i nastavku: .env, .git, konfiguracijske datoteke, ključevi za cloud, CI/CD upute za izgradnju, WordPress, PHP, path traversal, upravitelji baza podataka, GraphQL, izvršavanje naredbi putem /api/fs/exec i sličnih interfejsablokirati
Tri nivoa po uzorkublokirati, brojati ili prijaviti — podesivo po uzorku, bez kodapo uzorku
PragoviToliko pogodaka istog uzorka prije nego se blokira; za prijave deset10 kod prijave
Odbrana prijaveNeuspjele prijave putem obrasca i XML-RPC/JSON-RPC, neuspjele provjere sesije, pristupi upravitelju baza podataka — u bazi podataka, a ne u radnoj memorijiuključeno
Prepoznavanje botova pri prijaviKo ignorira poruku o čekanju nakon deset neuspjelih pokušaja i nastavi kucati, odmah se blokirablokirati
Prepoznavanje ponašanjaAdrese koje u pet minuta stvaraju dvadeset pogrešnih stranica i jedva ijednu pogođenu stranicu — dakle pogađaju umjesto da čitajuprijaviti
Ocjena 0–100Koliko je sigurno da iza adrese stoji napadač? Iz težine uzorka, broja različitih uzoraka, upadljivih dana, pogođenih domena i broja pogodaka — s obrazloženjem običnim tekstomuključeno
Blokada prijave prema ocjeniOd podesive ocjene prijava je zabranjena, web stranica ostaje čitljivaod 40
Sumnja na ukradene pristupne podatkeUspješna prijava s sumnjive adrese se prijavljuje i, po želji, dodjeljuje kao zadatak — jednom po adresi i danuuključeno
Liste prijetnjiTor izlazni čvorovi, Spamhaus DROP, FireHOL Level 1, blocklist.de unaprijed konfigurisani; svaka druga RBL lista može se unijeti putem adrese, dnevno poređenje, vlastiti nivo za svaku listuprijaviti
Bez pristupa prijaviČetvrti nivo za liste i zemlje: web-stranica je čitljiva, obrazac za prijavu i sučelja su zatvoreni — pravi odgovor na TorOpcija
Zemlja porijeklaZemlja za svaki pogodak i adresu putem GeoLite2; bazu podataka modul sam ažurira uz besplatan licenčni ključprikaži
Pravila po zemljamaBlokirati, bez pristupa prijavi, prijaviti ili izričito dozvoliti — po zemlji, namjerno bez zadane vrijednostinijedna
Pogrešne konfiguracijeQNAP, Synology, Exchange Autodiscover, ActiveSync, WebDAV/CalDAV/CardDAV se prepoznaju, nikada ne blokiraju i unose se u radnu listu s nalazom i pogođenom domenomprijaviti
Tiket po adresiIz nalaza po želji nastaje tiket — tačno jedan po adresi, zatvoreni se ponovo otvara umjesto da se udvostručiisključeno
Obavezne stranice i sakupljačiKanonska putanja impressuma uvijek ostaje dostupna; mašinsko isprobavanje tuđih načina pisanja se prepoznaje i po želji blokiraprijaviti
Bijela listaAdrese i mreže koje se nikada ne blokiraju; svakodnevno se puni iz firewalla (VPN protustrane) i iz objavljenih opsega adresa Googlebota i Bingbotauključeno
Dodjela klijentuPogodak iz mreže klijenta dodjeljuje se tom klijentu — iz bijele liste, nikada nagađanjemuključeno
Domena i identifikator po pogotkuKoja je web-stranica pozvana, s kojim User-Agentom — oboje nedostaje u zapisniku pristupauključeno
AnalizaDijagram i pivot po svim pogocima: po uzorku, danu, domeni, zemlji, adresiuključeno
MamacSonde dobijaju izmišljene odgovore s kanarinac-vrijednošću; ko je kasnije pozove, pročitao ih jeisključeno
RBL isporukaLista blokiranih kao čista lista adresa ili JSON na vlastitoj adresi zaštićenoj tokenom — za HAProxy, OPNsense i svaki firewall koji čita URL listeuključeno

Sve što se isporučuje s prijavi, isključeno ili opcija je namjerno tako: ko aktivira blokadu, treba to učiniti zato što je nekoliko dana posmatrao ko na nju naiđe — ne zato što je zadana vrijednost to tražila.

Web RBL analiza: pogoci po uzorku tokom sedam dana

Analiza: pogoci po uzorku tokom sedam dana. Najviši stubac je traženje .env datoteka.

RBL liste: standardizirani način isporuke blokada

RBL znači Real-time Blackhole List. Pojam potiče iz svijeta e-pošte, gdje Spamhaus i drugi od devedesetih godina objavljuju liste zlonamjernih adresa pošiljalaca. Princip je izuzetno jednostavan i upravo zato tako raširen: jedna adresa u svakom redu, dostupna putem HTTP-a, redovno iznova učitavana. Nema formata koji se prvo mora parsirati, nema sučelja za koje je potreban alat.

Praktično svaki firewall i svaki reverse proxy može pročitati takvu listu i od nje izgraditi pravila. Proizvođači to nazivaju različito, a mehanizam je svuda isti:

  • OPNsense i pfSense — URL Table Alias: učitati listu adresa putem HTTP-a, koristiti kao alias u pravilima firewalla, ažuriranje na satnoj ili dnevnoj osnovi
  • HAProxy — ACL datoteke i Maps: src -f sperrliste.txt u pravilu http-request deny, može se ponovo učitati putem runtime API-ja bez ponovnog pokretanja
  • nginx — geo modul s uključenom datotekom adresa, ili deny naredbe iz generirane include datoteke
  • Fortinet FortiGate — External Block List odnosno Threat Feed: URL iz kojeg firewall preuzima IP listu i koristi je u politikama
  • Palo Alto Networks — External Dynamic List (EDL): isti princip, kao zasebna vrsta objekta u sigurnosnim politikama
  • Check Point — Custom Intelligence Feeds i IP Block Lists putem URL-a
  • Cisco Secure Firewall (Firepower) — Security Intelligence Feeds s vlastitim izvorima lista
  • Sophos Firewall — Third-Party Threat Feeds: liste adresa s URL-a kao izvor za pravila blokiranja
  • Juniper SRX — Dynamic Address Entries iz feedova
  • MikroTik RouterOS — Address Lists, popunjene skriptom i fetch s URL-a
  • CrowdSec — vlastite liste kao izvor za bouncere na svakom podržanom sistemu

Upravo u tom formatu Web RBL isporučuje svoju listu blokiranih. Firewall odbacuje pakete prije nego što stignu do web-servera — a s njima i svaki drugi pokušaj iste adrese, npr. prema mail-serveru ili VPN gateway-u.

Oba smjera, ali na pravom mjestu

Put funkcioniše i obrnuto: u Web RBL se može unijeti bilo koja RBL lista — jedan URL, jedan nivo, gotovo. Tor izlazni čvorovi, Spamhaus DROP, FireHOL i blocklist.de su unaprijed konfigurisani, a dodatne se dodaju sa tri klika. Modul svaku listu razlaže na opsege adresa i provjerava svaki zahtjev u odnosu na njih, u nekoliko mikrosekundi.

Pa ipak: smislenije je tuđe liste koristiti na firewallu prije servera. Iz tri razloga. Firewall vidi sve usluge, ne samo HTTP — adresa sa Spamhaus liste treba da bude odbijena i na mail-serveru i na VPN-u. On odbacuje na nivou paketa, prije nego što se veza uopće uspostavi, pa aplikacijski server time ništa ne košta. I on je mjesto na kojem se takve liste ionako održavaju; druga kopija u aplikaciji je drugo mjesto koje može zastarjeti.

Čemu onda služe liste u modulu: za ono što firewall ne može. On ne poznaje obrazac za prijavu. Web RBL može adresi s Tor liste uskratiti pristup prijavi a web-stranicu ipak isporučiti — ko želi anonimno čitati, to smije; ko želi anonimno isprobavati lozinke, ne smije. I može prijaviti uspješnu prijavu s adrese na listi kao slučaj sumnje. Oboje zahtijeva listu tamo gdje se prijava odvija.

Ocjena umjesto osjećaja

Adresa koja je jednom tražila /wp-login.php je nešto drugo nego ona koja je u dva dana s pet različitih uzoraka prošla kroz tri domene. Web RBL to preračunava u ocjenu od 0 do 100 — na osnovu onoga što je sam vidio, bez vanjske usluge i bez upita prema van.

Web RBL unos s ocjenom 84 i obrazloženjem

Jedan unos: 99 pogodaka, ocjena 84, i obrazloženje uobičajenim jezikom — najteži uzorak, pet različitih ozbiljnih uzoraka, dva sumnjiva dana, više od dvadeset pogodaka.

Ocjena odlučuje o dvije stvari. Od podesive vrijednosti nadalje prijava je zabranjena — web-stranica ostaje čitljiva, ali ko je već tražio pristupne podatke, ne dobija priliku da pronađene isproba. A uspješna prijava s adrese s ocjenom se prijavljuje: tada neko više nije pogađao, nego je znao. Ili je ovlašteni korisnik bio na putu, ili su pristupni podaci izgubljeni — modul to ne odlučuje, nego to iznosi nekome ko može pitati. Sama lozinka se pritom nigdje ne dotiče.

Web RBL lista blokiranih, filtrirana po ocjeni od 40

Lista blokiranih, filtrirana po ocjeni od 40: broj pogodaka, sumnjivi dani, pogođene domene i posljednja putanja po adresi.

Šta Web RBL štiti — zaštitno djelovanje u pojedinostima

1. Pristupni podaci ostaju neotkriveni

Najveća izmjerena klasa napada ne traži slabosti u Odoou, nego zaboravljene tajne. Tokom sedamnaest dana:

  • 57.721 zahtjeva za .env datotekama — tamo se nalaze lozinke baza podataka, API ključevi i tajne sesija
  • 5.535 zahtjeva za konfiguracijskim datotekama
  • 4.388 zahtjeva za pristupnim podacima za cloud: credentials.json, service-account.json, firebase-adminsdk.json, rclone.conf, .git-credentials
  • 2.811 zahtjeva za .git direktorijima — ko ga pronađe, preuzima kompletan izvorni kod zajedno s historijom
  • 1.907 zahtjeva za uputama za izgradnju poput .github/workflows/deploy.yml ili .gitlab-ci.yml, u kojima se nalaze registri i nazivi ključeva

Odlučujući nije broj zahtjeva, nego broj različitih adresa: /credentials.json je stigao s 98 adresa, /.git-credentials s 92. To nije pojedinačni skener, nego standardni repertoar koji se širom svijeta istovremeno izvršava.

2. Pokušaji prijave završavaju u prazno — trajno

Odoo dolazi s vlastitom kočnicom protiv isprobavanja lozinki. Ona ima tri ograničenja koja su dokumentirana u samom Odoo izvornom kodu: brojač se nalazi u radnoj memoriji radnog procesa i resetuje se pri svakom ponovnom pokretanju, on samo usporava umjesto da blokira, i broji isključivo pokušaje koji dođu do provjere lozinke.

Web RBL djeluje na istim mjestima, ali piše u bazu podataka. Time vrijedi:

  • Stanje preživljava svako ponovno pokretanje i vrijedi za sve radne procese
  • Bilježe se oba puta: obrazac za prijavu /web/login i sučelja /xmlrpc/2/common i /jsonrpc
  • Bilježe se i pokušaji koji nikada ne stignu do provjere lozinke — npr. prijave bez važećeg identifikatora sesije
  • Neuspjeli pristup upravitelju baza podataka se također broji; to je najteži pokušaj prijave uopće

Prag za prijave je postavljen na deset, a razlog je jedno mjerenje: od devet neuspjelih prijava u sedamnaest dana većinu su činili klijenti koji su sami sebi postavljali pristup na novom uređaju i pritom unijeli pogrešnu domenu — u jednom slučaju vlastitu, samo s crticom umjesto tačke. Blokada pri prvom neuspjelom pokušaju tako ne bi pogodila napadače, nego klijente pri postavljanju.

Ko, međutim, nastavi kucati iako je server već odgovorio „molimo sačekajte kratko“, biva odmah blokiran. Tu poruku čita čovjek i čeka; ko je ignoriše, je program. Poseban uzorak s pragom nula hvata upravo ovaj slučaj, a ne može pogoditi kolegu: tamo dospijeva samo ko već ima deset neuspjelih pokušaja iza sebe i nakon toga nastavlja.

3. Napad server više ništa ne košta

Sonda na putanju poput /@fs/../../.env prije modula je bila skupa: Odoo traži stranicu greške, renderuje je, spotiče se pri izgradnji adrese o segmente s tačkama i zatim propada i na stranici greške stranice greške. Dva stack traga po sondi. Izmjereno je 28.401 takvih grešaka u sedamnaest dana, uz to 9.467 slijednih grešaka.

Web RBL zahvata u ir.http._match, dakle prije određivanja rute. Odgovor se šalje bez predloška, bez pristupa bazi podataka osim provjere blokade i bez zapisa u logu. Provjera prema bijeloj listi, listama prijetnji i pravilima po zemljama izvršava se iz memorije cache-a preko sortiranih opsega adresa — nekoliko mikrosekundi, čak i pri više od trideset hiljada opsega.

4. Firewall izbacuje napadača prije nego što stigne

Lista blokiranih objavljuje se kao RBL lista koju HAProxy i OPNsense čitaju direktno. Napadač tako uopće više ne stiže do web-servera — niti do bilo koje druge usluge na istom hostu. Pristup koji je jednom prepoznat kao zlonamjeran tako retroaktivno štiti cijelu mašinu.

Tri nivoa: blokirati, brojati, prijaviti

Nije svaki zahtjev u prazno napad. Web RBL zato razlikuje tri nivoa, a nivo se može promijeniti za svaki uzorak, bez diranja koda.

NivoZahtjev koji ga pokrećePosljedica za adresu
blokiratise odbijablokirana 24 sata, nakon tri sumnjiva dana trajno
brojatiprolazisamo se evidentira, bez blokade
prijavitiprolazievidentira se s tekstom nalaza, nikada se ne blokira

Za liste prijetnji i zemlje postoji četvrti: bez pristupa prijavi. Web-stranica ostaje čitljiva, obrazac za prijavu i sučelja su zatvoreni. To je srednji put za sve što je sumnjivo, ali ne mora biti zlonamjerno — Tor, opseg data-centra, zemlja bez klijenata.

Koji se napadi prepoznaju

Svi uzorci su provjereni na stvarnom prometu. Broj različitih adresa namjerno stoji pored — pokazuje pogađa li uzorak pojedinačni skener ili raširen način postupanja.

Klasa napadaZahtjeviAdrese
Preuzimanje .env datoteka57.721223
PHP sonde12.237256
Path traversal s vrijednim ciljem10.04664
Konfiguracijske datoteke5.535114
Pristupni ključevi za cloud4.388152
WordPress sonde3.366385
Preuzimanje .git direktorija2.811255
Odoo izviđanje (upravitelj baza podataka, upit o verziji)2.500213
AI lanci alata i izvršavanje naredbi (/mcp, /api/fs/exec)2.45074
Upute za izgradnju (CI/CD)1.90788
GraphQL endpointi1.87871

Najnovija klasa je vrijedna pažnje. /api/fs/exec je zatražen 369 puta s 54 različite adrese — to je ne pristup za čitanje, nego pokušaj izvršavanja naredbi. Takvi ciljevi prije dvije godine nisu postojali; potiču iz sučelja novih AI alata i redova zadataka. Ko svoju odbranu usmjerava samo na WordPress i PHP, od toga ništa ne vidi. U ocjeni ova klasa zato teško pada na vagu.

Liste prijetnji i zemlja porijekla

Web RBL liste prijetnji: Tor, Spamhaus DROP, FireHOL, blocklist.de

Četiri liste, 32.851 opseg adresa, sve na „samo prijaviti“. Svaka druga lista je jedna adresa i jedan nivo.

Tuđa lista je tvrdnja koju neko drugi iznosi, iz razloga koje ne poznajemo, o prometu koji nikada nismo vidjeli. Može biti pogrešna, zastarjela ili namijenjena drugoj svrsi: blocklist.de prikuplja uglavnom adrese koje su drugdje isprobavale SSH prijave, a to malo govori o web-serveru. Zato Web RBL vodi tuđe liste odvojeno od vlastite liste blokiranih, i zato je zadana vrijednost prijaviti. A vlastita bijela lista uvijek pobjeđuje: klijent kojeg poznajemo teži više od procjene trećeg lica.

Zemlja porijekla stoji uz svaki pogodak i svaku adresu. Za procjenu je nezamjenjiva — pokušaj prijave iz vlastite zemlje u deset sati prijepodne je nešto drugo nego pokušaj iz zemlje bez ijednog klijenta. Za paušalno isključivanje je malo pogodna, a to govore i naši vlastiti podaci: napadači u našoj listi dolazili su pretežno iz cloud opsega u Belgiji, Finskoj i Nizozemskoj. Blokada za sve izvan njemačkog govornog područja njih ne bi pogodila — ali bi pogodila vlastite zaposlenike na odmoru i klijente na službenom putu.

Web RBL pravila po zemljama: isporučena prazna, s objašnjenjem

Pravila po zemljama isporučuju se prazna, a prikaz kaže zašto.

Pogrešne konfiguracije prijaviti umjesto blokirati

Najčešći slučaj u stvarnom prometu nije ni napad ni posjetitelj, nego neispravan softver koji web-server smatra nečim drugim:

  • 1.367 poziva web-sučelja QNAP NAS-a — sync klijent čiji cilj više nije ispravan. Jedan jedini priključak kucao je 962 puta.
  • 65 Autodiscover upita — Outlook koji web-domenu smatra svojim Exchangeom

Takve adrese se nikada ne blokiraju. Blokada ne otklanja kvar, ona ga skriva — i pogađa onoga čiji uređaj je ionako pogrešno podešen. Umjesto toga nastaje unos s tekstom nalaza i pogođenim domenama, iz kojeg po želji automatski nastaje tiket: tačno jedan po adresi, a ako se zatvori i adresa ponovo upadne u oči, isti tiket se ponovo otvara, umjesto da nastane drugi.

Prepoznaju se QNAP, Synology, Exchange Autodiscover, ActiveSync te WebDAV, CalDAV i CardDAV klijenti. Uzorci pritom navode tačne nazive datoteka i direktorije, nikada puke nastavke: U istom direktoriju /cgi-bin/ bezazleni sync pozivi leže tik uz klasične sonde poput printenv.pl.

Bijela lista: adrese koje se nikada ne blokiraju

Cijena greške nije za sve adrese ista. Kod skenera iz data-centra lažni alarm ne košta ništa. Kod protustrane tunela lokacije košta lokaciju.

Zato postoji druga lista, koja stoji ispred prve: adrese i mreže koje se nikada ne blokiraju. Ona pritom ništa ne utišava — ko je na njoj, i dalje se provjerava i evidentira, samo posljedica izostaje. To je razlika u odnosu na izuzetak u firewallu: on čini slijepim, ova samo strpljivim.

Puni se svakodnevno iz dva izvora: iz samog firewalla sa svim VPN protustranama, da novo uspostavljeni tunel ne zavisi od toga hoće li neko pomisliti na listu blokiranih — i iz objavljenih opsega adresa Googlea i Microsofta za njihove crawlere. Samo tako se pravi Googlebot može razlikovati od skenera koji se tako predstavlja. Tražilice se nikada ne smiju blokirati; ko ih isključi, svoju stranicu bez ikakvog puta povlači iz indeksiranja.

Pritom vrijedi pravilo koje je važnije od poređenja: Prazan odgovor nikada ne briše. Ako izvor ne odgovori, odgovori prazno ili nerazumljivo, lista ostaje nepromijenjena. Bijela lista koja se pri smetnji sama isprazni u najgorem mogućem trenutku povlači sa sobom sve tunele.

Ako unos na bijeloj listi nosi klijenta, svaki pogodak iz njegove mreže dodjeljuje se njemu. Pogrešna konfiguracija tako odmah ima kontakt osobu, a da niko ne mora tražiti adrese.

Obavezni podaci i automatizirani sakupljači podataka

Impressum nije obična stranica. Mora ostati dostupan ljudima, jer blokada na njemu stvara upravo prekršaj koji sakupljač traži. Istovremeno je to stranica na kojoj stoje ime i adresa — a time i meta mašinske žetve.

Tokom austrijskog vala opomena zbog ugrađenih Google fontova, zapisnici su pokazali da dopisi nisu poticali iz pojedinačnih posjeta, nego iz automatiziranog obuhvatnog napada: različiti, međusobno nepovezani hostovi u razmaku od milisekundi.

Web RBL to rješava snižavanjem umjesto izuzetkom. Kanonska putanja /impressum ne pogađa nijedan uzorak i uvijek ostaje dostupna. Tuđi načini pisanja poput /impressum.php — koji na Odoo stranici ne mogu postojati — se prijavljuju, a ko ne želi trpjeti mašinsku žetvu, promijeni jedan parametar. sitemap i robots su od toga izuzeti i načelno se ne mogu blokirati: ne sadrže nikakve lične podatke, a njihovo preuzimanje je zadatak svakog crawlera tražilica.

Domena i identifikator: šta nedostaje u zapisniku pristupa

Zapisnik pristupa werkzeuga ne bilježi ni pozvani host ni identifikator pozivatelja. Odoo oboje naravno dobija — bez hosta ne bi mogao, kod više web-stranica, uopće odabrati pravu. Naknadno to međutim više nije moguće pročitati.

Web RBL bilježi oboje za svaki pogodak. To odgovara na dva pitanja na koja se inače ne može odgovoriti: koju web-stranicu poziva pogrešna konfiguracija — a time i kojem klijentu domena pripada — i posjećuje li adresa jednu stranicu ili sve. Više međusobno nepovezanih domena iste adrese su obilježje obuhvatnog napada, i povećavaju ocjenu.

Koliko identifikator znači, pokazala je analiza na jednoj od naših web-stranica: preko sedamdeset posto ukupnog prometa tamo je otpadalo na jednog jedinog pozivatelja, raspoređenog na više od stotinu adresa. Bez identifikatora to bi izgledalo kao distribuirani scraper. Bio je to GPTBot, OpenAI-jev crawler — stalno je iznova tražio robots.txt i ponašao se potpuno korektno.

Sigurnosni aspekti u pojedinostima

1. Prepoznavanje proxyja — najopasnije mjesto uopće

Ako Odoo radi iza reverse proxyja i proxy_mode je pogrešno postavljen, modul pri svakom zahtjevu vidi istu adresu: adresu proxyja. Blokada bi tada istovremeno isključila sve posjetitelje.

Zato Web RBL prije svake blokade provjerava je li određivanje adrese pouzdano. Zahtijeva proxy_mode zajedno s zaglavljem za prosljeđivanje, odbija raditi ako stigne prosljeđivanje bez proxy_mode, a isto tako odbija rad kod više od jednog posredničkog proxyja. U slučaju sumnje ne blokira se.

2. Vlastite mreže nikada

Privatni opsezi adresa, loopback, link-local i CGNAT su trajno isključeni. Ni pod kojim uvjetima ne mogu završiti na listi, čak ni ručno. Isto vrijedi za tuđe liste: privatni i rezervirani opsezi te apsurdno velike mreže odbacuju se pri učitavanju.

3. Vlastita greška ne smije povući web-stranicu sa sobom

Cjelokupna provjera izvršava se u zaštitnom bloku koji hvata svaku grešku. Što ovdje pođe po zlu, bilježi se, a zahtjev nastavlja neizmijenjen. Zaštitni modul koji pri vlastitoj greški povuče web-stranicu sa sobom gori je od nikakvog. Svi upiti u putanji zahtjeva uz to se izvršavaju bez jezika preglednika posjetitelja i bez sortiranja po prevedenim poljima — posjetitelj s jezikom koji nije instaliran ne smije provjeru uništiti.

4. Posmatrati prije blokiranja

Nakon instalacije blokiranje adresa s liste pri uobičajenim zahtjevima je isključeno. Sonde se odbijaju i evidentiraju, sve ostalo prolazi. Tako se nekoliko dana može pratiti ko zaista završava na listi, prije nego što se neko isključi. Isto vrijedi za prepoznavanje ponašanja, liste prijetnji i pravila po zemljama: prvo prijaviti, blokirati nakon procjene.

5. Uski uzorci umjesto širokih mreža

Pogrešno prepoznat posjetitelj je skuplji od previđene sonde. Svaki uzorak zato nosi svoj nivo, a on se može mijenjati za svaki uzorak. Samo nastavak datoteke rijetko je dovoljan: kod .php stoji 14.012 pravih sondi naspram šačice starih linkova, a kod .asp je odnos obrnut. Takve odluke treba mjeriti, a ne procjenjivati.

6. Ručno odobrenje ostaje na snazi

Ko odobri adresu, imao je razlog. Novi pogodak ne stavlja tu odluku neprimjetno van snage.

7. Lista je zaštićena, ali nije tajna

Endpoint zahtijeva token, a bez važećeg tokena odgovara s 404, ne s 403 — postojanje adrese se tako uopće ne potvrđuje. Poređenje se izvršava u konstantnom vremenu. Sama lista ne sadrži ništa povjerljivo: Sastoji se od adresa koje su same pokucale kod nas.

8. Nikakve tajne u evidenciji

Pri neuspjelim prijavama bilježi se pokušano korisničko ime, nikada lozinka. Kod upravitelja baza podataka iz prosljeđenih vrijednosti se uopće ništa ne čita: Tamo na prvom mjestu stoji glavna lozinka, a unos u listi blokiranih putuje u svaku sigurnosnu kopiju baze podataka. Licenčni ključ za GeoLite2 nalazi se samo u sistemskom parametru i ni u jednom redu zapisnika.

9. Mamac ne odaje ništa upotrebljivo

Opcionalno Web RBL odgovara na sonde izmišljenim sadržajem koji sadrži jedinstvenu kanarinac-vrijednost. Ko tu vrijednost kasnije pozove, pročitao je lažni odgovor i na osnovu njega djelovao — lažni alarm je pritom isključen. Mamci ne sadrže nikakve upotrebljive podatke, nikakve prave putanje i nikakve važeće pristupne podatke. Ova funkcija se isporučuje isključena, jer vidljivo mijenja ponašanje prema van.

Šta modul ne može

Ne zamjenjuje firewall niti Web Application Firewall. On prepoznaje poznate uzorke sondiranja u putanjama, neuspjele prijave i sumnjivo ponašanje — ne napade na obrasce, ne pokušaje ubacivanja koda u parametre.

Osim toga, vidi samo ono što se vrati putem HTTP-a. Šta napadač radi s ukradenim pristupima bazi podataka ili poštanskom sandučetu, ostaje nevidljivo — i upravo zato su kanarinac-vrijednosti putanje, a ne pristupni podaci.

I ne zamjenjuje pažnju: Modul koji odbija .env sonde ne čini nekom greškom isporučenu .env datoteku bezopasnom.

Dostupnost

Web RBL je javno dostupan pod licencom AGPL-3 i kod nas radi produktivno na pet web-stranica:

github.com/Alex0176/odoo-web-rbl

Modul zahtijeva Odoo 19 Community i nema zavisnosti osim base i web. Povezivanje tiketa je opcionalno i ne zahtijeva određeni sistem tiketa; bez njega se jednostavno ništa ne dešava. Zemlja porijekla zahtijeva besplatnu GeoLite2 bazu podataka kompanije MaxMind; ako nedostaje, polje ostaje prazno, a sve ostalo radi neizmijenjeno.

Za dalje: Kako se Web RBL uklapa u cjelovitu sigurnosnu arhitekturu -- zajedno s firewallom, dvofaktorskom autentifikacijom i dozvolama, uključujući upute korak po korak: Kako pravilno kombinirati sigurnosnu arhitekturu za Odoo 19.

Pitanja, napomene i izvještaje o greškama rado primamo — najradije kao issue na GitHubu.