Skip to content

Pairs34/LogAnalyzer

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Forti-Sentinel
ClickHouse PHP Python Docker

🛡️ Forti-Sentinel Log Analyzer

FortiGate Firewall loglarını gerçek zamanlı toplayan, analiz eden ve görselleştiren yüksek performanslı, self-hosted açık kaynak çözüm.

FortiAnalyzer'a ihtiyaç duymadan kendi altyapınızda FortiGate loglarınızı saklayın, analiz edin ve raporlayın.


✨ Özellikler

📊 Dashboard

  • Gerçek Zamanlı İstatistikler - Toplam log, bant genişliği, tehdit sayısı, benzersiz kullanıcılar
  • Trafik Trendi - 24 saatlik interaktif trafik grafiği
  • Top Uygulamalar - En çok kullanılan uygulamalar (pie chart)
  • Protokol Dağılımı - TCP/UDP/ICMP kullanım oranları

👥 FortiView Tarzı Kullanıcı Raporları

  • Top Kullanıcılar - Bant genişliği ve oturum süresine göre sıralama
  • Kullanıcı Detayları - Ziyaret edilen siteler, kullanılan uygulamalar, kategori dağılımı
  • Oturum Takibi - FortiGate session ID bazlı doğru süre hesaplaması
  • Sayfalama & Arama - Büyük veri setlerinde kolay navigasyon

🔒 Güvenlik Merkezi

  • Tehdit İzleme - Virüs, IPS, Web Filter olayları
  • Severity Dağılımı - Kritik, yüksek, orta, düşük tehdit seviyeleri
  • Engellenen Trafik - Drop/Deny/Block aksiyonları
  • Attack Detayları - Saldırı adı, kaynak IP, hedef bilgileri

📋 Log Explorer

  • Gelişmiş Filtreleme - Log tipi, subtype, kullanıcı, IP, aksiyon, servis
  • Tam Metin Arama - Hostname, kullanıcı, uygulama, ham log içeriği
  • Log Detay Modalı - FortiGate log tiplerinin açıklamaları ile zenginleştirilmiş görünüm
  • Case-Insensitive Arama - Büyük/küçük harf duyarsız kullanıcı ve IP araması
  • Ham Log Görüntüleme - Orijinal syslog mesajı

⚡ Performans

  • ClickHouse OLAP - Milyonlarca log üzerinde saniyeler içinde sorgulama
  • Async UDP Collector - Yüksek hacimli log toplama (10K+ log/saniye)
  • Batch Insert - Optimize edilmiş veritabanı yazımı
  • Günlük Partition - Otomatik veri yönetimi ve TTL

🏗️ Mimari

┌─────────────────┐     UDP 514     ┌──────────────────┐
│   FortiGate     │ ───────────────►│  Python          │
│   Firewall      │                 │  Collector       │
└─────────────────┘                 └────────┬─────────┘
                                             │ Batch Insert
                                             ▼
                                    ┌──────────────────┐
                                    │   ClickHouse     │
                                    │   (OLAP DB)      │
                                    └────────┬─────────┘
                                             │
                                             ▼
                                    ┌──────────────────┐
┌─────────────────┐     HTTP        │   CodeIgniter 4  │
│   Web Browser   │ ◄──────────────►│   + Nginx        │
└─────────────────┘                 └──────────────────┘

🚀 Kurulum

Gereksinimler

  • Docker & Docker Compose v2+
  • Git
  • 4GB+ RAM (ClickHouse için önerilir)
  • FortiGate cihazı (FortiOS 6.0+)

Hızlı Başlangıç

# 1. Projeyi klonlayın
git clone https://github.com/pairsgroup/forti-sentinel.git
cd forti-sentinel

# 2. Environment dosyasını oluşturun
cp .env.example .env

# 3. (Opsiyonel) .env dosyasında şifreyi değiştirin
nano .env

# 4. Docker servislerini başlatın
docker-compose up -d

