İçereği Atla

Odoo 19 Community: Web RBL – Kendi web sitelerimizdeki saldırı trafiği için engelleme listesi

24 Eylül 2026 yazan
Odoo 19 Community: Web RBL – Kendi web sitelerimizdeki saldırı trafiği için engelleme listesi

Kaynak kodu: github.com/Alex0176/odoo-web-rbl — AGPL-3, serbestçe kullanılabilir.

İnternette bir Odoo sunucusu işletenin ziyaretçisi eksik olmaz. Arada sırada değil, kesintisiz. On yedi gün boyunca beş web sitemizde 731.297 istek kaydedip değerlendirdik. Bunların 110.511'i ziyaretçi değildi, güvenlik açıklarının, erişim bilgilerinin ve yapılandırma dosyalarının otomatik olarak aranmasıydı.

Bu yazı, bu trafiği tespit eden, puanlayan, kaydeden ve reddeden ve engelleme listesini RBL listesi olarak yayımlayan – yani güvenlik duvarlarının ve ters vekil sunucuların doğrudan okuyabildiği biçimde – Odoo 19 Community için açık kaynaklı bir modül olan Web RBL'i anlatır. Tüm rakamlar gerçek işletmeden alınmıştır.

Modülün yapabilecekleri — işlevlere genel bakış

İşlevNe yaparDağıtım
Desen tespitiYoklamaları yol ve uzantıdan tespit eder: .env, .git, yapılandırma dosyaları, bulut anahtarları, CI/CD derleme talimatları, WordPress, PHP, yol geçişi (path traversal), veritabanı yöneticisi, GraphQL, /api/fs/exec üzerinden komut çalıştırma ve benzer arayüzlerengelle
Desen başına üç kademeengelle, say veya bildir — desen başına kodsuz değiştirilebilirdesen başına
EşiklerEngellemeden önce aynı desenden kaç isabet gerektiği; oturum açma için onoturum açmada 10
Oturum açma savunmasıGiriş formu ve XML-RPC/JSON-RPC üzerinden başarısız oturum açmalar, başarısız oturum kontrolleri, veritabanı yöneticisine erişimler — veritabanında, belleğte değilaçık
Oturum açmada bot tespitiOn başarısız denemeden sonra bekleme mesajını yok sayıp kapıyı çalmaya devam eden hemen engellenirengelle
Davranış tespitiBeş dakika içinde yirmi hatalı sayfa üreten ve neredeyse hiç isabetli sayfa üretmeyen adresler — yani okumak yerine tahmin yürütenlerbildir
Puanlama 0–100Adresin arkasında bir saldırganın olduğundan ne kadar emin olunabilir? Desenin ağırlığından, farklı desen sayısından, dikkat çekici günlerden, etkilenen alan adlarından ve isabet sayısından — açık metinle gerekçelendirilerekaçık
Puana göre oturum açma engeliAyarlanabilir bir puandan itibaren oturum açma yasaklanır, web sitesi okunabilir kalır40'tan itibaren
Çalınmış erişim bilgisi şüphesiŞüpheli bir adresten yapılan başarılı bir oturum açma bildirilir ve isteğe bağlı olarak görev olarak atanır — adres ve gün başına bir kezaçık
Tehdit listeleriTor çıkış düğümleri, Spamhaus DROP, FireHOL Level 1, blocklist.de önceden yapılandırılmıştır; her ek RBL listesi adres girilerek eklenebilir, günlük karşılaştırma, her liste için ayrı kademebildir
Oturum açmaya erişim yokListeler ve ülkeler için dördüncü kademe: Web sitesi okunabilir, oturum açma formu ve arayüzler kapalıdır — Tor için uygun yanıtSeçenek
Menşe ülkeGeoLite2 üzerinden her isabet ve adres için ülke; veri tabanını modül, ücretsiz bir lisans anahtarıyla kendisi güncel tutargöster
Ülke kurallarıEngelle, oturum açmaya erişim yok, bildir veya açıkça serbest — ülke başına, bilerek varsayılan değer olmadanyok
Yanlış yapılandırmalarQNAP, Synology, Exchange Autodiscover, ActiveSync, WebDAV/CalDAV/CardDAV tespit edilir, asla engellenmez ve bulgu ile etkilenen alan adıyla birlikte bir iş listesine alınırbildir
Adres başına destek talebiBir bulgudan isteğe bağlı olarak bir destek talebi oluşturulur — adres başına tam olarak bir tane; kapatılmış bir talep ikinci kez açılmak yerine yeniden açılırkapalı
Zorunlu sayfalar ve toplayıcılarKanonik künye (impressum) yolu her zaman erişilebilir kalır; yabancı yazım biçimlerinin otomatik olarak denenmesi tespit edilir ve isteğe bağlı olarak engellenirbildir
İzin listesiAsla engellenmeyen adresler ve ağlar; her gün güvenlik duvarından (VPN karşı uçları) ve Googlebot ile Bingbot'un yayımlanmış adres aralıklarından dolaraçık
Müşteri eşleştirmeBir müşterinin ağından gelen isabet ona atanır — izin listesinden, asla elle tahmin edilerek değilaçık
Her isabet için alan adı ve tanımlayıcıHangi web sitesine erişildi, hangi User-Agent ile — ikisi de erişim günlüğünde yokturaçık
DeğerlendirmeTüm isabetler üzerinde diyagram ve pivot: desen, gün, alan adı, ülke, adres bazındaaçık
YemProblara kanarya değeri içeren uydurma yanıtlar verilir; bu değeri sonradan çağıran, onları okumuş demektirkapalı
RBL yayınıEngelleme listesi, belirteçle (token) korunan ayrı bir adres altında düz adres listesi veya JSON olarak sunulur — HAProxy, OPNsense ve URL listelerini okuyan her güvenlik duvarı içinaçık

