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.
- 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ı
- 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
- 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
- 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ı
- 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
┌─────────────────┐ UDP 514 ┌──────────────────┐
│ FortiGate │ ───────────────►│ Python │
│ Firewall │ │ Collector │
└─────────────────┘ └────────┬─────────┘
│ Batch Insert
▼
┌──────────────────┐
│ ClickHouse │
│ (OLAP DB) │
└────────┬─────────┘
│
▼
┌──────────────────┐
┌─────────────────┐ HTTP │ CodeIgniter 4 │
│ Web Browser │ ◄──────────────►│ + Nginx │
└─────────────────┘ └──────────────────┘
- Docker & Docker Compose v2+
- Git
- 4GB+ RAM (ClickHouse için önerilir)
- FortiGate cihazı (FortiOS 6.0+)
# 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:8080FortiGate 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:
reliableyerine UDP kullanın, performans açısından daha iyidir.
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ı
.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)| Servis | Port | Açıklama |
|---|---|---|
| nginx | 8080 | Web arayüzü |
| php | 9000 (internal) | PHP-FPM |
| clickhouse | 8123, 9000 | ClickHouse DB |
| collector | 514/udp | Syslog collector |
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ı
GET /api/reports/top-users?limit=20&hours=24 # Top kullanıcılar
GET /api/reports/user-detail?user=USERNAME # Kullanıcı detayları
GET /api/security/threats?limit=50 # Son tehditler
GET /api/security/severity-distribution # Severity dağılımı
GET /logs?log_type=traffic&user=john&action=deny # Filtrelenmiş loglar
GET /api/logs?limit=100&offset=0 # API log listesi
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;- 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ı
- Şifre Değiştirin -
.envdosyasındakiCLICKHOUSE_PASSWORDdeğerini değiştirin - Firewall Kuralları - UDP 514 portunu sadece FortiGate IP'lerine açın
- HTTPS Kullanın - Production ortamında SSL sertifikası ekleyin
- Network Segmentasyonu - Collector'ı DMZ'de konumlandırın
# 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 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"# Nginx ve PHP durumunu kontrol edin
docker-compose ps
docker-compose logs nginx phpKatkılarınızı bekliyoruz! Lütfen:
- Bu repoyu fork edin
- Feature branch oluşturun (
git checkout -b feature/amazing-feature) - Değişikliklerinizi commit edin (
git commit -m 'Add amazing feature') - Branch'inizi push edin (
git push origin feature/amazing-feature) - Pull Request açın
Bu proje MIT License with Commons Clause lisansı altında sunulmaktadır.
- 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
- 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
- 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.
Ali Yıldırım
- GitHub: @Pairs34
- LinkedIn: Ali Yıldırım
- ClickHouse - Yüksek performanslı OLAP veritabanı
- CodeIgniter - Hafif PHP framework
- Fortinet - FortiGate ürün ailesi
- Chart.js - JavaScript grafik kütüphanesi
Made with ❤️ for the Network Security Community