Skip to Content

Odoo 19 Community: Web RBL – bloķēšanas saraksts uzbrukumu datplūsmai uz savām tīmekļa vietnēm

2026. gada 24. septembris by
Odoo 19 Community: Web RBL – bloķēšanas saraksts uzbrukumu datplūsmai uz savām tīmekļa vietnēm

Pirmkods: github.com/Alex0176/odoo-web-rbl — AGPL-3, brīvi izmantojams.

Kas internetā darbina Odoo serveri, tam nāk viesi. Ne reizēm, bet nepārtraukti. Septiņpadsmit dienu laikā mēs savās piecās tīmekļa vietnēs esam reģistrējuši un izvērtējuši 731 297 pieprasījumus. 110 511 no tiem nebija apmeklētāji, bet automatizēta ievainojamību, piekļuves datu un konfigurācijas failu meklēšana.

Šis raksts apraksta Web RBL – atvērtā koda moduli Odoo 19 Community, kas šo datplūsmu atpazīst, novērtē, reģistrē un noraida – un kas bloķēšanas sarakstu publicē kā RBL sarakstu, tātad formātā, ko ugunsmūri un reverse proxy lasa tieši. Visi skaitļi nāk no reālas ekspluatācijas.

Ko modulis spēj – funkciju pārskats

FunkcijaKo tā daraPiegāde
Šablonu atpazīšanaAtpazīst zondēšanu pēc ceļa un paplašinājuma: .env, .git, konfigurācijas faili, mākoņa atslēgas, CI/CD būvēšanas instrukcijas, WordPress, PHP, ceļa šķērsošana, datubāzu pārvaldnieks, GraphQL, komandu izpilde caur /api/fs/exec un līdzīgām saskarnēmbloķēt
Trīs līmeņi katram šablonambloķēt, skaitīt vai ziņot – katram šablonam pārslēdzams, bez kodakatram šablonam
SliekšņiCik trāpījumu viena šablona gadījumā, pirms tiek bloķēts; pieteikšanās gadījumā desmit10 pieteikšanās gadījumā
Pieteikšanās aizsardzībaNeizdevušās pieteikšanās caur veidlapu un XML-RPC/JSON-RPC, neizdevušās sesiju pārbaudes, piekļuves datubāzu pārvaldniekam – datubāzē, nevis operatīvajā atmiņāieslēgts
Botu atpazīšana pieteikšanās vietāKas ignorē gaidīšanas paziņojumu pēc desmit neveiksmīgiem mēģinājumiem un turpina klauvēt, tiek bloķēts nekavējotiesbloķēt
Uzvedības atpazīšanaAdreses, kas piecās minūtēs rada divdesmit kļūdainas lapas un gandrīz nevienu trāpījuma lapu – tātad minēšana, nevis lasīšanaziņot
Vērtējums 0–100Cik droši ir, ka aiz adreses stāv uzbrucējs? No šablona smaguma, dažādu šablonu skaita, izteiktām dienām, skartajiem domēniem un trāpījumu skaita – ar pamatojumu vienkāršā tekstāieslēgts
Pieteikšanās bloķēšana pēc vērtējumaNo iestatāma vērtējuma pieteikšanās ir aizliegta, tīmekļa vietne paliek lasāmano 40
Aizdomas par nozagtiem piekļuves datiemVeiksmīga pieteikšanās no aizdomīgas adreses tiek paziņota un pēc vēlēšanās piešķirta kā uzdevums — reizi par adresi un dienuieslēgts
Apdraudējumu sarakstiTor izejas mezgli, Spamhaus DROP, FireHOL Level 1, blocklist.de ir jau sakonfigurēti; jebkuru citu RBL sarakstu var pievienot pēc adreses, ikdienas salīdzināšana, katram sarakstam sava pakāpeziņot
Nav piekļuves pieteikšanās lapaiCeturtā pakāpe sarakstiem un valstīm: tīmekļa vietni var lasīt, pieteikšanās forma un saskarnes ir slēgtas — piemērota atbilde Tor tīklamOpcija
Izcelsmes valstsValsts pie katra trāpījuma un adreses, izmantojot GeoLite2; moduļa datubāzi atjaunina pats ar bezmaksas licences atslēgurādīt
Valstu noteikumiBloķēt, liegt piekļuvi pieteikšanās lapai, ziņot vai skaidri atļaut — katrai valstij atsevišķi, apzināti bez noklusējumanav
Kļūdainas konfigurācijasQNAP, Synology, Exchange Autodiscover, ActiveSync, WebDAV/CalDAV/CardDAV tiek atpazīti, nekad netiek bloķēti un ar konstatējumu un skarto domēnu tiek ievietoti darba sarakstāziņot
Biļete par adresiNo konstatējuma pēc vēlēšanās rodas biļete — tieši viena par adresi; slēgta biļete tiek atvērta no jauna, nevis dublētaizslēgts
Obligātās lapas un vācējiKanoniskais impresuma ceļš vienmēr paliek pieejams; automatizēta svešu rakstības variantu izmēģināšana tiek atpazīta un pēc vēlēšanās bloķētaziņot
Baltais sarakstsAdreses un tīkli, kas nekad netiek bloķēti; saraksts katru dienu papildinās no ugunsmūra (VPN pretpunkti) un no Googlebot un Bingbot publicētajiem adrešu diapazoniemieslēgts
Klientu piesaisteTrāpījums no klienta tīkla tiek piesaistīts šim klientam — no baltā saraksta, nekad ne uz minējumu pamataieslēgts
Domēns un identifikators pie katra trāpījumaKura tīmekļa vietne tika izsaukta un ar kādu User-Agent — abu piekļuves žurnālā trūkstieslēgts
IzvērtējumsDiagramma un pivot pārskats par visiem trāpījumiem: pēc šablona, dienas, domēna, valsts, adresesieslēgts
ĒsmaZondes saņem izdomātas atbildes ar kanārijvērtību; kas to vēlāk atver, tas atbildes ir izlasījisizslēgts
RBL piegādeBloķēšanas saraksts kā tīrs adrešu saraksts vai JSON atsevišķā, ar token aizsargātā adresē — HAProxy, OPNsense un jebkuram ugunsmūrim, kas nolasa URL sarakstusieslēgts

Viss, kas tiek piegādāts ar ziņot, izslēgts vai opcija, ir tā darīts apzināti: kas bloķēšanu ieslēdz, lai to dara tāpēc, ka dažas dienas ir vērojis, kas tajā iekļūst — nevis tāpēc, ka noklusējums tā noteica.

Web RBL izvērtējums: trāpījumi pa šabloniem septiņu dienu laikā

Izvērtējums: trāpījumi pa šabloniem septiņu dienu laikā. Augstākā josla ir .env failu meklēšana.

RBL saraksti: standartizēts veids, kā piegādāt bloķēšanas

RBL nozīmē Real-time Blackhole List. Šis jēdziens nāk no e-pasta pasaules, kur Spamhaus un citi kopš deviņdesmitajiem gadiem publicē sarakstus ar ļaunprātīgām sūtītāju adresēm. Princips ir neticami vienkāršs un tieši tāpēc tik izplatīts: viena adrese rindā, pieejama pa HTTP, regulāri ielādēta no jauna. Nav formāta, kas vispirms jāparsē, nav saskarnes, kurai vajadzīgs rīks.

Praktiski katrs ugunsmūris un katrs reversais starpniekserveris var nolasīt šādu sarakstu un izveidot no tā noteikumus. Ražotāji to dēvē dažādi, mehānisms visur ir tas pats:

  • OPNsense un pfSense — URL Table Alias: adrešu saraksts tiek ielādēts pa HTTP, izmantots kā aliass ugunsmūra noteikumos, atjaunināšana ik stundu vai katru dienu
  • HAProxy — ACL faili un Maps: src -f sperrliste.txt http-request deny noteikumā, pārlādējams darbības laikā ar API bez restartēšanas
  • nginx — geo modulis ar iekļautu adrešu failu vai deny direktīvas no ģenerēta include faila
  • Fortinet FortiGate — External Block List jeb Threat Feed: URL, no kura ugunsmūris iegūst IP sarakstu un izmanto to politikās
  • Palo Alto Networks — External Dynamic List (EDL): tas pats princips, kā atsevišķs objekta tips drošības politikās
  • Check Point — Custom Intelligence Feeds un IP Block Lists pa URL
  • Cisco Secure Firewall (Firepower) — Security Intelligence Feeds ar pašu saraksta avotiem
  • Sophos Firewall — Third-Party Threat Feeds: adrešu saraksti no URL kā avots bloķēšanas noteikumiem
  • Juniper SRX — Dynamic Address Entries no feed avotiem
  • MikroTik RouterOS — Address Lists, aizpildīti ar skriptu un fetch no URL
  • CrowdSec — pašu saraksti kā avots bouncer komponentiem katrā atbalstītajā sistēmā

Tieši šajā formātā Web RBL piegādā savu bloķēšanas sarakstu. Ugunsmūris noraida paketes, pirms tās sasniedz tīmekļa serveri — un līdz ar tām arī katru citu tās pašas adreses mēģinājumu, piemēram, uz pasta serveri vai VPN vārteju.

Abi virzieni, bet pareizā vieta

Ceļš darbojas arī pretējā virzienā: Web RBL var ievadīt jebkuru RBL sarakstu — viens URL, viena pakāpe, gatavs. Tor izejas mezgli, Spamhaus DROP, FireHOL un blocklist.de ir jau sakonfigurēti, citus var pievienot ar trim klikšķiem. Modulis sadala katru sarakstu adrešu diapazonos un pārbauda katru pieprasījumu pret tiem dažās mikrosekundēs.

Un tomēr: lietderīgāk ir svešus sarakstus izmantot ugunsmūrī šim modulim pa priekšu. Trīs iemeslu dēļ. Ugunsmūris redz visus pakalpojumus, ne tikai HTTP — adresei no Spamhaus saraksta jāatduras arī pie pasta servera un VPN. Tas noraida paketu līmenī, pirms savienojums vispār izveidojas, un lietojumprogrammas serverim tas neprasa neko. Un tā ir vieta, kur šādi saraksti tāpat tiek uzturēti; otra kopija lietojumprogrammā ir otra vieta, kas var novecot.

Kam tad saraksti modulī ir noderīgi: tam, ko ugunsmūris nespēj. Tas nepazīst pieteikšanās formu. Web RBL var adresei no Tor saraksta liegt piekļuvi pieteikšanās lapai, tomēr piegādāt tīmekļa vietni — kas vēlas anonīmi lasīt, tam tas jāļauj; kas anonīmi vēlas izmēģināt paroles, tam nē. Un tas var ziņot par veiksmīgu pieteikšanos no sarakstā iekļautas adreses kā par aizdomu gadījumu. Abiem vajadzīgs saraksts tur, kur notiek pieteikšanās.

Vērtējums, nevis nojauta

Adrese, kas vienreiz ir pieprasījusi /wp-login.php, ir kas cits nekā tā, kas divās dienās ar piecām dažādām šablonu kombinācijām ir apmeklējusi trīs domēnus. Web RBL to pārrēķina vērtējumā no 0 līdz 100 — no tā, ko pats ir redzējis, bez svešiem pakalpojumiem un bez vaicājumiem uz āru.

Web RBL ieraksts ar vērtējumu 84 un pamatojumu

Viens ieraksts: 99 trāpījumi, vērtējums 84 un pamatojums vienkāršā tekstā — smagākais šablons, pieci dažādi nopietni šabloni, divas aizdomīgas dienas, vairāk nekā divdesmit trāpījumu.

Vērtējums nosaka divas lietas. No iestatāmas vērtības pieteikšanās ir aizliegta — tīmekļa vietne paliek lasāma, bet kas jau meklējis piekļuves datus, tas nesaņem iespēju izmēģināt atrastos. Un veiksmīga pieteikšanās no adreses ar vērtējumu tiek paziņota: tad kāds vairs nav minējis, bet zinājis. Vai nu likumīgais lietotājs bija ceļā, vai piekļuves dati ir nozagti — modulis to neizlemj, bet nodod tam, kas var painteresēties. Pati parole tajā nekur netiek aiztikta.

Web RBL bloķēšanas saraksts, filtrēts pēc vērtējuma no 40

Bloķēšanas saraksts, filtrēts pēc vērtējuma no 40: trāpījumu skaits, aizdomīgās dienas, skartie domēni un pēdējais ceļš pa adresēm.

Ko Web RBL aizsargā — aizsardzības efekts sīkāk

1. Piekļuves dati paliek neatklāti