bildir, kapalı veya seçenek ile teslim edilen her şey bilerek böyledir: Bir engeli devreye alan kişi bunu, birkaç gün izlediği için yapmalı, varsayılan değer öyle istediği için değil.

Web RBL değerlendirmesi: yedi gün boyunca desen başına isabetler

Değerlendirme: yedi gün boyunca desen başına isabetler. En yüksek çubuk, .env dosyalarının aranmasıdır.

RBL listeleri: Engelleri yayınlamanın standart bir yolu

RBL, Real-time Blackhole List anlamına gelir. Terim, e-posta dünyasından gelir; orada Spamhaus ve diğerleri doksanlı yıllardan beri kötü niyetli gönderen adreslerinin listelerini yayımlar. İlke son derece basit ve tam da bu yüzden bu kadar yaygındır: Satır başına bir adres, HTTP üzerinden alınabilir, düzenli olarak yeniden yüklenir. Önce ayrıştırılması gereken bir biçim yok, bir araç gerektiren bir arayüz yok.

Neredeyse her güvenlik duvarı ve her ters proxy böyle bir listeyi okuyabilir ve ondan kurallar oluşturabilir. Üreticiler buna farklı adlar verir, mekanizma her yerde aynıdır:

  • OPNsense ve pfSense — URL Table Alias: Adres listesini HTTP ile yükle, güvenlik duvarı kurallarında takma ad olarak kullan, saatlik veya günlük aralıkla güncelle
  • HAProxy — ACL dosyaları ve Map'ler: bir http-request deny kuralında src -f sperrliste.txt, çalışma zamanı API'si üzerinden yeniden başlatmadan yeniden yüklenebilir
  • nginx — adres dosyası eklenmiş geo modülü veya oluşturulmuş bir include dosyasından deny yönergeleri
  • Fortinet FortiGate — External Block List veya Threat Feed: güvenlik duvarının bir IP listesini aldığı ve politikalarda kullandığı bir URL
  • Palo Alto Networks — External Dynamic List (EDL): aynı ilke, güvenlik politikalarında ayrı bir nesne türü olarak
  • Check Point — bir URL üzerinden Custom Intelligence Feeds ve IP Block Lists
  • Cisco Secure Firewall (Firepower) — kendi liste kaynaklarıyla Security Intelligence Feeds
  • Sophos Firewall — Third-Party Threat Feeds: engelleme kuralları için kaynak olarak bir URL'den adres listeleri
  • Juniper SRX — beslemelerden Dynamic Address Entries
  • MikroTik RouterOS — Address Lists, betik ve fetch ile bir URL'den doldurulur
  • CrowdSec — desteklenen her sistemdeki bouncer'lar için kaynak olarak kendi listeleri