# 5. Servislerin başlamasını bekleyin (~30 saniye)
docker-compose ps

# 6. Web arayüzüne erişin
# http://localhost:8080

FortiGate Yapılandırması

FortiGate CLI üzerinden syslog gönderimini aktif edin:

config log syslogd setting
    set status enable
    set server "YOUR_SERVER_IP"
    set port 514
    set facility local0
    set format default
end

GUI üzerinden: System → Settings → Logging → Remote Logging → Syslog

💡 İpucu: reliable yerine UDP kullanın, performans açısından daha iyidir.


📁 Proje Yapısı

forti-sentinel/
├── docker-compose.yml          # Docker orkestrasyon
├── .env.example                # Örnek environment dosyası
│
├── collector/                  # Python UDP Collector
│   ├── main.py                 # AsyncIO UDP sunucu
│   ├── config.py               # Yapılandırma
│   ├── parsers/
│   │   └── fortigate.py        # FortiGate log parser
│   └── services/
│       ├── clickhouse_service.py  # DB batch insert
│       └── buffer_service.py      # Log buffer yönetimi
│
├── codeigniter/                # CodeIgniter 4 Web App
│   ├── app/
│   │   ├── Config/
│   │   │   ├── Routes.php      # API rotaları
│   │   │   └── ClickHouse.php  # DB yapılandırması
│   │   ├── Controllers/
│   │   │   ├── Dashboard.php   # Dashboard & API
│   │   │   ├── Reports.php     # Kullanıcı raporları
│   │   │   ├── Security.php    # Güvenlik merkezi
│   │   │   └── Logs.php        # Log explorer
│   │   ├── Libraries/
│   │   │   └── ClickHouseClient.php  # DB client
│   │   └── Views/              # Blade templates
│   └── public/
│       └── assets/             # CSS, JS dosyaları
│
├── database/
│   └── migrations/
│       └── 001_create_schema.sql  # ClickHouse şeması
│
└── docker/
    ├── php/Dockerfile          # PHP-FPM image
    └── nginx/default.conf      # Nginx yapılandırması

⚙️ Yapılandırma

Environment Değişkenleri

.env dosyasında düzenleyebileceğiniz ayarlar:

# ClickHouse Veritabanı
CLICKHOUSE_HOST=clickhouse
CLICKHOUSE_PORT=8123
CLICKHOUSE_DATABASE=fortimonitor
CLICKHOUSE_USER=default
CLICKHOUSE_PASSWORD=fortisentinel2024  # Production'da değiştirin!

# Collector Ayarları
SYSLOG_PORT=514                 # UDP dinleme portu
BUFFER_SIZE=5000                # Flush öncesi max log sayısı
FLUSH_INTERVAL=5                # Flush aralığı (saniye)

Docker Servisleri

Servis Port Açıklama
nginx 8080 Web arayüzü
php 9000 (internal) PHP-FPM
clickhouse 8123, 9000 ClickHouse DB
collector 514/udp Syslog collector

🔧 API Referansı

Dashboard

GET /api/dashboard/stats           # Genel istatistikler
GET /api/dashboard/trend?hours=24  # Trafik trendi
GET /api/dashboard/top-apps        # Top uygulamalar
GET /api/dashboard/protocols       # Protokol dağılımı

Reports

GET /api/reports/top-users?limit=20&hours=24  # Top kullanıcılar
GET /api/reports/user-detail?user=USERNAME    # Kullanıcı detayları

Security

GET /api/security/threats?limit=50            # Son tehditler
GET /api/security/severity-distribution       # Severity dağılımı

Logs

GET /logs?log_type=traffic&user=john&action=deny  # Filtrelenmiş loglar
GET /api/logs?limit=100&offset=0                   # API log listesi

🗄️ Veritabanı Şeması

Ana Tablo: fortimonitor.logs

