Mənbə kodu: github.com/Alex0176/odoo-web-rbl — AGPL-3, sərbəst istifadə oluna bilər.
Odoo serverini internetdə işlədən kəsə qonaq gəlir. Ara-sıra yox, fasiləsiz. On yeddi gün ərzində beş veb saytımızda 731.297 sorğunu qeyd edib təhlil etdik. Onlardan 110.511-i ziyarətçi deyildi, zəifliklərin, giriş məlumatlarının və konfiqurasiya fayllarının avtomatlaşdırılmış axtarışı idi.
Bu yazı Web RBL-i təsvir edir – Odoo 19 Community üçün bu trafiki aşkar edən, qiymətləndirən, qeydə alan və rədd edən və bloklama siyahısını RBL siyahısı kimi yayımlayan açıq mənbəli modul, yəni firewall-ların və reverse proxy-lərin birbaşa oxuduğu formatda. Bütün rəqəmlər real istismardandır.
Modulun bacardıqları — funksiyalara ümumi baxış
| Funksiya | Nə edir | Çatdırılma |
|---|---|---|
| Nümunə tanıma | Zondlamaları yol və uzantı üzrə tanıyır: .env, .git, konfiqurasiya faylları, bulud açarları, CI/CD qurma təlimatları, WordPress, PHP, yol keçidi (Path Traversal), verilənlər bazası idarəçisi, GraphQL, /api/fs/exec və oxşar interfeyslər vasitəsilə əmrin icrası | bloklamaq |
| Hər nümunə üzrə üç səviyyə | bloklamaq, saymaq və ya bildirmək — hər nümunə üzrə koddan asılı olmayaraq dəyişdirilə bilər | hər nümunə üzrə |
| Hədlər | Bloklanmazdan əvvəl eyni nümunənin neçə rast gəlməsi; girişlər üçün on | girişdə 10 |
| Giriş müdafiəsi | Forma və XML-RPC/JSON-RPC vasitəsilə uğursuz girişlər, uğursuz sessiya yoxlamaları, verilənlər bazası idarəçisinə girişlər — verilənlər bazasında, əməli yaddaşda yox | aktiv |
| Girişdə bot tanıma | On uğursuz cəhddən sonra gözləmə mesajına məhəl qoymayıb vurmağa davam edən dərhal bloklanır | bloklamaq |
| Davranış tanıma | Beş dəqiqədə iyirmi səhv səhifə və demək olar ki, heç bir uğurlu səhifə yaradan ünvanlar — yəni oxumaq əvəzinə təxmin edənlər | bildirmək |
| Qiymətləndirmə 0–100 | Ünvanın arxasında hücumçu olduğuna nə qədər əminik? Nümunənin ciddiliyindən, fərqli nümunələrin sayından, nəzərəçarpan günlərdən, təsirlənmiş domenlərdən və rast gəlmə sayından — açıq mətnlə əsaslandırma ilə | aktiv |
| Qiymətləndirməyə görə giriş bloku | Tənzimlənə bilən qiymətləndirmədən başlayaraq giriş qadağan olunur, veb sayt oxunaqlı qalır | 40-dan |
| Oğurlanmış giriş məlumatlarına şübhə | Şübhəli ünvandan edilən uğurlu giriş bildirilir və istəyə görə tapşırıq kimi təyin olunur — hər ünvan üçün gündə bir dəfə | aktiv |
| Təhdid siyahıları | Tor çıxış qovşaqları, Spamhaus DROP, FireHOL Level 1, blocklist.de əvvəlcədən konfiqurasiya olunub; hər hansı digər RBL siyahısı ünvanla əlavə edilə bilər, gündəlik müqayisə, hər siyahı üçün ayrıca səviyyə | bildirmək |
| Girişə icazə yoxdur | Siyahılar və ölkələr üçün dördüncü səviyyə: veb sayt oxunur, giriş forması və interfeyslər bağlıdır — Tor üçün uyğun cavab | Seçim |
| Mənşə ölkəsi | GeoLite2 vasitəsilə hər uyğunluq və ünvan üçün ölkə; modul verilənlər bazasını pulsuz lisenziya açarı ilə özü yeniləyir | göstər |
| Ölkə qaydaları | Blokla, girişə icazə vermə, bildir və ya açıq şəkildə azad et — hər ölkə üçün, qəsdən ilkin dəyər olmadan | yoxdur |
| Yanlış konfiqurasiyalar | QNAP, Synology, Exchange Autodiscover, ActiveSync, WebDAV/CalDAV/CardDAV aşkar edilir, heç vaxt bloklanmır və nəticə və təsirə məruz qalan domen ilə iş siyahısına əlavə olunur | bildirmək |
| Hər ünvana bir bilet | Nəticədən istəyə görə bilet yaranır — hər ünvana dəqiq bir bilet; bağlanmış bilet ikiqat yaranmaq əvəzinə yenidən açılır | söndürülüb |
| Məcburi səhifələr və yığıcılar | Kanonik Impressum yolu həmişə əlçatan qalır; yad yazılış variantlarının maşın vasitəsilə sınanması aşkar edilir və istəyə görə bloklanır | bildirmək |
| İcazə siyahısı | Heç vaxt bloklanmayan ünvanlar və şəbəkələr; hər gün firewall-dan (VPN qarşı tərəfləri) və Googlebot ilə Bingbot-un dərc edilmiş ünvan diapazonlarından dolur | aktiv |
| Müştəri təyinatı | Müştərinin şəbəkəsindən gələn uyğunluq ona təyin olunur — icazə siyahısından, heç vaxt əllə təxmin edilmədən | aktiv |
| Hər uyğunluq üçün domen və identifikator | Hansı veb sayta müraciət edilib, hansı User-Agent ilə — hər ikisi giriş jurnalında yoxdur | aktiv |
| Təhlil | Bütün uyğunluqlar üzrə diaqram və pivot: şablon, gün, domen, ölkə, ünvan üzrə | aktiv |
| Yem | Zondlara kanar dəyəri olan uydurma cavablar verilir; onu sonradan çağıran şəxs cavabı oxuyub | söndürülüb |
| RBL çatdırılması | Bloklama siyahısı sadə ünvan siyahısı və ya JSON kimi, token ilə qorunan ayrıca ünvanda — HAProxy, OPNsense və URL siyahılarını oxuyan hər firewall üçün | aktiv |
Bildir, söndürülüb və ya seçim ilə təqdim olunan hər şey qəsdən belədir: Bloku aktivləşdirən şəxs bunu bir neçə gün baxdığına görə, kimin bu tələyə düşdüyünü gördüyünə görə etməlidir — ilkin parametr belə istədiyi üçün yox.
Təhlil: yeddi gün ərzində şablonlar üzrə uyğunluqlar. Ən hündür sütun .env fayllarının axtarışıdır.
RBL siyahıları: blokları çatdırmaq üçün standartlaşdırılmış yol
RBL Real-time Blackhole List sözlərinin abreviaturasıdır. Bu anlayış mail dünyasından gəlir; orada Spamhaus və digərləri doxsanıncı illərdən bəri zərərli göndərən ünvanların siyahılarını dərc edir. Prinsip olduqca sadədir və məhz buna görə geniş yayılıb: hər sətirdə bir ünvan, HTTP ilə əldə edilə bilən, müntəzəm yenidən yüklənən. Əvvəlcə analiz edilməli format yoxdur, alət tələb edən interfeys yoxdur.
Praktiki olaraq hər firewall və hər reverse proxy belə bir siyahını oxuyub ondan qaydalar yarada bilər. İstehsalçılar bunu fərqli adlandırır, mexanizm isə hər yerdə eynidir:
- OPNsense və pfSense — URL Table Alias: ünvan siyahısını HTTP ilə yükləmək, firewall qaydalarında alias kimi istifadə etmək, saatlıq və ya gündəlik yenilənmə
- HAProxy — ACL faylları və Map-lər:
http-request denyqaydasındasrc -f sperrliste.txt, icra müddəti API-si vasitəsilə yenidən başlatmadan yenidən yüklənə bilər - nginx — qoşulmuş ünvan faylı ilə geo modulu və ya yaradılmış
includefaylındandenygöstərişləri - Fortinet FortiGate — External Block List və ya Threat Feed: firewall-ın IP siyahısını götürüb siyasətlərdə istifadə etdiyi bir URL
- Palo Alto Networks — External Dynamic List (EDL): eyni prinsip, təhlükəsizlik siyasətlərində ayrıca obyekt növü kimi
- Check Point — URL vasitəsilə Custom Intelligence Feeds və IP Block Lists
- Cisco Secure Firewall (Firepower) — öz siyahı mənbələri ilə Security Intelligence Feeds
- Sophos Firewall — Third-Party Threat Feeds: bloklama qaydaları üçün mənbə kimi URL-dən ünvan siyahıları
- Juniper SRX — feed-lərdən Dynamic Address Entries
- MikroTik RouterOS — Address Lists, skript və
fetchilə URL-dən doldurulur - CrowdSec — dəstəklənən hər sistemdəki bouncer-lər üçün mənbə kimi öz siyahıları
Web RBL öz bloklama siyahısını məhz bu formatda təqdim edir. Firewall paketləri veb serverə çatmamış rədd edir — və onlarla birlikdə eyni ünvanın hər hansı digər cəhdini də, məsələn mail serverə və ya VPN gateway-ə.
Hər iki istiqamət, lakin düzgün yer
Yol əks istiqamətdə də işləyir: Web RBL-də istənilən RBL siyahısını qeyd etmək olar — bir URL, bir səviyyə, hazırdır. Tor çıxış qovşaqları, Spamhaus DROP, FireHOL və blocklist.de əvvəlcədən konfiqurasiya olunub, yenilərini üç klikləmə ilə əlavə etmək olar. Modul hər siyahını ünvan diapazonlarına bölür və hər sorğunu onlarla müqayisə edir, bir neçə mikrosaniyə ərzində.
Buna baxmayaraq: kənar siyahıları onun qarşısındakı firewall-da istifadə etmək daha məntiqlidir. Üç səbəbə görə. Firewall bütün xidmətləri görür, yalnız HTTP-ni yox — Spamhaus siyahısından olan ünvan mail serverdə və VPN-də də uğursuz olmalıdır. O, paket səviyyəsində, bağlantı ümumiyyətlə qurulmamışdan əvvəl rədd edir və beləliklə tətbiq serverinə heç nəyə başa gəlmir. Və bu siyahıların zatən saxlandığı yer məhz odur; tətbiqdə ikinci surət köhnələ bilən ikinci yer deməkdir.
Bəs siyahıların modulda nəyə faydası var: firewall-ın bacarmadığı şeylər üçün. O, giriş formasını tanımır. Web RBL Tor siyahısındakı ünvana girişdən imtina edə və veb saytı yenə də göstərə bilər — anonim oxumaq istəyən buna haqlıdır; anonim şəkildə parolları sınamaq istəyən isə yox. Və o, siyahıda olan ünvandan edilən uğurlu girişi şübhəli hal kimi bildirə bilər. Hər ikisi üçün siyahı girişin baş verdiyi yerdə lazımdır.
Qiymətləndirmə, təxmin deyil
Bir dəfə /wp-login.php soruşan ünvan, iki gün ərzində üç
domen üzrə beş fərqli şablonla gəzən ünvandan tamamilə fərqlidir. Web RBL
bunu 0-dan 100-ə qədər qiymətləndirməyə çevirir — özünün
gördüklərindən, kənar xidmət olmadan və xaricə sorğu göndərmədən.
Bir qeyd: 99 uyğunluq, qiymətləndirmə 84 və açıq mətnlə əsaslandırma — ən ağır şablon, beş fərqli ciddi şablon, iki şübhəli gün, iyirmidən çox uyğunluq.
Qiymətləndirmə iki şeyi müəyyən edir. Tənzimlənə bilən dəyərdən etibarən giriş qadağandır — veb sayt oxunaqlı qalır, lakin artıq giriş məlumatlarını axtarmış şəxs tapdıqlarını sınamaq imkanı əldə etmir. Və qiymətləndirməsi olan ünvandan edilən uğurlu giriş bildirilir: onda kimsə artıq təxmin etmir, bilirdi. Ya səlahiyyətli istifadəçi səfərdə idi, ya da giriş məlumatları itib — modul bunu həll etmir, soruşa biləcək birinin qarşısına qoyur. Parolun özünə isə heç vaxt toxunulmur.
Qiymətləndirməsi 40-dan yuxarı filtrlənmiş bloklama siyahısı: uyğunluqların sayı, şübhəli günlər, təsirə məruz qalan domenlər və hər ünvan üçün son yol.
Web RBL nəyi qoruyur — qorumanın təfərrüatları
1. Giriş məlumatları aşkarlanmamış qalır
Ölçülən ən böyük hücum sinfi Odoo-dakı boşluqları deyil, unudulub qalmış sirləri axtarır. On yeddi gün ərzində:
- 57.721 sorğu
.envfayllarına — orada verilənlər bazası parolları, API açarları və sessiya sirləri durur - Konfiqurasiya fayllarına 5.535 sorğu
- Bulud giriş məlumatlarına 4.388 sorğu:
credentials.json,service-account.json,firebase-adminsdk.json,rclone.conf,.git-credentials - 2.811 sorğu
.gitqovluqlarına — birini tapan şəxs tarixçəsi ilə birlikdə tam mənbə kodunu endirir - 1.907 sorğu
.github/workflows/deploy.ymlvə ya.gitlab-ci.ymlkimi, reyestrlərin və açar adlarının göstərildiyi build təlimatlarına
Burada həlledici olan sorğuların sayı deyil, fərqli ünvanların
sayıdır: /credentials.json 98 ünvandan, /.git-credentials 92 ünvandan
gəldi. Bu tək bir skaner deyil, bütün dünyada eyni vaxtda
işləyən standart repertuardır.
2. Giriş cəhdləri boşa çıxır — davamlı olaraq
Odoo-nun parolların sınanmasına qarşı öz əyləci var. Onun üç hüdudu var və bunlar Odoo mənbə kodunun özündə sənədləşdirilib: Sayğac iş prosesinin əməli yaddaşındadır və hər yenidən başlatmada sıfırlanır, bloklamaq əvəzinə yalnız gecikdirir və yalnız parol yoxlamasına qədər çatan cəhdləri sayır.
Web RBL eyni nöqtələrdən işə qoşulur, lakin verilənlər bazasına yazır. Beləliklə:
- Vəziyyət hər yenidən başlatmadan sağ çıxır və bütün iş proseslərində etibarlıdır
- Hər iki yol qeydə alınır:
/web/logingiriş forması və/xmlrpc/2/commonilə/jsonrpcinterfeysləri - Parol yoxlamasına heç vaxt çatmayan cəhdlər də qeydə alınır — məsələn etibarlı sessiya əlaməti olmadan edilən girişlər
- Verilənlər bazası menecerində uğursuz giriş də sayılır; bu, ümumiyyətlə ən ağır giriş cəhdidir
Girişlər üçün hədd onda müəyyən edilib və səbəb ölçmədir: On yeddi gün ərzində doqquz uğursuz girişin əksəriyyəti müştərilərdən gəlirdi; onlar girişi özləri başqa cihazda qurur və bu zaman yanlış domen daxil edirdilər — bir halda öz domenlərini, yalnız nöqtə əvəzinə defislə. İlk uğursuz cəhddə blok hücumçuları deyil, qurulum zamanı müştərilərimizi vuracaqdı.
Server artıq „xahiş edirik bir az gözləyin" cavabını verdiyi halda yenə də döyənlər isə dərhal bloklanır. Bu mesajı insan oxuyur və gözləyir; onu nəzərə almayan isə proqramdır. Hədd sıfır olan ayrıca şablon məhz bu halı tutur və bir həmkarı vura bilməz: ora yalnız artıq on uğursuz cəhdi olan və bundan sonra davam edən şəxs çatır.
3. Hücum artıq serverə heç nəyə başa gəlmir
/@fs/../../.env kimi yola zond modul olmadan
bahalı idi: Odoo xəta səhifəsini axtarır, onu render edir, ünvanı qurarkən
nöqtə seqmentlərində büdrəyir və bunun nəticəsində xəta səhifəsinin
xəta səhifəsində də uğursuz olur. Hər zond üçün iki
stek jurnalı. On yeddi gün ərzində 28.401 belə xəta,
bunlara əlavə olaraq 9.467 ardıcıl xəta ölçüldü.
Web RBL ir.http._match-a, yəni marşrut tapılmasından
öncə müdaxilə edir. Cavab şablonsuz, bloklama yoxlamasından
kənar verilənlər bazasına giriş olmadan və jurnal sətri olmadan verilir. İcazə siyahısına,
təhdid siyahılarına və ölkə qaydalarına qarşı yoxlama keşdən sıralanmış
ünvan diapazonları üzrə işləyir — bir neçə
mikrosaniyə, hətta otuz mindən çox diapazonda da.
4. Firewall hücumçunu gəlib çatmamış kənara atır
Bloklama siyahısı RBL siyahısı kimi dərc olunur və HAProxy ilə OPNsense onu birbaşa oxuyur. Beləliklə hücumçu veb serverə ümumiyyətlə çatmır — eyni hostdakı başqa heç bir xidmətə də. Bir dəfə zərərli kimi tanınan giriş beləliklə bütün maşını geriyə dönük qoruyur.
Üç səviyyə: blokla, say, bildir
Boşluğa gedən hər sorğu hücum deyil. Buna görə Web RBL üç səviyyəni fərqləndirir və səviyyə hər şablon üçün koda toxunmadan dəyişdirilə bilər.
| Səviyyə | Tətikləyən sorğu | Ünvan üçün nəticə |
|---|---|---|
| blokla | rədd edilir | 24 saat bloklanır, üç şübhəli gündən sonra daimi |
| say | keçir | yalnız qeydə alınır, blok yoxdur |
| bildir | keçir | nəticə mətni ilə qeydə alınır, heç vaxt bloklanmır |
Təhdid siyahıları və ölkələr üçün dördüncüsü də var: girişə icazə yoxdur. Veb sayt oxunaqlı qalır, giriş forması və interfeyslər bağlıdır. Bu, şübhəli, lakin zərərli olması vacib olmayan hər şey üçün orta yoldur — Tor, bir məlumat mərkəzi diapazonu, müştərisi olmayan bir ölkə.
Hansı hücumlar aşkar edilir
Bütün şablonlar real trafikə qarşı yoxlanılıb. Fərqli ünvanların sayı qəsdən yanında göstərilib — o göstərir ki, şablon tək bir skaneri tutur, yoxsa geniş yayılmış üsulu.
| Hücum sinfi | Sorğular | Ünvanlar |
|---|---|---|
.env oğurluğu | 57.721 | 223 |
| PHP zondları | 12.237 | 256 |
| Dəyərli hədəfə yönəlmiş yol traversalı | 10.046 | 64 |
| Konfiqurasiya faylları | 5.535 | 114 |
| Bulud giriş açarları | 4.388 | 152 |
| WordPress zondları | 3.366 | 385 |
.git oğurluğu | 2.811 | 255 |
| Odoo kəşfiyyatı (verilənlər bazası meneceri, versiya sorğusu) | 2.500 | 213 |
Süni intellekt alət zəncirləri və əmrlərin icrası (/mcp, /api/fs/exec) | 2.450 | 74 |
| Build təlimatları (CI/CD) | 1.907 | 88 |
| GraphQL son nöqtələri | 1.878 | 71 |
Ən yeni sinif diqqətəlayiqdir. /api/fs/exec
54 fərqli ünvandan 369 dəfə soruşuldu — bu oxuma
müraciəti deyil, əmrləri icra etmək cəhdidir. Belə
hədəflər iki il əvvəl yox idi; onlar yeni süni intellekt alətlərinin və tapşırıq
navbətlərinin interfeyslərindən qaynaqlanır. Müdafiəsini yalnız
WordPress və PHP-yə yönəldən bundan heç nə görmür. Qiymətləndirmədə
bu sinif müvafiq olaraq ağır çəkir.
Təhdid siyahıları və mənşə ölkəsi
Dörd siyahı, 32.851 ünvan diapazonu, hamısı „yalnız bildir" rejimində. Hər digər siyahı bir ünvan və bir səviyyədir.
Kənar siyahı bizim tanımadığımız səbəblərdən, heç vaxt
görmədiyimiz trafik haqqında başqasının irəli sürdüyü iddiadır. O yanlış,
köhnəlmiş və ya başqa məqsəd üçün nəzərdə tutulmuş ola bilər: blocklist.de
daha çox başqa yerdə SSH girişlərini sınamış ünvanları toplayır və bu,
veb server haqqında az şey deyir. Buna görə Web RBL kənar siyahıları
öz bloklama siyahısından ayrı aparır və buna görə də ilkin dəyər
bildir-dir. Və öz icazə siyahımız həmişə qalib gəlir: tanıdığımız
müştəri üçüncü tərəfin qiymətləndirməsindən daha ağır çəkir.
Mənşə ölkəsi hər uyğunluqda və hər ünvanda göstərilir. Qiymətləndirmə üçün əvəzsizdir — öz ölkəsindən səhər saat onda edilən giriş cəhdi bir nəfər müştərisi olmayan ölkədən edilən cəhddən fərqlənir. Toplu bloklama üçün isə az yarayır və bunu öz rəqəmlərimiz deyir: Siyahımızdakı hücumçular əsasən Belçika, Finlandiya və Niderlanddakı bulud diapazonlarından gəlirdi. Alman dilli məkandan kənardakı hər şeyə qoyulan blok onları vurmazdı — əvəzində öz əməkdaşlarımızı məzuniyyətdə və müştərilərimizi iş səfərində vurardı.
Ölkə qaydaları boş təqdim olunur və görünüş nəyə görə olduğunu izah edir.
Yanlış konfiqurasiyaları bloklamaq əvəzinə bildir
Real trafikdə ən tez-tez rast gəlinən hal nə hücum, nə də ziyarətçidir, bəlkə də veb serveri başqa bir şey hesab edən nasaz proqram təminatıdır:
- Bir QNAP NAS-ın veb interfeysinə 1.367 müraciət — hədəfi artıq düzgün olmayan sinxronizasiya müştərisi. Tək bir bağlantı 962 dəfə döydü.
- 65 Autodiscover sorğusu — veb domeni öz Exchange-i hesab edən Outlook
Belə ünvanlar heç vaxt bloklanmır. Blok qüsuru aradan qaldırmır, onu gizlədir — və cihazı onsuz da yanlış qurulmuş şəxsi vurur. Əvəzində nəticə mətni və təsirə məruz qalan domenlərlə qeyd yaranır, ondan istəyə görə avtomatik bilet yaranır: hər ünvana dəqiq bir bilet, və bağlanıb ünvan yenidən diqqəti cəlb edərsə, ikinci bilet yaranmaq əvəzinə eyni bilet yenidən açılır.
QNAP, Synology, Exchange Autodiscover, ActiveSync
və WebDAV, CalDAV və CardDAV müştəriləri aşkar edilir. Şablonlar
dəqiq fayl adlarını və qovşaqları göstərir, heç vaxt sadəcə uzantıları yox:
Eyni /cgi-bin/ qovluğunda zərərsiz
sinxronizasiya sorğuları printenv.pl kimi klassik zondların
birbaşa yanında yerləşir.
İcazə siyahısı: heç vaxt bloklanmayan ünvanlar
Səhvin qiyməti bütün ünvanlar üçün eyni deyil. Məlumat mərkəzindən olan skaner üçün yanlış həyəcan heç nəyə başa gəlmir. Filial tunelinin qarşı tərəfi üçün isə filiala başa gəlir.
Buna görə birincidən əvvəl duran ikinci siyahı var: heç vaxt bloklanmayan ünvanlar və şəbəkələr. O, heç nəyi susdurmur — orada olan yenə yoxlanılır və qeydə alınır, yalnız nəticə düşür. Firewall-dakı istisnadan fərqi budur: O kor edir, bu isə yalnız səbirli edir.
O, hər gün iki mənbədən doldurulur: firewall-ın özündən bütün VPN qarşı tərəfləri ilə, yeni qurulmuş tunelin kimsənin bloklama siyahısını düşünməsindən asılı olmaması üçün — və Google və Microsoft-un crawler-ləri üçün dərc etdiyi ünvan diapazonlarından. Yalnız belə həqiqi Googlebot-u özünü belə adlandıran skanerdən ayırmaq olar. Axtarış sistemləri heç vaxt bloklanmamalıdır; onları bloklayan saytını indeksləşdirmədən geri dönüşsüz çıxarır.
Burada müqayisədən daha vacib olan qayda geçərlidir: Boş cavab heç vaxt silmir. Mənbə cavab vermirsə, boş və ya anlaşılmaz cavab verirsə, siyahı dəyişməz qalır. Nasazlıq zamanı özünü boşaldan icazə siyahısı ən pis mümkün anda bütün tunelləri də özü ilə aparır.
İcazə siyahısı qeydi müştərini daşıyırsa, onun şəbəkəsindən gələn hər uyğunluq ona təyin olunur. Yanlış konfiqurasiyanın beləliklə dərhal əlaqə şəxsi olur, heç kimin ünvanları axtarmasına ehtiyac olmadan.
Məcburi məlumatlar və avtomatlaşdırılmış data yığıcıları
Impressum adi səhifə deyil. O, insanlar üçün əlçatan qalmalıdır, çünki onun bloklanması yığıcının axtardığı pozuntunu məhz yaradır. Eyni zamanda ad və ünvanın durduğu səhifədir — və beləliklə maşın yığımının hədəfidir.
Avstriyada yerləşdirilmiş Google şriftlərinə görə xəbərdarlıq məktubları dalğası zamanı jurnallar göstərdi ki, məktublar tək-tək ziyarətlərdən deyil, avtomatlaşdırılmış kütləvi hücumdan qaynaqlanırdı: bir-biri ilə əlaqəsi olmayan fərqli hostlar millisaniyə fasilələrlə.
Web RBL bunu istisna əvəzinə aşağı salma ilə həll edir. Kanonik
/impressum yolu heç bir şablona düşmür və
həmişə əlçatan qalır. /impressum.php kimi
yad yazılışlar — Odoo saytında
ola bilməyən — bildirilir və maşın yığımını
qəbul etmək istəməyən parametri dəyişir.
sitemap və robots bundan istisnadır
və prinsipcə bloklana bilməz: onlar heç bir
şəxsi məlumat ehtiva etmir və onları əldə etmək hər
axtarış sistemi crawler-inin vəzifəsidir.
Domen və identifikator: giriş jurnalında nə çatışmır
werkzeug-un giriş jurnalı nə müraciət edilən hostu, nə də müraciət edənin identifikatorunu yazmır. Odoo hər ikisini təbii olaraq alır — hostsuz birdən çox veb sayt olduqda düzgününü ümumiyyətlə seçə bilməzdi. Lakin sonradan oxumaq mümkün deyil.
Web RBL hər uyğunluq üçün hər ikisini saxlayır. Bu, başqa cür cavablandırıla bilməyən iki sualı cavablandırır: hansı veb saytın yanlış konfiqurasiya ilə müraciət etdiyini — və beləliklə domenin hansı müştəriyə aid olduğunu — və ünvanın bir səhifəni, yoxsa hamısını ziyarət etdiyini. Eyni ünvanın bir-biri ilə əlaqəsi olmayan bir neçə domeni kütləvi hücumun əlamətidir və qiymətləndirməni artırır.
İdentifikatorun nə qədər əhəmiyyətli olduğunu veb saytlarımızdan birində aparılan təhlil
göstərdi: Bütün trafikin yetmiş faizindən çoxu orada
tək bir müraciət edənə aid idi, yüzdən çox ünvana bölünmüşdü.
İdentifikator olmadan bu paylanmış
scraper kimi görünərdi. Bu, OpenAI-ın crawler-i GPTBot idi
— o, dönə-dönə robots.txt soruşurdu və
tamamilə düzgün davranırdı.
Təhlükəsizlik aspektləri təfərrüatları ilə
1. Proxy aşkarlanması — ümumiyyətlə ən təhlükəli yer
Odoo reverse proxy arxasında işləyirsə və proxy_mode
yanlış qurulubsa, modul hər sorğuda eyni ünvanı görür:
proxy-nin ünvanını. Blok bu halda bütün ziyarətçiləri eyni anda
kənarda qoyardı.
Buna görə Web RBL hər blokdan əvvəl ünvanın müəyyən edilməsinin
etibarlı olub-olmadığını yoxlayır. O, proxy_mode-u yönləndirmə
başlığı ilə birlikdə tələb edir, proxy_mode olmadan yönləndirmə
gəldikdə işləməkdən imtina edir və eyni şəkildə
birdən çox aralıq proxy olduqda imtina edir. Şübhə olduqda bloklanmır.
2. Öz şəbəkələrimizə heç vaxt
Şəxsi ünvan diapazonları, loopback, link-local və CGNAT sabit şəkildə istisna edilib. Onlar heç bir halda siyahıya düşə bilməz, əllə də olsa. Eyni şey kənar siyahılara da aiddir: Şəxsi və ayrılmış diapazonlar, həmçinin absurd dərəcədə böyük şəbəkələr oxunarkən rədd edilir.
3. Öz xətası veb saytı özü ilə aparmamalıdır
Bütün yoxlama hər xətanı tutan müdafiədə işləyir. Burada nəsə səhv gedərsə, jurnala yazılır və sorğu dəyişməz davam edir. Öz xətası zamanı veb saytı özü ilə aparan müdafiə modulu heç olmamasından da pisdir. Sorğu yolundakı bütün sorğular həmçinin ziyarətçinin brauzer dilindən asılı olmadan və tərcümə olunmuş sahələr üzrə çeşidləmə olmadan işləyir — quraşdırılmamış dildən olan ziyarətçi yoxlamanı uğursuz edə bilməz.
4. Bloklamadan əvvəl müşahidə
Quraşdırmadan sonra siyahıdakı ünvanların adi sorğularda bloklanması söndürülüb. Zondlar rədd edilir və qeydə alınır, qalan hər şey keçir. Beləliklə heç kim kənarda qalmamışdan əvvəl, siyahıya həqiqətən kimin düşdüyünü bir neçə gün oxumaq mümkündür. Eyni şey davranış aşkarlanması, təhdid siyahıları və ölkə qaydaları üçün də keçərlidir: əvvəlcə bildir, sonra baxdıqdan sonra blokla.
5. Geniş şəbəkələr əvəzinə dar şablonlar
Yanlış tanınmış ziyarətçi gözdən qaçmış zonddan daha bahalıdır.
Buna görə hər şablon öz səviyyəsini daşıyır və o, hər şablon üçün
dəyişdirilə bilər. Tək fayl uzantısı nadir hallarda kifayət edir: .php
üçün 14.012 həqiqi zond bir ovuc köhnə
linkə qarşı durur, .asp üçün isə nisbət əksinədir. Belə
qərarlar ölçülməlidir, təxmin edilməməlidir.
6. Əllə edilən azad etmə qüvvədə qalır
Ünvanı azad edən şəxsin səbəbi olub. Növbəti uyğunluq bu qərarı səssizcə qüvvədən salmır.
7. Siyahı qorunur, lakin sirr deyil
Son nöqtə token tələb edir və etibarlı token olmadan
403 ilə yox, 404 ilə cavab verir — ünvanın
varlığı beləliklə ümumiyyətlə təsdiqlənmir. Müqayisə
sabit zamanda işləyir. Siyahının özündə məxfi heç nə yoxdur: O,
özləri bizə müraciət etmiş ünvanlardan ibarətdir.
8. Mühasibatlıqda sirr yoxdur
Uğursuz girişlərdə sınanmış istifadəçi adı qeyd olunur, parol heç vaxt. Verilənlər bazası menecerində ötürülmüş dəyərlərdən heç nə oxunmur: orada ən önündə əsas parol durur və bloklama siyahısındakı qeyd hər verilənlər bazası ehtiyat nüsxəsinə düşür. GeoLite2 üçün lisenziya açarı yalnız sistem parametrində durur və heç bir jurnal sətrində yoxdur.
9. Yem istifadəyə yarayan heç nə vermir
İstəyə görə Web RBL zondlara birmənalı kanar dəyəri ehtiva edən uydurma məzmunla cavab verir. Bu dəyəri sonradan çağıran şəxs saxta cavabı oxuyub və buna görə hərəkət edib — yanlış həyəcan bu zaman istisna edilir. Yemlər istifadəyə yarayan məlumat, real yollar və etibarlı giriş məlumatları ehtiva etmir. Bu funksiya söndürülmüş halda təqdim olunur, çünki o, xaricə görünən davranışı dəyişir.
Modulun bacarmadıqları
O, firewall və Web Application Firewall-ı əvəz etmir. O, yollarda tanınmış yoxlama şablonlarını, uğursuz girişləri və şübhəli davranışı aşkar edir — formalara hücumları, parametrlərə yeridilmə cəhdlərini yox.
O, həmçinin yalnız HTTP ilə geri qayıdanı görür. Hücumçunun ələ keçirilmiş verilənlər bazası və ya poçt qutusu girişləri ilə nə etdiyi görünməz qalır — və məhz buna görə kanar dəyərləri giriş məlumatları deyil, yollardır.
Və o, ehtiyatlılığı əvəz etmir: .env zondlarını
rədd edən modul səhvən çatdırılmış
.env faylını təhlükəsiz etmir.
Mövcudluq
Web RBL AGPL-3 lisenziyası ilə açıq şəkildə mövcuddur və bizdə beş veb saytda istehsalatda işləyir:
github.com/Alex0176/odoo-web-rbl
Modul Odoo 19 Community tələb edir və base ilə web
dışında asılılığı yoxdur. Bilet inteqrasiyası
ixtiyaridir və müəyyən bilet sistemi tələb etmir; belə sistem olmadıqda sadəcə heç nə
baş vermir. Mənşə ölkəsi MaxMind-in pulsuz GeoLite2 verilənlər bazasını
tələb edir; o olmadıqda sahə boş qalır və qalan hər şey
dəyişməz işləyir.
Daha ətraflı: Web RBL tam təhlükəsizlik arxitekturasına necə uyğun gəlir -- firewall, iki faktorlu autentifikasiya və səlahiyyətlərlə birlikdə, addım-addım təlimatla: Odoo 19 təhlükəsizlik arxitekturasını düzgün birləşdirmək.
Suallar, qeydlər və xəta hesabatlarını məmnuniyyətlə qəbul edirik — ən yaxşısı GitHub-da Issue kimi.