Web RBL, engelleme listesini tam olarak bu biçimde sunar. Güvenlik duvarı paketleri, web sunucusuna ulaşmadan önce atar — ve onlarla birlikte aynı adresin diğer her denemesini de, örneğin posta sunucusuna veya VPN ağ geçidine yönelik olanları.

Her iki yön, ama doğru yer

Yol tersine de işler: Web RBL'ye herhangi bir RBL listesi girilebilir — bir URL, bir kademe, hepsi bu. Tor çıkış düğümleri, Spamhaus DROP, FireHOL ve blocklist.de önceden yapılandırılmıştır, yenileri üç tıklamayla eklenir. Modül her listeyi adres aralıklarına ayırır ve her istemi bunlara karşı birkaç mikrosaniyede kontrol eder.

Yine de: Yabancı listeleri, öncesindeki güvenlik duvarında kullanmak daha anlamlıdır. Üç nedenle. Güvenlik duvarı tüm hizmetleri görür, yalnızca HTTP'yi değil — Spamhaus listesindeki bir adres posta sunucusunda ve VPN'de de başarısız olmalıdır. Güvenlik duvarı bir bağlantı henüz kurulmadan paket düzeyinde atar ve böylece uygulama sunucusuna hiçbir maliyet çıkarmaz. Ayrıca, bu tür listelerin zaten bakımının yapıldığı yer orasıdır; uygulamadaki ikinci bir kopya, eskiyebilecek ikinci bir yerdir.

O halde modüldeki listeler neye yarar: bir güvenlik duvarının yapamadığı şeye. Güvenlik duvarı oturum açma formunu bilmez. Web RBL, Tor listesinden gelen bir adrese oturum açmaya erişimi reddedip web sitesini yine de sunabilir — anonim olarak okumak isteyen bunu yapabilmeli; anonim olarak parolaları denemek isteyen yapamamalı. Ayrıca listedeki bir adresten gelen başarılı bir oturum açmayı şüpheli durum olarak bildirebilir. İkisi de listeye, oturum açmanın gerçekleştiği yerde ihtiyaç duyar.

Önsezi yerine değerlendirme

Bir kez /wp-login.php isteyen bir adres, iki günde beş farklı desenle üç alan adı üzerinde dolaşan bir adresten başka bir şeydir. Web RBL bunu 0 ile 100 arasında bir puana dönüştürür — kendi gördüklerinden, harici bir hizmet olmadan ve dışarıya sorgu yapmadan.

Puanı 84 ve gerekçesi olan Web RBL kaydı

Bir kayıt: 99 isabet, puan 84 ve düz metinle gerekçe — en ağır desen, beş farklı ciddi desen, iki dikkat çekici gün, yirmiden fazla isabet.

Puan iki şeye karar verir. Ayarlanabilir bir değerden itibaren oturum açma yasaklanır — web sitesi okunabilir kalır, ancak erişim bilgilerini zaten arayan kişi, bulduklarını denemek için fırsat bulamaz. Ve puanı olan bir adresten gelen başarılı oturum açma bildirilir: O zaman biri artık tahmin etmiyor, biliyordur. Ya yetkili kullanıcı seyahatteydi ya da erişim bilgileri elden çıktı — modül buna karar vermez, soru sorabilecek birine sunar. Parolaya bu sırada hiçbir yerde dokunulmaz.

Puanı 40 ve üzeri olanlara göre filtrelenmiş Web RBL engelleme listesi

Puanı 40 ve üzeri olanlara göre filtrelenmiş engelleme listesi: isabet sayısı, dikkat çekici günler, etkilenen alan adları ve adres başına son yol.

Web RBL neleri korur — koruma etkisinin ayrıntıları

1. Erişim bilgileri keşfedilmeden kalır