CREATE TABLE fortimonitor.logs (
    timestamp DateTime,
    log_id UUID,
    log_type Enum8('traffic'=1, 'utm'=2, 'event'=3),
    subtype String,
    session_id UInt64,
    device_id String,
    src_ip IPv4,
    dst_ip IPv4,
    src_port UInt16,
    dst_port UInt16,
    proto UInt8,
    service String,
    user String,
    hostname String,
    category String,
    app_name String,
    duration UInt32,
    duration_delta UInt32,    -- FortiView uyumlu delta süre
    sent_byte UInt64,
    rcvd_byte UInt64,
    sent_delta UInt64,        -- Delta gönderilen
    rcvd_delta UInt64,        -- Delta alınan
    action String,
    severity Enum8('info'=0,'low'=1,'medium'=2,'high'=3,'critical'=4),
    attack_name String,
    raw_log String
)
ENGINE = MergeTree()
PARTITION BY toYYYYMMDD(timestamp)
ORDER BY (timestamp, log_type, src_ip)
TTL timestamp + INTERVAL 1 YEAR;

Özellikler

  • Günlük Partition - Otomatik veri organizasyonu
  • 1 Yıl TTL - Otomatik eski veri temizliği
  • ZSTD Sıkıştırma - Disk alanı optimizasyonu
  • Delta Değerler - FortiView uyumlu süre/bant genişliği hesaplaması

🔒 Güvenlik Önerileri

  1. Şifre Değiştirin - .env dosyasındaki CLICKHOUSE_PASSWORD değerini değiştirin
  2. Firewall Kuralları - UDP 514 portunu sadece FortiGate IP'lerine açın
  3. HTTPS Kullanın - Production ortamında SSL sertifikası ekleyin
  4. Network Segmentasyonu - Collector'ı DMZ'de konumlandırın

🐛 Sorun Giderme

Loglar gelmiyor

# Collector loglarını kontrol edin
docker-compose logs -f collector

# UDP paketlerini dinleyin
docker exec -it forti-collector tcpdump -i any udp port 514

ClickHouse bağlantı hatası

# ClickHouse durumunu kontrol edin
docker exec forti-clickhouse clickhouse-client --query "SELECT 1"

# Log sayısını kontrol edin
docker exec forti-clickhouse clickhouse-client --query "SELECT count() FROM fortimonitor.logs"

Web arayüzü açılmıyor

# Nginx ve PHP durumunu kontrol edin
docker-compose ps
docker-compose logs nginx php

🤝 Katkıda Bulunma

Katkılarınızı bekliyoruz! Lütfen:

  1. Bu repoyu fork edin
  2. Feature branch oluşturun (git checkout -b feature/amazing-feature)
  3. Değişikliklerinizi commit edin (git commit -m 'Add amazing feature')
  4. Branch'inizi push edin (git push origin feature/amazing-feature)
  5. Pull Request açın

📄 Lisans

Bu proje MIT License with Commons Clause lisansı altında sunulmaktadır.

✅ Bu lisans şunlara izin verir:

  • Kodu kullanma, kopyalama ve dağıtma
  • Değiştirme ve türev çalışmalar oluşturma
  • Kişisel ve kurumsal kullanım (ticari olmayan)
  • Eğitim ve araştırma amaçlı kullanım

❌ Bu lisans şunları yasaklar:

  • Yazılımı veya türevlerini satmak
  • SaaS olarak ücretli sunmak
  • Ücretli destek/bakım hizmeti vermek
  • Başka ürünlerle paketleyip ticari satış yapmak
  • Lisans ve atıf bilgilerini kaldırmak

📋 Zorunluluklar:

  • Orijinal projeye atıf yapılmalı
  • Bu lisans tüm kopyalarda korunmalı
  • Değişiklikler açıkça belirtilmeli

💼 Ticari Lisans: Ticari kullanım için lütfen proje sahipleriyle iletişime geçin.

Detaylar için LICENSE dosyasına bakın.


👨‍💻 Geliştirici

Ali Yıldırım


🙏 Teşekkürler


Made with ❤️ for the Network Security Community

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages