Selamlar, bu yazımda Splunk’ta veri bütünlüğünün nasıl doğrulanabileceğini ve Data Integrity Control özelliğinin nasıl alarm mekanizmasına dönüştürülebileceğini ele alacağız. Şimdiden keyifli okumalar. 🙂

Splunk Data Integrity Control, indexlenen verinin sonradan değiştirilip değiştirilmediğini doğrulamak için kullanılan hash tabanlı bir bütünlük kontrol mekanizmasıdır. Bu özellik index bazında açılır ve açıldıktan sonra indexlenen yeni raw data için hash bilgileri üretir.

Bu yazıda test ortamında Data Integrity Control özelliğinin nasıl etkinleştirildiği, yeni veri ile nasıl doğrulandığı, kontrollü bozulma testinin nasıl yapıldığı ve sonucun alarm mekanizmasına nasıl çevrildiği adım adım gösterilecektir.
Önemli ayrım: Data Integrity Control verinin değiştirilmesini engellemez; veri veya bucket yapısı değişirse bunu check-integrity doğrulaması ile tespit etmeye yardımcı olur

Kapsam ve Varsayımlar

BaşlıkAçıklama
Test indexiwindows2
Splunk home path/opt/splunk
Index data path/opt/splunk/var/lib/splunk
Kontrol komutusplunk check-integrity
Script log dosyası/opt/splunk/var/log/splunk/data_integrity_check.log
Script sonuç indexisplunk_integrity
Sourcetypesplunk:data_integrity:check
Test tipiStandalone test; distributed/indexer cluster notları ayrıca verilmiştir

Data Integrity Nasıl Çalışır?

Data Integrity Control aktif edildiğinde Splunk, yeni indexlenen raw data dilimleri için SHA-256 tabanlı hash üretir. Bu hashler bucket içindeki rawdata dizininde tutulur. Hot bucket warm bucket’a döndüğünde Splunk, l1Hashes içeriği için üst seviye l2Hash bilgisini üretir.

$SPLUNK_DB/<index>/db/<bucket>/rawdata/journal.zst

$SPLUNK_DB/<index>/db/<bucket>/rawdata/l1Hashes_*.dat

$SPLUNK_DB/<index>/db/<bucket>/rawdata/l2Hash_*.dat

Kritik bilgi: Data Integrity yalnızca özellik açıldıktan sonra indexlenen yeni veriler için hash üretir. Daha önce oluşmuş bucketlar için Journal has no hashes sonucu alınması normaldir.

4. Adım Adım Uygulama

4.1 Mevcut index ayarını kontrol etme

İlk olarak test edilecek indexin mevcut ayarları btool ile kontrol edilir.

/opt/splunk/bin/splunk btool indexes list windows2 –debug | grep -E
“^\[windows2\]|homePath|coldPath|thawedPath|enableDataIntegrityControl”

4.2 Index stanza dosyasını bulma

windows2 index stanza’sının hangi indexes.conf dosyasından geldiği bulunur.

grep -Rni “^\[windows2\]” /opt/splunk/etc 2>/dev/null


4.3 Data Integrity Control özelliğini enable etme

İlgili index stanza’sına sadece aşağıdaki satır eklenir. Mevcut homePath, coldPath ve thawedPath satırları silinmemelidir.

[windows2]

enableDataIntegrityControl = true

Örnek tam stanza:

[windows2]

homePath = $SPLUNK_DB/windows2/db

coldPath = $SPLUNK_DB/windows2/colddb

thawedPath = $SPLUNK_DB/windows2/thaweddb

enableDataIntegrityControl = true


4.4 Ayarı doğrulama ve restart

/opt/splunk/bin/splunk btool indexes list windows2 –debug | grep enableDataIntegrityControl

/opt/splunk/bin/splunk restart

/opt/splunk/bin/splunk status

4.5 Splunk arayüzünden aktiflik kontrolü

Data Integrity aktifliği Search ekranından REST endpoint ile kontrol edilebilir.

| rest /services/data/indexes

| search title=windows2

| table title enableDataIntegrityControl homePath coldPath


4.6 Yeni test verisi indexleme

Data Integrity geçmiş veriler için geriye dönük hash üretmez. Bu nedenle özellik açıldıktan sonra yeni veri indexlenmelidir.

cat > /tmp/windows2_integrity_test.log <<‘EOF’

2026-07-20 22:00:00 test_id=INTEGRITY_TEST_001 message=”Splunk data integrity test event 1″

2026-07-20 22:00:01 test_id=INTEGRITY_TEST_002 message=”Splunk data integrity test event 2″

EOF

/opt/splunk/bin/splunk add oneshot /tmp/windows2_integrity_test.log -index windows2 -sourcetype integrity:test

index=windows2 sourcetype=integrity:test

| table _time test_id message

4.7 Hot bucket’ı warm bucket’a roll etme

check-integrity kontrolü için genellikle warm bucket yani db_* bucket üzerinde ilerlenir. Yeni veri hot bucket içinde olduğundan hot bucket roll edilir.

find /opt/splunk/var/lib/splunk/windows2/db -maxdepth 1 -mindepth 1 -type d -printf ‘%T@ %p

‘ | sort -nr | head -20

/opt/splunk/bin/splunk _internal call /data/indexes/windows2/roll-hot-buckets

find /opt/splunk/var/lib/splunk/windows2/db -maxdepth 1 -type d -name “db_*” -printf ‘%T@ %p

‘ | sort -nr | head -10


4.8 Sağlam bucket üzerinde integrity kontrolü

BUCKET=$(find /opt/splunk/var/lib/splunk/windows2/db -maxdepth 1 -type d -name “db_*” -printf ‘%T@ %p

‘ | sort -nr | head -1 | awk ‘{print $2}’)

echo “$BUCKET”

/opt/splunk/bin/splunk check-integrity -bucketPath “$BUCKET” -verbose


Beklenen sonuç: Sağlam bucket için Integrity check succeeded ve Total buckets checked=1, succeeded=1, failed=0 çıktısı alınmalıdır.

4.9 Aktif veriye zarar vermeden bozulma testi

Aktif bucket üzerinde değişiklik yapılmaz. Bucket /tmp altına kopyalanır ve sadece kopya üzerinde kontrollü değişiklik yapılır.

rm -rf /tmp/integrity_test

mkdir -p /tmp/integrity_test

cp -a “$BUCKET” /tmp/integrity_test/

TEST_BUCKET=”/tmp/integrity_test/$(basename “$BUCKET”)”

echo “$TEST_BUCKET”

find “$TEST_BUCKET/rawdata” -type f


4.10 Kopya bucket üzerinde hash dosyasını bozma

L1_FILE=$(find “$TEST_BUCKET/rawdata” -type f -name “l1Hashes*.dat” | head -1)

echo “$L1_FILE”

printf ‘\x00’ | dd of=”$L1_FILE” bs=1 seek=10 count=1 conv=notrunc


4.11 Bozulmuş kopya üzerinde integrity kontrolü

/opt/splunk/bin/splunk check-integrity -bucketPath “$TEST_BUCKET” -verbose


Beklenen sonuç: Kopya bucket üzerindeki l1Hashes dosyası değiştirildiği için check-integrity komutu FAILED sonucu üretmelidir.

4.12 Test kopyasını temizleme

rm -rf /tmp/integrity_test

5. Kontrolü Otomatikleştirme

Data Integrity özelliği hash üretimini sağlar; ancak otomatik alarm üretmez. Periyodik doğrulama için check-integrity komutu script ile çalıştırılır, sonuçlar log dosyasına yazılır ve Splunk tarafından indexlenir.

Akış: Script çalışır → check-integrity bucketları kontrol eder → SUCCESS/FAILED/SKIPPED sonucu loga yazar → Splunk logu indexler → alert FAILED/ERROR/UNKNOWN durumlarını yakalar.

5.1 App dizin yapısı

mkdir -p /opt/splunk/etc/apps/data_integrity_monitor/bin

mkdir -p /opt/splunk/etc/apps/data_integrity_monitor/local

5.2 Çoklu index destekli script

Script tek dosyadır; kontrol edilecek indexleri ayrı liste dosyasından okur.

vi /opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh

#!/bin/bash

SPLUNK_HOME=”/opt/splunk”

SPLUNK_DB=”/opt/splunk/var/lib/splunk”

INDEX_LIST_FILE=”/opt/splunk/etc/apps/data_integrity_monitor/local/integrity_indexes.conf”

LOG_FILE=”/opt/splunk/var/log/splunk/data_integrity_check.log”

CHECK_TIME=$(date ‘+%Y-%m-%d %H:%M:%S’)

if [ ! -r “$INDEX_LIST_FILE” ]; then

    echo “timestamp=\”$CHECK_TIME\” index=\”-\” bucket=\”-\” status=\”ERROR\” exit_code=\”1\” reason=\”Index list file not found or not readable: $INDEX_LIST_FILE\”” >> “$LOG_FILE”

    exit 1

fi

while read -r INDEX_NAME

do

    [[ -z “$INDEX_NAME” ]] && continue

    [[ “$INDEX_NAME” =~ ^# ]] && continue

    BUCKET_ROOT=”$SPLUNK_DB/$INDEX_NAME/db”

    if [ ! -d “$BUCKET_ROOT” ]; then

        echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET_ROOT\” status=\”SKIPPED_NO_BUCKET_PATH\” exit_code=\”0\” reason=\”Bucket path not found on this indexer\”” >> “$LOG_FILE”

        continue

    fi

    find “$BUCKET_ROOT” -maxdepth 1 -type d -name “db_*” | while read -r BUCKET

    do

        OUTPUT=$(“$SPLUNK_HOME/bin/splunk” check-integrity -bucketPath “$BUCKET” -verbose 2>&1)

        EXIT_CODE=$?

        if echo “$OUTPUT” | grep -qi “Journal has no hashes”

        then

            STATUS=”SKIPPED_NO_HASH”

        elif echo “$OUTPUT” | grep -qiE “Integrity check failed|failed=[1-9]|did not match”

        then

            STATUS=”FAILED”

        elif echo “$OUTPUT” | grep -qiE “Integrity check succeeded|failed=0”

        then

            STATUS=”SUCCESS”

        elif [ “$EXIT_CODE” -ne 0 ]

        then

            STATUS=”ERROR”

        else

            STATUS=”UNKNOWN”

        fi

        REASON=$(echo “$OUTPUT” \

            | grep -iE “Reason=|Integrity check failed|Integrity check succeeded|Total buckets checked|Journal has no hashes” \

            | tr ‘\n’ ‘ ‘ \

            | sed ‘s/”/’\”/g’)

        echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET\” status=\”$STATUS\” exit_code=\”$EXIT_CODE\” reason=\”$REASON\”” >> “$LOG_FILE”

    done

done < “$INDEX_LIST_FILE”

5.3 Kontrol edilecek index listesi

vi /opt/splunk/etc/apps/data_integrity_monitor/local/integrity_indexes.conf

windows2

# security

# wineventlog

# linux

# network


5.4 Yetkileri düzenleme ve manuel test

chown -R splunk:splunk /opt/splunk/etc/apps/data_integrity_monitor

chmod 750 /opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh

touch /opt/splunk/var/log/splunk/data_integrity_check.log

chown splunk:splunk /opt/splunk/var/log/splunk/data_integrity_check.log

chmod 640 /opt/splunk/var/log/splunk/data_integrity_check.log

su – splunk

/opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh

tail -20 /opt/splunk/var/log/splunk/data_integrity_check.log


5.5 Scripted input ve monitor input tanımı

vi /opt/splunk/etc/apps/data_integrity_monitor/local/inputs.conf

[script:///opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh]

disabled = 0

interval = 0 2 * * *

[monitor:///opt/splunk/var/log/splunk/data_integrity_check.log]

disabled = 0

index = splunk_integrity

sourcetype = splunk:data_integrity:check


/opt/splunk/bin/splunk btool inputs list –debug | grep -A8 -B2 “data_integrity”

/opt/splunk/bin/splunk restart

6. Splunk Arayüzünden Kontrol ve Alarm

6.1 Kontrol sorguları

index=splunk_integrity sourcetype=”splunk:data_integrity:check”

| stats count by host index status

index=splunk_integrity sourcetype=”splunk:data_integrity:check”

| table _time host index bucket status exit_code reason

| sort – _time



6.2 Final alarm sorgusu

index=splunk_integrity sourcetype=”splunk:data_integrity:check” earliest=-45m

| where status IN (“FAILED”,”ERROR”,”UNKNOWN”)

| where NOT like(bucket,”/tmp/%”)

| where NOT like(reason,”%Journal has no hashes%”)

| eval detection_name=”Splunk Data Integrity Check Failure”

| eval severity=”critical”

| table _time host index bucket status exit_code reason detection_name severity

| sort – _time

7. Status Değerleri Nasıl Yorumlanır?

StatusAnlamAlarm?
SUCCESSBucket hash doğrulaması başarılı.Hayır
SKIPPED_NO_HASHData Integrity aktif edilmeden önce oluşmuş bucket. Hash yok, beklenen durum.Hayır
SKIPPED_NO_BUCKET_PATHBu indexer üzerinde ilgili indexin local bucket path’i yok. Cluster ortamında normal olabilir.Hayır
FAILEDHash doğrulaması başarısız veya bütünlük bozulması tespit edildi.Evet
ERRORcheck-integrity çalışması hata verdi.Evet
UNKNOWNKomut çıktısı beklenen formata uymadı.Evet

8. Distributed / Indexer Cluster Ortamı

Distributed veya indexer cluster yapılarda Data Integrity kontrolü Search Head üzerinde değil, indexer peer’lar üzerinde çalışmalıdır. Çünkü bucket dosyaları indexer peer’ların local disklerinde bulunur.

Cluster Manager / Deployment yöntemi

        ↓

data_integrity_monitor app indexer peer’lara dağıtılır

        ↓

Her indexer kendi local bucketlarını kontrol eder

        ↓

Sonuçlar splunk_integrity indexine yazılır

        ↓

Search Head üzerinde merkezi alert çalışır

8.1 Indexer Cluster dağıtım örneği

# Cluster Manager üzerinde

mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/local

mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/bin

/opt/splunk/bin/splunk validate cluster-bundle

/opt/splunk/bin/splunk apply cluster-bundle

Dikkat: Cluster Manager app’i dağıtır; kendisi bucket kontrolü yapmaz. Script, peer üzerinde /opt/splunk/etc/apps/data_integrity_monitor path’i altında çalışır.

8.2 Cluster Yapıda Temel Tasarım

Standalone yapıda script ve Data Integrity ayarı aynı Splunk Enterprise instance üzerinde çalışır. Distributed veya indexer cluster mimarisinde ise bucket dosyaları Search Head üzerinde değil, indexer peer’ların local disklerinde tutulur. Bu nedenle Data Integrity kontrolünün çalışacağı yer indexer peer’lardır.

Kısa kural: enableDataIntegrityControl indexer tarafında uygulanır, check-integrity scripti indexer peer üzerinde çalışır, alarm ise Search Head üzerinde merkezi olarak çalışır.

Cluster Manager

  ↓ bundle dağıtımı

data_integrity_monitor app → IDX01 / IDX02 / IDX03

  ↓

Her indexer kendi local bucketlarını kontrol eder

  ↓

Sonuçlar index=splunk_integrity sourcetype=splunk:data_integrity:check olarak indexlenir

  ↓

Search Head üzerinde merkezi alert/correlation search çalışır

8.3 Cluster Manager Üzerinde App Dizin Yapısı

Indexer cluster ortamında app dosyaları indexer peer’lara Cluster Manager üzerinden dağıtılmalıdır. Yeni terminolojide manager-apps dizini kullanılır.

# Cluster Manager üzerinde

mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/bin

mkdir -p /opt/splunk/etc/manager-apps/data_integrity_monitor/local

App peer üzerine dağıtıldığında indexer tarafında genellikle aşağıdaki path altında görünür:

/opt/splunk/etc/apps/data_integrity_monitor/

8.4 Index Listesini Merkezi Yönetme

Her indexer üzerinde ayrı ayrı index listesi yönetilmemelidir. Kontrol edilecek index listesi Cluster Manager üzerindeki app içinde tutulur ve bundle ile tüm indexer peer’lara dağıtılır. Böylece liste tek noktadan yönetilir.

vi /opt/splunk/etc/manager-apps/data_integrity_monitor/local/integrity_indexes.conf

windows2

security

wineventlog

linux

network

Not: Her indexer bu dosyanın kendi local kopyasını okur. Eğer listedeki bir index o peer üzerinde local bucket barındırmıyorsa script SKIPPED_NO_BUCKET_PATH yazar ve devam eder. Bu cluster ortamında normal kabul edilir.

8.5 Cluster Ortamına Uygun Çoklu Index Scripti

Cluster yapıda scriptin app dizinini dinamik bulması önemlidir. Böylece script hem manager-apps altında yönetilebilir hem de peer üzerinde /opt/splunk/etc/apps/data_integrity_monitor altında doğru local/integrity_indexes.conf dosyasını okuyabilir.

vi /opt/splunk/etc/manager-apps/data_integrity_monitor/bin/check_data_integrity.sh

#!/bin/bash

SPLUNK_HOME=”/opt/splunk”

SPLUNK_DB=”$SPLUNK_HOME/var/lib/splunk”

SCRIPT_DIR=”$(cd “$(dirname “$0″)” && pwd)”

APP_DIR=”$(cd “$SCRIPT_DIR/..” && pwd)”

INDEX_LIST_FILE=”$APP_DIR/local/integrity_indexes.conf”

LOG_FILE=”$SPLUNK_HOME/var/log/splunk/data_integrity_check.log”

CHECK_TIME=$(date ‘+%Y-%m-%d %H:%M:%S’)

if [ ! -r “$INDEX_LIST_FILE” ]; then

    echo “timestamp=\”$CHECK_TIME\” index=\”-\” bucket=\”-\” status=\”ERROR\” exit_code=\”1\” reason=\”Index list file not found or not readable: $INDEX_LIST_FILE\”” >> “$LOG_FILE”

    exit 1

fi

while IFS= read -r INDEX_NAME

do

    [[ -z “$INDEX_NAME” ]] && continue

    [[ “$INDEX_NAME” =~ ^# ]] && continue

    BUCKET_ROOT=”$SPLUNK_DB/$INDEX_NAME/db”

    if [ ! -d “$BUCKET_ROOT” ]; then

        echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET_ROOT\” status=\”SKIPPED_NO_BUCKET_PATH\” exit_code=\”0\” reason=\”Bucket path not found on this indexer\”” >> “$LOG_FILE”

        continue

    fi

    find “$BUCKET_ROOT” -maxdepth 1 -type d -name “db_*” | while IFS= read -r BUCKET

    do

        OUTPUT=$(“$SPLUNK_HOME/bin/splunk” check-integrity -bucketPath “$BUCKET” -verbose 2>&1)

        EXIT_CODE=$?

        if echo “$OUTPUT” | grep -qi “Journal has no hashes”

        then

            STATUS=”SKIPPED_NO_HASH”

        elif echo “$OUTPUT” | grep -qiE “Integrity check failed|failed=[1-9]|did not match”

        then

            STATUS=”FAILED”

        elif echo “$OUTPUT” | grep -qiE “Integrity check succeeded|failed=0”

        then

            STATUS=”SUCCESS”

        elif [ “$EXIT_CODE” -ne 0 ]

        then

            STATUS=”ERROR”

        else

            STATUS=”UNKNOWN”

        fi

        REASON=$(echo “$OUTPUT” \

            | grep -iE “Reason=|Integrity check failed|Integrity check succeeded|Total buckets checked|Journal has no hashes” \

            | tr ‘\n’ ‘ ‘ \

            | sed ‘s/”/’\”/g’)

        echo “timestamp=\”$CHECK_TIME\” index=\”$INDEX_NAME\” bucket=\”$BUCKET\” status=\”$STATUS\” exit_code=\”$EXIT_CODE\” reason=\”$REASON\”” >> “$LOG_FILE”

    done

done < “$INDEX_LIST_FILE”

chmod 750 /opt/splunk/etc/manager-apps/data_integrity_monitor/bin/check_data_integrity.sh

chown -R splunk:splunk /opt/splunk/etc/manager-apps/data_integrity_monitor

8.6 inputs.conf – Scripted Input ve Monitor Input

inputs.conf Cluster Manager üzerindeki app içinde tutulur. Peer’a dağıtıldıktan sonra script peer üzerinde çalışır. Script sonucu data_integrity_check.log dosyasına yazılır ve aynı Splunk Enterprise instance tarafından monitor input ile indexlenir. Indexer üzerinde ayrıca Universal Forwarder kurulmasına gerek yoktur.

vi /opt/splunk/etc/manager-apps/data_integrity_monitor/local/inputs.conf

[script://./bin/check_data_integrity.sh]

disabled = 0

interval = 0 2 * * *

[monitor:///opt/splunk/var/log/splunk/data_integrity_check.log]

disabled = 0

index = splunk_integrity

sourcetype = splunk:data_integrity:check

Not: script://./bin/check_data_integrity.sh app-relative kullanım sağlar. Peer üzerinde app /opt/splunk/etc/apps/data_integrity_monitor altına geldiğinde script doğru konumdan çalışır.

8.7 Data Integrity Enable Ayarını Cluster’da Dağıtma

enableDataIntegrityControl ayarı da indexer peer’lara dağıtılmalıdır. En temiz yöntem, ilgili indexlerin zaten tanımlı olduğu cluster index app’i içine bu satırı eklemektir. Ayrı bir app içine eklemek teknik olarak çalışabilir; ancak index yönetimi açısından mevcut index app’i içinde yönetmek daha düzenlidir.

vi /opt/splunk/etc/manager-apps/<index_app>/local/indexes.conf

[windows2]

enableDataIntegrityControl = true

[security]

enableDataIntegrityControl = true

[wineventlog]

enableDataIntegrityControl = true

Eğer yeni bir splunk_integrity indexi kullanılacaksa bu index de cluster bundle içindeki index app’inde tanımlı olmalıdır:

[splunk_integrity]

homePath = $SPLUNK_DB/splunk_integrity/db

coldPath = $SPLUNK_DB/splunk_integrity/colddb

thawedPath = $SPLUNK_DB/splunk_integrity/thaweddb

8.8 Bundle Validate ve Apply

Cluster Manager üzerinde değişiklikler tamamlandıktan sonra bundle doğrulanır ve indexer peer’lara uygulanır. Data Integrity ayarı indexer konfigürasyonu olduğu için configuration bundle yapılıp validate and check edilir ve pushlanır.

8.9 Indexer Peer Üzerinde Doğrulama

Bundle dağıtıldıktan sonra bir veya birkaç indexer peer üzerinde app’in geldiği, inputs.conf’un yüklendiği ve Data Integrity ayarının aktif olduğu doğrulanır.

# App peer üzerine geldi mi?

ls -l /opt/splunk/etc/apps/data_integrity_monitor/

# Script executable mı?

ls -l /opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh

# inputs.conf efektif mi?

/opt/splunk/bin/splunk btool inputs list –debug | grep -A8 -B2 “data_integrity”

# Data Integrity ayarı efektif mi?

/opt/splunk/bin/splunk btool indexes list windows2 –debug | grep enableDataIntegrityControl

Manuel test için indexer peer üzerinde script çalıştırılabilir:

su – splunk

/opt/splunk/etc/apps/data_integrity_monitor/bin/check_data_integrity.sh

tail -20 /opt/splunk/var/log/splunk/data_integrity_check.log

8.10 Search Head Üzerinden Merkezi Kontrol ve Alert

Search Head üzerinde script çalıştırılmaz. Search Head sadece indexer peer’lardan gelen splunk_integrity kayıtlarını arar ve alarm üretir.

index=splunk_integrity sourcetype=”splunk:data_integrity:check”

| stats count by host index status

Final problem sorgusu:

index=splunk_integrity sourcetype=”splunk:data_integrity:check” earliest=-45m

| where status IN (“FAILED”,”ERROR”,”UNKNOWN”)

| where NOT like(bucket,”/tmp/%”)

| where NOT like(reason,”%Journal has no hashes%”)

| eval detection_name=”Splunk Data Integrity Check Failure”

| eval severity=”critical”

| table _time host index bucket status exit_code reason detection_name severity

| sort – _time

8.11 Cluster Yapıda Operasyonel İşlemler

Cluster Manager app’i dağıtır; kendisi bucket kontrolü yapmaz. Index listesi Cluster Manager üzerindeki app içinde merkezi tutulur. Her indexer aynı listeyi okur ancak sadece kendi local bucket path’i olan indexlerde kontrol yapar.

Universal Forwarder gerekli değildir. Indexer üzerinde zaten Splunk Enterprise çalıştığı için scripted input ve monitor input işlemleri splunkd tarafından yürütülür.

Scriptin düşük yoğunluklu saatlerde çalıştırılması önerilir. check-integrity bucket dosyalarını okuyacağı için disk I/O oluşturabilir. Büyük ortamlarda önce kritik indexlerle pilot yapılması, log rotate uygulanması ve çalışma süresinin izlenmesi önerilir.

Önerilen logrotate ayarı

Her indexer üzerinde:

vi /etc/logrotate.d/splunk_data_integrity

İçerik:

/opt/splunk/var/log/splunk/data_integrity_check.log {

    daily

    rotate 14

    compress

    missingok

    notifempty

    copytruncate

    create 0640 splunk splunk

}

Anlamı:

daily       → her gün rotate eder

rotate 14   → 14 günlük geçmişi tutar

compress    → eski dosyaları sıkıştırır

missingok   → dosya yoksa hata vermez

notifempty  → boş dosyayı rotate etmez

copytruncate→ dosya açıkken kopyalayıp mevcut dosyayı sıfırlar

create      → yeni dosyayı splunk:splunk sahibiyle oluşturur

9. Kısıtlar ve Dikkat Edilecek Noktalar

  • Data Integrity Control değişikliği engellemez; değişikliği doğrulama sırasında tespit eder.
  • Özellik açılmadan önce oluşmuş bucketlar için geriye dönük hash üretimi beklenmemelidir.
  • FAILED/ERROR/UNKNOWN durumları alarm kapsamına alınmalıdır.
  • Journal has no hashes mesajı eski bucketlar için beklenen durumdur ve alarm dışı bırakılmalıdır.
  • check-integrity komutu disk okuması yapacağından düşük yoğunluklu saatlerde çalıştırılması önerilir.
  • SPL | delete kullanımı, CLI clean eventdata ve OS seviyesinde rm/unlink işlemleri ayrı denetim katmanlarıyla izlenmelidir.

10. Sonuç

Bu çalışma ile Splunk Data Integrity Control özelliği test ortamında etkinleştirilmiş, özellik aktif edildikten sonra oluşturulan bucket üzerinde başarılı bütünlük kontrolü yapılmış ve kontrollü olarak bozulan bucket kopyasında FAILED sonucu alınmıştır. Devamında check-integrity komutunun periyodik çalıştırılması için script hazırlanmış, sonuçların Splunk’a indexlenmesi ve FAILED/ERROR/UNKNOWN durumlarında alarm üretimi tasarlanmıştır.

Data Integrity Control tek başına görünür bir ES notable veya GUI alarmı üretmez. Ancak check-integrity sonucu periyodik olarak Splunk’a alındığında bucket bütünlüğü GUI üzerinden izlenebilir ve alarm mekanizmasına dönüştürülebilir.

11. Kaynaklar

  • Splunk Enterprise – Manage data integrity – Data Integrity Control, l1Hashes/l2Hash ve check-integrity komutu.
  • Splunk Enterprise – Administrative CLI commands – check-integrity komut kullanım referansı.
  • Splunk Enterprise Security – Audit dashboards – ES Audit Dashboards içinde Data Integrity Control By Index görünümü açıklaması.
  • Splunk Enterprise – Check the integrity of your Splunk software files – Splunk software file integrity kontrolü; index data integrity ile karıştırılmamalıdır.

Share this content:

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Explore More

SPİDERFOOT NEDİR ? NASIL KURULUR ?

Herkese Selam! Bugün ele aldığımız konu Spiderfoot kullanımı ve kurulumu nedir , iyi okumalar 🙂 Spiderfoot kısaca ,belirli bir hedef hakkında bilgi sürecini otomatikleştirme işlevi olan açık kaynaklı bilgi toplama

WAZUH’a WİNDOWS DEFENDER GÜNLÜĞÜNÜ İLETME

Herkese selam! Bu yazımda ele aldığım konu WAZUH’a WİNDOWS DEFENDER GÜNLÜĞÜNÜ İLETME , keyifli okumalar. 🙂 Windows Defender, Windows işletim sistemi kullanan bilgisayarlarda işletim sisteminin kurulmasıyla birlikte yüklenen güvenlik duvarı

WAZUH ile SYSMON LOGLARINI GÖRÜNTÜLEME

Herkese selam! Bu yazımda ele aldığım konu WAZUH ile SYSMON LOGLARINI GÖRÜNTÜLEME , Keyifli Okumalar. 🙂 Wazuh hakkında daha önceki yazımda bilgi verip ubuntu üzerinde kurulumunu gerçekleştirmiştim  bu yazıma linkten