Ölçülen en büyük saldırı sınıfı, Odoo'daki açıkları değil, açıkta kalmış sırları arıyor. On yedi gün boyunca:

  • 57.721 .env dosyası isteği — orada veri tabanı parolaları, API anahtarları ve oturum sırları bulunur
  • 5.535 yapılandırma dosyası isteği
  • 4.388 bulut erişim bilgisi isteği: credentials.json, service-account.json, firebase-adminsdk.json, rclone.conf, .git-credentials
  • 2.811 .git dizini isteği — birini bulan, kaynak kodun tamamını geçmişiyle birlikte indirir
  • 1.907 .github/workflows/deploy.yml veya .gitlab-ci.yml gibi derleme talimatları isteği; bunlarda kayıt defterleri ve anahtar adları yer alır

Burada belirleyici olan istek sayısı değil, farklı adreslerin sayısıdır: /credentials.json 98 adresten geldi, /.git-credentials 92 adresten. Bu, tek bir tarayıcı değil, dünya çapında aynı anda çalışan bir standart repertuvardır.

2. Oturum açma denemeleri boşa gider — kalıcı olarak

Odoo, parolaların denenmesine karşı kendi freni ile gelir. Bunun, Odoo kaynak kodunda belgelenmiş üç sınırı vardır: Sayaç, çalışma işleminin belleğinde durur ve her yeniden başlatmada sıfırlanır, engellemek yerine yalnızca geciktirir ve yalnızca parola denetimine kadar ulaşan denemeleri sayar.

Web RBL aynı noktalardan devreye girer, ancak veri tabanına yazar. Böylece şu geçerlidir:

  • Durum her yeniden başlatmadan sağ çıkar ve tüm çalışma işlemleri için geçerlidir
  • Her iki yol da kaydedilir: /web/login oturum açma formu ile /xmlrpc/2/common ve /jsonrpc arayüzleri
  • Parola denetimine hiç ulaşmayan denemeler de kaydedilir — örneğin geçerli bir oturum işareti olmadan yapılan oturum açmalar
  • Veri tabanı yöneticisine yönelik başarısız bir erişim de sayılır; bu, en ağır oturum açma denemesidir

Oturum açmalar için eşik ona ayarlanmıştır ve nedeni bir ölçümdür: On yedi günde başarısız olan dokuz oturum açmanın çoğunluğu müşterilerden geldi; bunlar erişimi kendileri başka bir cihazda kurdular ve bu sırada yanlış alan adını girdiler — bir durumda kendi alan adlarını, yalnızca nokta yerine tire ile. İlk başarısız denemede uygulanacak bir engel, saldırganları değil, kurulum sırasındaki müşterileri vurmuş olurdu.

Buna karşılık sunucu zaten “lütfen kısa süre bekleyin” yanıtını verdiği halde kapıyı çalmaya devam eden kişi hemen engellenir. Bu mesajı bir insan okur ve bekler; onu yok sayan bir programdır. Eşiği sıfır olan ayrı bir desen tam da bu durumu yakalar ve bir meslektaşı vuramaz: Oraya yalnızca, zaten on başarısız denemeyi geride bırakmış ve sonra devam eden kişi ulaşır.

3. Saldırı artık sunucuya hiçbir maliyet çıkarmaz

/@fs/../../.env gibi bir yola yapılan prob, modülden önce pahalıydı: Odoo hata sayfasını arar, işler, adresin oluşturulması sırasında nokta bölümlerine takılır ve ardından hata sayfasının hata sayfasında da başarısız olur. Prob başına iki yığın izi. On yedi günde bu türden 28.401 hata ölçüldü, buna ek olarak 9.467 ardışık hata.

Web RBL, ir.http._match içine, yani yol bulmadan önce müdahale eder. Yanıt, şablonsuz, engelleme denetiminin ötesinde veri tabanı erişimi olmadan ve günlük satırı olmadan verilir. İzin listesine, tehdit listelerine ve ülke kurallarına karşı denetim, önbellekten sıralı adres aralıkları üzerinden çalışır — otuz binin üzerinde aralıkta bile birkaç mikrosaniye.

4. Güvenlik duvarı saldırganı daha ulaşmadan dışarı atar

Engelleme listesi, HAProxy ve OPNsense'in doğrudan okuyabildiği bir RBL listesi olarak yayımlanır. Saldırgan böylece web sunucusuna hiç ulaşamaz — aynı ana makinedeki başka hiçbir hizmete de. Bir kez kötü niyetli olarak tespit edilen bir erişim, böylece geriye dönük olarak tüm makineyi korur.

Üç kademe: engelle, say, bildir

Boşa giden her istek bir saldırı değildir. Bu yüzden Web RBL üç kademeyi ayırt eder ve kademe, kodlara dokunmadan her desen için değiştirilebilir.

KademeTetikleyen istekAdres için sonuç
engellereddedilir24 saat engellenir, üç dikkat çekici günden sonra kalıcı olarak
saygeçeryalnızca kaydedilir, engel yok
bildirgeçerbulgu metniyle kaydedilir, asla engellenmez

Tehdit listeleri ve ülkeler için dördüncü bir kademe vardır: oturum açmaya erişim yok. Web sitesi okunabilir kalır, oturum açma formu ve arayüzler kapalıdır. Bu, şüpheli ama kötü niyetli olması gerekmeyen her şey için orta yoldur — Tor, bir veri merkezi aralığı, müşterisi olmayan bir ülke.

Hangi saldırılar tespit edilir

Tüm desenler gerçek trafiğe karşı test edilmiştir. Farklı adreslerin sayısı bilerek yanında yer alır — bir desenin tek bir tarayıcıyı mı yoksa yaygın bir yöntemi mi yakaladığını gösterir.

Saldırı sınıfıİsteklerAdresler
.env toplama57.721223
PHP probları12.237256
Değerli hedefe yönelik yol geçişi (path traversal)10.04664
Yapılandırma dosyaları5.535114
Bulut erişim anahtarları4.388152
WordPress probları3.366385
.git toplama2.811255
Odoo keşfi (veri tabanı yöneticisi, sürüm sorgusu)2.500213
Yapay zeka araç zincirleri ve komut yürütme (/mcp, /api/fs/exec)2.45074
Derleme talimatları (CI/CD)1.90788
GraphQL uç noktaları1.87871

En yeni sınıf dikkat çekicidir. /api/fs/exec 54 farklı adresten 369 kez istendi — bu bir okuma erişimi değil, komut çalıştırma girişimidir. Bu tür hedefler iki yıl önce yoktu; yeni yapay zeka araçlarının arayüzlerinden ve görev kuyruklarından kaynaklanıyorlar. Savunmasını yalnızca WordPress ve PHP'ye yönlendiren, bunların hiçbirini görmez. Puanlamada bu sınıf buna uygun olarak ağır basar.

Tehdit listeleri ve menşe ülke

Web RBL tehdit listeleri: Tor, Spamhaus DROP, FireHOL, blocklist.de

Dört liste, 32.851 adres aralığı, hepsi “yalnızca bildir” durumunda. Her ek liste bir adres ve bir kademedir.

Yabancı bir liste, başka birinin bilmediğimiz nedenlerle, hiç görmediğimiz trafik hakkında ortaya attığı bir iddiadır. Yanlış, eskimiş veya başka bir amaç için tasarlanmış olabilir: blocklist.de en çok başka yerlerde SSH oturum açma denemesi yapmış adresleri toplar ve bu, bir web sunucusu hakkında pek bir şey söylemez. Bu yüzden Web RBL yabancı listeleri kendi engelleme listesinden ayrı tutar ve bu yüzden varsayılan değer bildir'dir. Ve kendi izin listesi her zaman kazanır: Tanıdığımız bir müşteri, üçüncü bir tarafın değerlendirmesinden daha ağır basar.

Menşe ülke her isabette ve her adreste görünür. Değerlendirme için vazgeçilmezdir — kendi ülkesinden sabah saat onda yapılan bir oturum açma denemesi, tek bir müşterisi bile olmayan bir ülkeden gelenden başka bir şeydir. Toplu engelleme için pek uygun değildir ve bunu kendi rakamlarımız söylüyor: Listemizdeki saldırganlar ağırlıklı olarak Belçika, Finlandiya ve Hollanda'daki bulut aralıklarından geldi. Almanca konuşulan bölgenin dışındaki her şey için bir engel onları vurmazdı — ama tatildeki kendi çalışanlarımızı ve iş seyahatindeki müşterileri vururdu.

Web RBL ülke kuralları: boş teslim edilir, açıklamayla

Ülke kuralları boş olarak teslim edilir ve görünüm nedenini söyler.

Yanlış yapılandırmalar engellenmez, bildirilir

Gerçek trafikteki en sık durum ne saldırı ne de ziyaretçidir, bunun yerine web sunucusunu başka bir şey sanan arızalı yazılımdır:

  • Bir QNAP NAS'ın web arayüzüne 1.367 çağrı — hedefi artık doğru olmayan bir eşitleme istemcisi. Tek bir bağlantı 962 kez kapıyı çaldı.
  • 65 Autodiscover sorgusu — web alan adını Exchange'i sanan bir Outlook

Bu tür adresler asla engellenmez. Bir engel arızayı gidermez, onu gizler — ve cihazı zaten yanlış ayarlanmış olan kişiyi vurur. Bunun yerine, bulgu metni ve etkilenen alan adlarıyla bir kayıt oluşur ve isteğe bağlı olarak bundan otomatik olarak bir destek talebi çıkar: adres başına tam olarak bir tane; kapatılırsa ve adres yeniden dikkat çekerse, ikinci bir talep açılmak yerine aynı talep yeniden açılır.

QNAP, Synology, Exchange Autodiscover, ActiveSync ile WebDAV, CalDAV ve CardDAV istemcileri tespit edilir. Desenler tam dosya adlarını ve dizinleri belirtir, asla yalnızca uzantıları: Aynı /cgi-bin/ dizininde zararsız eşitleme çağrıları, printenv.pl gibi klasik problarla yan yana durur.

İzin listesi: Asla engellenmeyen adresler

Bir yanılgının bedeli her adres için aynı değildir. Bir veri merkezindeki tarayıcı için yanlış alarm hiçbir şeye mal olmaz. Bir konum tünelinin karşı ucu için ise konuma mal olur.

Bu yüzden birincinin önünde duran ikinci bir liste vardır: asla engellenmeyen adresler ve ağlar. Bu liste hiçbir şeyi susturmaz — listede olan hâlâ denetlenir ve kaydedilir, yalnızca sonuç ortadan kalkar. Güvenlik duvarındaki bir istisnadan farkı budur: O kör eder, bu yalnızca sabırlı kılar.

Her gün iki kaynaktan doldurulur: güvenlik duvarının kendisinden, tüm VPN karşı uçlarıyla, yeni kurulan bir tünelin engelleme listesini birinin düşünmesine bağımlı olmaması için — ve Google ile Microsoft'un tarayıcıları (crawler) için yayımladığı adres aralıklarından. Gerçek bir Googlebot'u, kendine öyle diyen bir tarayıcıdan ancak böyle ayırt edebiliriz. Arama motorları asla engellenmemelidir; onları dışarıda bırakan, sitesini dizinlemeden geri çeker.

Bu sırada, karşılaştırmadan daha önemli bir kural geçerlidir: Boş bir yanıt asla silmez. Kaynak yanıt vermezse, boş veya anlaşılmaz yanıt verirse, liste değişmeden kalır. Bir arıza sırasında kendini boşaltan bir izin listesi, akla gelebilecek en kötü anda tüm tünelleri birlikte götürür.

Bir izin listesi kaydı bir müşteri taşıyorsa, onun ağından gelen her isabet ona atanır. Böylece bir yanlış yapılandırmanın hemen bir muhatabı olur; kimsenin adresleri aramasına gerek kalmaz.

Zorunlu bilgiler ve otomatik veri toplayıcılar

Künye (Impressum) sıradan bir sayfa değildir. İnsanlar için erişilebilir kalmalıdır, çünkü üzerindeki bir engel, bir toplayıcının aradığı tam olarak ihlali yaratır. Aynı zamanda ad ve adresin yer aldığı sayfadır — dolayısıyla makinelerle hasat edilmesinin hedefidir.

Avusturya'daki, gömülü Google yazı tipleri nedeniyle yapılan ihtar dalgasında günlükler, yazıların tek tek ziyaretlerden değil, otomatik bir toplu taramadan kaynaklandığını gösterdi: birbiriyle ilgisiz farklı ana makineler, milisaniyelik aralıklarla.

Web RBL bunu istisna yerine kademe düşürerek çözer. Kanonik /impressum yolu hiçbir desene uymaz ve her zaman erişilebilir kalır. /impressum.php gibi yabancı yazım biçimleri — bir Odoo sayfasında bulunamaz — bildirilir ve makineyle hasadı kabul etmek istemeyen, bir parametreyi değiştirir. sitemap ve robots bunun dışındadır ve esasen engellenemez: Kişisel veri içermezler ve onları almak her arama motoru tarayıcısının görevidir.

Alan adı ve tanımlayıcı: Erişim günlüğünde olmayanlar

werkzeug'un erişim günlüğü, ne istenen ana makineyi ne de çağıranın tanımlayıcısını kaydeder. Odoo ikisini de elbette alır — ana makine olmadan, birden çok web sitesi olduğunda doğru olanı seçemezdi. Ancak sonradan okunamaz.

Web RBL her isabette ikisini de saklar. Bu, başka türlü cevaplanamayan iki soruyu yanıtlar: Bir yanlış yapılandırmanın hangi web sitesine yöneldiği — ve dolayısıyla alan adının hangi müşteriye ait olduğu — ve bir adresin bir sayfayı mı yoksa hepsini mi ziyaret ettiği. Aynı adresin birbiriyle ilgisiz birden çok alan adı, toplu taramanın belirtisidir ve puanı yükseltir.

Tanımlayıcının ne kadar şey ifade ettiğini, web sitelerimizden birinde yapılan bir değerlendirme gösterdi: Tüm trafiğin yüzde yetmişten fazlası orada, yüzden fazla adrese dağılmış tek bir çağırana aitti. Tanımlayıcı olmasaydı bu, dağıtık bir kazıyıcı (scraper) gibi görünürdü. Bu, OpenAI'nin tarayıcısı GPTBot idi — sürekli robots.txt istiyordu ve tamamen kurallara uygun davranıyordu.

Güvenlik yönlerinin ayrıntıları

1. Proxy tespiti — kesinlikle en tehlikeli nokta

Odoo bir ters proxy arkasında çalışıyorsa ve proxy_mode yanlış ayarlanmışsa, modül her istekte aynı adresi görür: proxy'nin adresini. Bir engel o zaman tüm ziyaretçileri aynı anda dışarıda bırakır.

Bu yüzden Web RBL her engellemeden önce adres belirlemenin güvenilir olup olmadığını kontrol eder. proxy_modenin bir yönlendirme başlığıyla birlikte olmasını ister, proxy_mode olmadan bir yönlendirme geldiğinde çalışmayı reddeder ve aynı şekilde birden fazla ara proxy olduğunda da reddeder. Şüphe durumunda engellenmez.

2. Kendi ağlarımız asla

Özel adres aralıkları, loopback, link-local ve CGNAT sabit olarak dışarıda tutulur. Hiçbir koşulda listeye giremezler, elle bile olsa. Aynı şey yabancı listeler için de geçerlidir: Özel ve ayrılmış aralıklar ile saçma derecede büyük ağlar okunurken çöpe atılır.

3. Kendi hatası web sitesini de beraberinde götürmemelidir

Tüm denetim, her hatayı yakalayan bir koruma içinde çalışır. Burada ters giden bir şey günlüğe yazılır ve istek değişmeden devam eder. Kendi hatasında web sitesini beraberinde götüren bir koruma modülü, hiç olmamasından daha kötüdür. Ayrıca istek yolundaki tüm sorgular, ziyaretçinin tarayıcı dili olmadan ve çevrilmiş alanlara göre sıralama olmadan çalışır — kurulu olmayan bir dile sahip bir ziyaretçi, denetimin başarısız olmasına yol açmamalıdır.

4. Engellemeden önce gözlemlemek

Kurulumdan sonra, listelenen adreslerin olağan isteklerde engellenmesi kapalıdır. Problar reddedilir ve kaydedilir, geri kalan her şey geçer. Böylece birkaç gün boyunca, kimse dışarıda bırakılmadan önce listeye gerçekte kimlerin girdiğini izlemek mümkün olur. Aynısı davranış tespiti, tehdit listeleri ve ülke kuralları için de geçerlidir: önce bildir, görüldükten sonra engelle.