Lielākā izmērītā uzbrukumu klase nemeklē Odoo ievainojamības, bet atstātus noslēpumus. Septiņpadsmit dienu laikā:

  • 57 721 pieprasījumi pēc .env failiem — tur atrodas datubāzu paroles, API atslēgas un sesiju noslēpumi
  • 5 535 pieprasījumi pēc konfigurācijas failiem
  • 4 388 pieprasījumi pēc mākoņa piekļuves datiem: credentials.json, service-account.json, firebase-adminsdk.json, rclone.conf, .git-credentials
  • 2 811 pieprasījumi pēc .git direktorijām — kas tādu atrod, lejupielādē pilnu pirmkodu ar vēsturi
  • 1 907 pieprasījumi pēc būvēšanas instrukcijām, piemēram, .github/workflows/deploy.yml vai .gitlab-ci.yml, kur ir norādīti reģistri un atslēgu nosaukumi

Izšķirošs nav pieprasījumu skaits, bet dažādu adrešu skaits: /credentials.json nāca no 98 adresēm, /.git-credentials no 92. Tas nav viens skeneris, bet standarta repertuārs, kas visā pasaulē darbojas vienlaikus.

2. Pieteikšanās mēģinājumi aiziet tukšumā — pastāvīgi

Odoo ir sava bremze pret paroļu izmēģināšanu. Tai ir trīs ierobežojumi, kas ir dokumentēti pašā Odoo pirmkodā: skaitītājs atrodas darba procesa operatīvajā atmiņā un tiek atiestatīts pie katras restartēšanas, tas tikai aizkavē, nevis bloķē, un tas skaita tikai mēģinājumus, kas nonāk līdz paroles pārbaudei.

Web RBL pieslēdzas tajās pašās vietās, bet raksta datubāzē. Tādējādi ir spēkā:

  • Stāvoklis pārdzīvo katru restartēšanu un ir spēkā visiem darba procesiem
  • Tiek uzskaitīti abi ceļi: pieteikšanās forma /web/login un saskarnes /xmlrpc/2/common un /jsonrpc
  • Tiek uzskaitīti arī mēģinājumi, kas nekad nenonāk līdz paroles pārbaudei — piemēram, pieteikšanās bez derīga sesijas pazīmes
  • Neizdevusies piekļuve datubāzu pārvaldniekam tiek ieskaitīta; tas ir smagākais pieteikšanās mēģinājums vispār

Pieteikšanās slieksnis ir desmit, un iemesls ir mērījums: no deviņām neizdevušām pieteikšanās septiņpadsmit dienās lielākā daļa nāca no klientiem, kuri paši iestatīja piekļuvi vēl vienā ierīcē un ievadīja nepareizu domēnu — vienā gadījumā savējo, tikai ar defisi punkta vietā. Bloķēšana pie pirmā neveiksmīgā mēģinājuma būtu skārusi nevis uzbrucējus, bet klientus iestatīšanas laikā.

Kas turpretī turpina klauvēt, kaut gan serveris jau ir atbildējis “lūdzu, drīz mēģiniet vēlreiz”, tiek bloķēts nekavējoties. Šo ziņojumu lasa cilvēks un gaida; kas to ignorē, ir programma. Atsevišķs šablons ar slieksni nulle noķer tieši šo gadījumu, un tas nevar skart kolēģi: tur nonāk tikai tas, kam jau ir desmit neveiksmīgi mēģinājumi un kas pēc tam turpina.

3. Uzbrukums serverim vairs neko neizmaksā

Zonde uz ceļu, piemēram, /@fs/../../.env, pirms moduļa bija dārga: Odoo meklē kļūdas lapu, renderē to, paklūp adreses veidošanā pie punktu segmentiem un tādēļ neizdodas arī ar kļūdas lapas kļūdas lapu. Divi steka žurnāli uz vienu zondi. Septiņpadsmit dienās tika izmērītas 28 401 šāda kļūda, klāt 9 467 secīgas kļūdas.

Web RBL iejaucas ir.http._match, tātad pirms ceļa noteikšanas. Atbilde tiek sniegta bez veidnes, bez piekļuves datubāzei uz bloķēšanas pārbaudes pusi un bez žurnāla rindas. Pārbaude pret balto sarakstu, apdraudējumu sarakstiem un valstu noteikumiem notiek no kešatmiņas pa sakārtotiem adrešu diapazoniem — dažas mikrosekundes, arī ar vairāk nekā trīsdesmit tūkstošiem diapazonu.

4. Ugunsmūris izmet uzbrucēju, pirms tas ir ieradies

Bloķēšanas saraksts tiek publicēts kā RBL saraksts, ko HAProxy un OPNsense nolasa tieši. Uzbrucējs tādējādi vispār nesasniedz tīmekļa serveri — un arī nevienu citu pakalpojumu uz tā paša resursdatora. Vienreiz kā ļaunprātīga atpazīta piekļuve tādējādi aizsargā arī visu iekārtu ar atpakaļejošu spēku.

Trīs pakāpes: bloķēt, skaitīt, ziņot

Ne katrs pieprasījums tukšumā ir uzbrukums. Tāpēc Web RBL izšķir trīs pakāpes, un pakāpi var mainīt katram šablonam, neskarot kodu.

PakāpeIzraisošais pieprasījumsSekas adresei
bloķēttiek noraidītsbloķēta uz 24 stundām, pēc trim aizdomīgām dienām — pastāvīgi
skaitīttiek izpildītstikai uzskaitīts, bez bloķēšanas
ziņottiek izpildītsuzskaitīts ar konstatējuma tekstu, nekad netiek bloķēts

Apdraudējumu sarakstiem un valstīm ir ceturtā: nav piekļuves pieteikšanās lapai. Tīmekļa vietne paliek lasāma, pieteikšanās forma un saskarnes ir slēgtas. Tas ir vidusceļš visam, kas ir aizdomīgs, bet nav obligāti ļaunprātīgs — Tor, kāds datu centra diapazons, valsts bez klientiem.

Kādi uzbrukumi tiek atpazīti

Visi šabloni ir pārbaudīti pret reālu datplūsmu. Dažādu adrešu skaits tiek apzināti norādīts blakus — tas parāda, vai šablons trāpa vienam skenerim vai plaši izplatītai rīcībai.

Uzbrukumu klasePieprasījumiAdreses
.env nolasīšana57.721223
PHP zondes12.237256
Ceļa traversēšana ar vērtīgu mērķi10.04664
Konfigurācijas faili5.535114
Mākoņa piekļuves atslēgas4.388152
WordPress zondes3.366385
.git nolasīšana2.811255
Odoo izlūkošana (datubāzu pārvaldnieks, versijas vaicājums)2.500213
MI rīku ķēdes un komandu izpilde (/mcp, /api/fs/exec)2.45074
Būvēšanas instrukcijas (CI/CD)1.90788
GraphQL galapunkti1.87871

Ievērības cienīga ir jaunākā klase. /api/fs/exec tika pieprasīts 369 reizes no 54 dažādām adresēm — tā nav lasīšanas piekļuve, bet mēģinājums izpildīt komandas. Šādu mērķu pirms diviem gadiem nebija; tie nāk no jaunu MI rīku saskarnēm un uzdevumu rindām. Kas savu aizsardzību vērš tikai uz WordPress un PHP, tam par to nekas nav zināms. Vērtējumā šī klase attiecīgi smagi nosver.

Apdraudējumu saraksti un izcelsmes valsts

Web RBL apdraudējumu saraksti: Tor, Spamhaus DROP, FireHOL, blocklist.de

Četri saraksti, 32 851 adrešu diapazons, visi uz “tikai ziņot”. Katrs cits saraksts ir viena adrese un viena pakāpe.

Svešs saraksts ir apgalvojums, ko izvirza kāds cits tādu iemeslu dēļ, kurus mēs nezinām, par datplūsmu, ko mēs nekad neesam redzējuši. Tas var būt nepareizs, novecojis vai paredzēts citam mērķim: blocklist.de galvenokārt vāc adreses, kas citur ir izmēģinājušas SSH pieteikšanos, un tas var maz pateikt par tīmekļa serveri. Tāpēc Web RBL tur svešus sarakstus atsevišķi no savējā bloķēšanas saraksta, un tāpēc noklusējums ir ziņot. Un paša baltais saraksts vienmēr uzvar: klients, ko mēs pazīstam, sver vairāk nekā trešās personas vērtējums.

Izcelsmes valsts ir pie katra trāpījuma un katras adreses. Vērtēšanai tā ir neaizvietojama — pieteikšanās mēģinājums no savas valsts pulksten desmitos no rīta ir kas cits nekā tāds no valsts, kurā nav neviena klienta. Vispārējai bloķēšanai tā ir maz piemērota, un to apliecina paši skaitļi: uzbrucēji mūsu sarakstā nāca pārsvarā no mākoņa diapazoniem Beļģijā, Somijā un Nīderlandē. Bloķēšana visam ārpus vācu valodas telpas tos nebūtu skārusi — toties pašu darbiniekus atvaļinājumā un klientus komandējumā.

Web RBL valstu noteikumi: piegādāti tukši, ar paskaidrojumu

Valstu noteikumi tiek piegādāti tukši, un skats paskaidro, kāpēc.

Kļūdainas konfigurācijas ziņot, nevis bloķēt

Biežākais gadījums reālajā datplūsmā nav ne uzbrukums, ne apmeklētājs, bet bojāta programmatūra, kas tīmekļa serveri uzskata par kaut ko citu:

  • 1 367 QNAP NAS tīmekļa saskarnes izsaukumi — sinhronizācijas klients, kura mērķis vairs nav pareizs. Viens vienīgs pieslēgums klauvēja 962 reizes.
  • 65 Autodiscover vaicājumi — Outlook, kas tīmekļa domēnu uzskata par savu Exchange

Šādas adreses nekad netiek bloķētas. Bloķēšana defektu neizlabo, bet to slēpj — un skar to, kura ierīce jau tā ir nepareizi iestatīta. Tā vietā rodas ieraksts ar konstatējuma tekstu un skartajiem domēniem, no kura pēc vēlēšanās automātiski rodas biļete: tieši viena par adresi, un ja tā tiek aizvērta un adrese atkal kļūst pamanāma, tā pati biļete atveras no jauna, nevis rodas otra.

Tiek atpazīti QNAP, Synology, Exchange Autodiscover, ActiveSync un WebDAV, CalDAV un CardDAV klienti. Šabloni norāda precīzus failu nosaukumus un direktorijas, nekad ne tikai paplašinājumus: Tajā pašā direktorijā /cgi-bin/ nekaitīgie sinhronizācijas izsaukumi atrodas tieši blakus klasiskām zondēm, piemēram, printenv.pl.

Baltais saraksts: adreses, kas nekad netiek bloķētas

Kļūdas cena nav visām adresēm vienāda. Skeneram no datu centra viltus trauksme neko neizmaksā. filiāles tuneļa pretpunktam tā izmaksā visu filiāli.

Tāpēc ir otrs saraksts, kas stāv pirms pirmā: adreses un tīkli, kas nekad netiek bloķēti. Tas neko neklusina — kas tajā ir, tas turpina tikt pārbaudīts un uzskaitīts, tikai sekas atkrīt. Tā ir atšķirība no izņēmuma ugunsmūrī: tas padara aklu, šis tikai padara pacietīgu.

To katru dienu papildina no diviem avotiem: no paša ugunsmūra ar visiem VPN pretpunktiem, lai no jauna iestatīts tunelis nebūtu atkarīgs no tā, vai kāds padomā par bloķēšanas sarakstu — un no Google un Microsoft publicētajiem adrešu diapazoniem to rāpuļprogrammām. Tikai tā var atšķirt īstu Googlebot no skenera, kas sevi tā dēvē. Meklētājprogrammas nekad nedrīkst tikt bloķētas; kas tās bloķē, tas savu lapu izņem no indeksēšanas bez atpakaļceļa.

Šeit ir spēkā noteikums, kas ir svarīgāks par salīdzināšanu: Tukša atbilde nekad nedzēš. Ja avots neatbild, atbild tukši vai nesaprotami, saraksts paliek nemainīgs. Baltais saraksts, kas traucējuma gadījumā iztukšojas pats, sliktākajā iedomājamā brīdī paņem līdzi visus tuneļus.

Ja baltā saraksta ierakstam ir piesaistīts klients, katrs trāpījums no viņa tīkla tiek piesaistīts viņam. Kļūdainai konfigurācijai tādējādi uzreiz ir kontaktpersona, un nevienam nav jāmeklē adreses uzziņās.

Obligātā informācija un automatizēti datu vācēji

Impresums nav parasta lapa. Tam jāpaliek cilvēkiem pieejamam, jo bloķēšana uz tā rada tieši to pārkāpumu, ko vācējs meklē. Reizē tā ir lapa, kurā ir vārds un adrese — un tādējādi mašīnveida ražas novākšanas mērķis.

Austrijas brīdinājuma vēstuļu vilnī par iekļautiem Google fontiem žurnāli parādīja, ka vēstules nenāca no vienreizējiem apmeklējumiem, bet no automatizēta vispārēja uzbrukuma: dažādi, savā starpā nesaistīti resursdatori ar milisekunžu intervālu.

Web RBL to risina ar pazeminātu pakāpi, nevis izņēmumu. Kanoniskais ceļš /impressum neatbilst nevienam šablonam un vienmēr paliek pieejams. Svešas rakstības variantus, piemēram, /impressum.php — kuru Odoo lapā nevar būt — tiek paziņoti, un kas mašīnveida ražas novākšanu nevēlas pieņemt, tas pārslēdz vienu parametru. sitemap un robots no tā ir izņemti un principā nav bloķējami: tie nesatur nekādu personas datu informāciju, un to ielāde ir katras meklētājprogrammas rāpuļprogrammas uzdevums.

Domēns un identifikators: kā trūkst piekļuves žurnālā

werkzeug piekļuves žurnāls neraksta ne izsaukto resursdatoru, ne izsaucēja identifikatoru. Odoo abus saņem protams — bez resursdatora tas vairāku tīmekļa vietņu gadījumā vispār nevarētu izvēlēties pareizo. Bet vēlāk to nolasīt nevar.

Web RBL abus saglabā pie katra trāpījuma. Tas atbild uz diviem jautājumiem, uz kuriem citādi atbildēt nevar: kuru tīmekļa vietni kļūdaina konfigurācija izsauc — un tātad, kuram klientam domēns pieder — un vai adrese apmeklē vienu lapu vai visas. Vairāki savā starpā nesaistīti viena un tā paša adreses domēni ir vispārējā uzbrukuma pazīme, un tie paaugstina vērtējumu.

Cik daudz identifikators nozīmē, parādīja kādas mūsu tīmekļa vietnes izvērtējums: vairāk nekā septiņdesmit procentu visas datplūsmas tur nāca no viena vienīga izsaucēja, sadalīta pa vairāk nekā simts adresēm. Bez identifikatora tas būtu izskatījies kā izkliedēts skrāpētājs. Tas bija GPTBot, OpenAI rāpuļprogramma — tā atkal un atkal pieprasīja robots.txt un uzvedās pilnīgi korekti.

Drošības aspekti sīkāk

1. Starpniekservera noteikšana — vispār bīstamākā vieta

Ja Odoo darbojas aiz reversā starpniekservera un proxy_mode ir iestatīts nepareizi, modulis pie katra pieprasījuma redz vienu un to pašu adresi: starpniekservera adresi. Bloķēšana tad vienlaikus bloķētu visus apmeklētājus.

Tāpēc Web RBL pirms katras bloķēšanas pārbauda, vai adreses noteikšana ir uzticama. Tas pieprasa proxy_mode kopā ar pāradresēšanas galveni, atsakās strādāt, ja pāradresēšana ienāk bez proxy_mode, un atsakās tāpat, ja ir vairāk nekā viens starpposma starpniekserveris. Šaubu gadījumā netiek bloķēts.

2. Pašu tīklus nekad

Privātie adrešu diapazoni, loopback, link-local un CGNAT ir pastāvīgi izņemti. Tie nekādos apstākļos nevar nonākt sarakstā, arī ne ar roku. Tas pats attiecas uz svešiem sarakstiem: privātie un rezervētie diapazoni, kā arī absurdi lieli tīkli tiek noraidīti ielasīšanas laikā.

3. Pašu kļūda nedrīkst aizvest līdzi tīmekļa vietni

Visa pārbaude darbojas aizsargblokā, kas noķer katru kļūdu. Kas šeit noiet greizi, tiek reģistrēts, un pieprasījums turpina darbu nemainīts. Aizsardzības modulis, kas pie savas kļūdas aizved līdzi tīmekļa vietni, ir sliktāks par nekādu. Visi vaicājumi pieprasījuma ceļā turklāt darbojas bez apmeklētāja pārlūka valodas un bez kārtošanas pēc tulkotiem laukiem — apmeklētājs ar neuzstādītu valodu nedrīkst likt pārbaudei neizdoties.

4. Novērot pirms bloķēšanas

Pēc instalēšanas sarakstā iekļauto adrešu bloķēšana pie parastiem pieprasījumiem ir izslēgta. Zondes tiek noraidītas un uzskaitītas, viss pārējais tiek izpildīts. Tā var dažas dienas lasīt līdzi, kas patiesībā nonāk sarakstā, pirms kāds tiek bloķēts. Tas pats attiecas uz uzvedības atpazīšanu, apdraudējumu sarakstiem un valstu noteikumiem: vispirms ziņot, bloķēt pēc apskates.

5. Šauri šabloni, nevis plaši tīkli

Kļūdaini atpazīts apmeklētājs ir dārgāks par nepamanītu zondi. Katram šablonam tāpēc ir sava pakāpe, un to var mainīt katram šablonam. Faila paplašinājuma vien reti pietiek: pie .php ir 14 012 īstas zondes pret saujiņu veco saišu, pie .asp attiecība ir pretēja. Šādi lēmumi jāmēra, nevis jānovērtē.

6. Ar roku piešķirta atļauja paliek spēkā

Kas adresi atļauj, tam bija iemesls. Vēl viens trāpījums šo lēmumu klusējot neatceļ.

7. Saraksts ir aizsargāts, bet nav noslēpums

Galapunkts pieprasa token un bez derīga token atbild ar 404, nevis ar 403 — adreses esamība tādējādi vispār netiek apstiprināta. Salīdzināšana notiek konstantā laikā. Pats saraksts nesatur neko konfidenciālu: tas sastāv no adresēm, kas pašas ir pie mums pieklauvējušas.

8. Nekādu noslēpumu uzskaitē

Pie neizdevušām pieteikšanās tiek atzīmēts mēģinātais lietotājvārds, nekad ne parole. Pie datubāzu pārvaldnieka no nodotajām vērtībām netiek nolasīts nekas: tur pašā priekšā ir galvenā parole, un ieraksts bloķēšanas sarakstā nonāk katrā datubāzes rezerves kopijā. GeoLite2 licences atslēga ir tikai sistēmas parametrā un nevienā žurnāla rindā.

9. Ēsma neatklāj neko izmantojamu

Pēc izvēles Web RBL atbild uz zondēm ar izdomātu saturu, kas satur nepārprotamu kanārijvērtību. Kas šo vērtību vēlāk atver, ir izlasījis viltoto atbildi un pēc tam rīkojies — viltus trauksme tādējādi ir izslēgta. Ēsmas nesatur nekādu izmantojamu informāciju, nekādus īstus ceļus un nekādus derīgus piekļuves datus. Šī funkcija tiek piegādāta izslēgta, jo tā maina uzvedību uz āru redzamā veidā.

Ko modulis nespēj

Tas neaizstāj ne ugunsmūri, ne tīmekļa lietojumprogrammu ugunsmūri. Tas atpazīst zināmus zondēšanas šablonus ceļos, neizdevušās pieteikšanās un aizdomīgu uzvedību — nevis uzbrukumus formām, nevis ievadīšanas mēģinājumus parametros.

Turklāt tas redz tikai to, kas atgriežas pa HTTP. Ko uzbrucējs ar nozagtām datubāzes vai pastkastes piekļuvēm dara, paliek neredzams — un tieši tāpēc kanārijvērtības ir ceļi, nevis piekļuves dati.

Un tas neaizstāj rūpību: modulis, kas noraida .env zondes, nepadara nekaitīgu kļūdaini piegādātu .env failu.

Pieejamība

Web RBL ir publiski pieejams ar AGPL-3 licenci un mums darbojas produktīvi piecās tīmekļa vietnēs:

github.com/Alex0176/odoo-web-rbl

Modulim vajadzīgs Odoo 19 Community, un tam nav atkarību, izņemot base un web. Biļešu sistēmas pieslēgums ir izvēles un neprasa konkrētu biļešu sistēmu; bez tādas vienkārši nekas nenotiek. Izcelsmes valstij vajadzīga bezmaksas MaxMind GeoLite2 datubāze; ja tās nav, lauks paliek tukšs un viss pārējais darbojas nemainīti.

Turpmākai lasīšanai: Kā Web RBL iekļaujas pilnā drošības arhitektūrā -- kopā ar ugunsmūri, divfaktoru autentifikāciju un atļaujām, ieskaitot soli pa solim instrukciju: Odoo 19 drošības arhitektūras pareiza kombinēšana.

Jautājumus, piezīmes un kļūdu ziņojumus mēs labprāt pieņemam — vislabāk kā issue GitHub.