5. Geniş ağlar yerine dar desenler

Yanlış tanınan bir ziyaretçi, gözden kaçan bir probdan daha pahalıdır. Bu yüzden her desen kendi kademesini taşır ve bu, desen başına değiştirilebilir. Tek başına bir dosya uzantısı nadiren yeterlidir: .php için 14.012 gerçek prob, bir avuç eski bağlantıya karşı durur, .asp için ise oran tersidir. Bu tür kararlar tahmin edilmez, ölçülür.

6. Elle verilen bir izin geçerliliğini korur

Bir adrese izin veren kişinin bir nedeni vardı. Başka bir isabet, bu kararı sessizce geçersiz kılmaz.

7. Liste korunuyor, ama bir sır değil

Uç nokta bir belirteç ister ve geçerli belirteç olmadan 403 ile değil, 404 ile yanıt verir — böylece adresin varlığı hiç doğrulanmaz. Karşılaştırma sabit zamanlı çalışır. Listenin kendisi gizli hiçbir şey içermez: Bize kendiliğinden kapı çalmış adreslerden oluşur.

8. Muhasebede sır yok

Başarısız oturum açmalarda denenen kullanıcı adı kaydedilir, parola asla. Veri tabanı yöneticisinde iletilen değerlerden hiçbir şey okunmaz: Orada en başta ana parola bulunur ve bir engelleme listesindeki bir kayıt her veri tabanı yedeğine gider. GeoLite2 lisans anahtarı yalnızca sistem parametresinde bulunur, hiçbir günlük satırında yoktur.

9. Yem kullanılabilir hiçbir şey ifşa etmez

İsteğe bağlı olarak Web RBL, problara benzersiz bir kanarya değeri içeren uydurma içerikle yanıt verir. Bu değeri sonradan çağıran, sahte yanıtı okumuş ve buna göre hareket etmiştir — yanlış alarm bu durumda söz konusu değildir. Yemler, kullanılabilir bilgi, gerçek yol ve geçerli erişim bilgisi içermez. Bu işlev kapalı olarak teslim edilir, çünkü dışarıdan görülebilir şekilde davranışı değiştirir.

Modülün yapamadıkları

Bir güvenlik duvarının ve bir Web Application Firewall'un yerini tutmaz. Yollardaki bilinen yoklama desenlerini, başarısız oturum açmaları ve dikkat çekici davranışları tespit eder — formlara yönelik saldırıları, parametrelere sızma girişimlerini değil.

Ayrıca yalnızca HTTP üzerinden geri gelenleri görür. Bir saldırganın ele geçirdiği veri tabanı veya posta kutusu erişimleriyle ne yaptığı görünmez kalır — ve kanarya değerlerinin erişim bilgisi değil, yol olması tam da bu yüzdendir.

Ve özenin yerini tutmaz: .env problarını reddeden bir modül, yanlışlıkla sunulan bir .env dosyasını tehlikesiz yapmaz.

Kullanılabilirlik

Web RBL, AGPL-3 altında herkese açık olarak sunulmaktadır ve bizde beş web sitesinde canlı olarak çalışmaktadır:

github.com/Alex0176/odoo-web-rbl

Modül, Odoo 19 Community gerektirir ve base ile web dışında bağımlılığı yoktur. Destek talebi entegrasyonu isteğe bağlıdır ve belirli bir destek talebi sistemi gerektirmez; böyle bir sistem yoksa basitçe hiçbir şey olmaz. Menşe ülke, MaxMind'in ücretsiz GeoLite2 veri tabanına ihtiyaç duyar; yoksa alan boş kalır ve diğer her şey değişmeden çalışır.

Daha fazlası için: Web RBL'nin güvenlik duvarı, iki faktörlü kimlik doğrulama ve yetkilerle birlikte eksiksiz bir güvenlik mimarisine nasıl uyduğu -- adım adım kılavuzla birlikte: Odoo 19 güvenlik mimarisini doğru birleştirme.

Sorularınızı, yorumlarınızı ve hata raporlarınızı memnuniyetle alırız — en çok GitHub'da bir Issue olarak.