Automated Threat Intelligence Pipeline for the T.C. Siber Güvenlik Başkanlığı (Cyber Security Presidency) API
TC-SGB-API-to-List fetches IoC (Indicator of Compromise) data from the TC SGB public API (https://siberguvenlik.gov.tr/api/), processes it through a robust multi-stage pipeline, and outputs structured threat intelligence in 16 interoperable formats compatible with leading DNS filtering and security tools.
- Automated IoC Fetching — Paginated retrieval from the TC SGB API with retry logic and rate limiting
- Validation & Normalization — Pydantic-based data models with IoC type inference and format normalization
- Deduplication — Efficient set-based deduplication across fetches
- Quality Scoring — Multi-factor quality assessment for each IoC
- 16 Output Formats:
- DNS: NextDNS, AdGuard, Pi-hole, dnsmasq, Unbound, RPZ, Technitium, MikroTik
- Firewall: nftables, ipset
- IDS/IPS: Suricata, CrowdSec
- Data: CSV, JSON, YAML, SQLite
- Scheduled Pipeline — GitHub Actions cron for automated updates every day (19:00 UTC)
- Bilingual Documentation — Full English and Turkish documentation
- Python 3.11+
- pip or Poetry
git clone https://github.com/bayraktarozcan/TC-SGB-API-to-List.git
cd TC-SGB-API-to-List
pip install -e .# Run the full pipeline
tc-sgb fetch
# Generate outputs from previously saved raw data
tc-sgb generate -i Output/raw_records.json
# Fetch and display health status
tc-sgb health
# Fetch third-party threat feeds (CERT.PL, CERT.SI, blacklist.gov.az)
tc-sgb fetch-external
# Verify published external lists against the safety policy (no fetching)
tc-sgb validate-externalLatest pre-generated IoC outputs are published automatically (daily, 19:00 UTC) to the rolling GitHub Release ioc-data. The five large-format files are distributed through stable download URLs (small formats remain tracked in the Output/ directory):
| Format | File | Size (approx.) |
|---|---|---|
| Raw records | raw_records.json | 129 MB |
| Structured JSON | threat_intel_json.json | 130 MB |
| SQLite database | threat_intel_sqlite.db | 96 MB |
| Suricata JSON | threat_intel_suricata.json | 203 MB |
| Structured YAML | threat_intel_yaml.yaml | 97 MB |
Download via
wget/curl/Invoke-WebRequestor browse the release page. All other formats are generated toOutput/when you run the pipeline locally.Brave / AdGuard users: release-asset links are served as file downloads, which Brave rejects as custom filter lists. Subscribe to the plain-text mirror instead (
brave://adblock→ Add filter list via URL); it is refreshed daily. Three more curated lists (Poland, Azerbaijan, Slovenia) are published on the same branch and refreshed by the same workflow; files are numbered so Brave shows them in country order (04is reserved for Lithuania):
Syntax validation checks rule shape; the safety policy in Scripts/src/safety.py
decides whether blocking a host wholesale is safe to publish. High-impact hosts
are rejected outright, shared user-content infrastructure goes to review, and
every held indicator lands in a per-feed audit file (Output/External/) with
its reason — never silently dropped. The scheduled workflow publishes only
lists passing tc-sgb validate-external; a failing feed keeps serving its last
good snapshot.
TC-SGB-API-to-List/
├── Scripts/
│ ├── main.py # CLI entry point
│ └── src/
│ ├── models.py # Pydantic data models
│ ├── client.py # Async API client
│ ├── external_feeds.py # Third-party threat-feed mirrors
│ ├── safety.py # Publication safety policy (shared)
│ ├── validator.py # IoC validation
│ ├── normalizer.py # IoC normalization
│ ├── deduplicator.py # Deduplication
│ ├── quality.py # Quality scoring
│ ├── outputs.py # 16 output format generators
│ └── pipeline.py # Pipeline orchestrator
├── Tests/ # Test suite
├── Docs/ # Documentation (bilingual)
├── Schema/ # JSON Schema & OpenAPI spec
├── Data/ # Runtime data cache
├── Output/ # Generated IoC output files (small formats tracked; large formats via `ioc-data` release)
├── Examples/ # Usage examples
├── Benchmark/ # Performance benchmarks
└── .github/workflows/ # CI/CD pipelines
| Document | Description |
|---|---|
| Architecture | System design and component overview |
| Data Flow | Pipeline data flow and transformations |
| Module Architecture | Module responsibilities and interfaces |
| Repository Structure | Directory layout and file purposes |
| API Analysis | TC SGB API endpoints and capabilities |
| Data Model | Pydantic models and schemas |
| Threat Model | STRIDE threat analysis |
| Security Analysis | Security posture and hardening |
| License Analysis | Legal and licensing considerations |
| Test Strategy | Testing approach and coverage |
| Regression Strategy | Regression testing methodology |
| Performance Strategy | Performance benchmarks and optimization |
| Versioning Strategy | Semantic versioning approach |
| Publishing Strategy | Distribution and publishing |
| Maintenance Plan | Ongoing maintenance procedures |
| Risk Analysis | Risk assessment and mitigation |
| Roadmap | Development roadmap |
| Legal Notices | Legal and compliance notices |
| Document | Description |
|---|---|
| Changelog | Version history |
| Contributing | Contribution guidelines |
| Security | Security reporting process |
| Support | Where to ask questions and how to report an issue |
| Privacy | What the project collects, stores, and transmits |
| Code of Conduct | Code of conduct |
| Release notes | Skeleton that release notes follow |
| Agent guide | Operating rules for humans and coding agents |
| License | License terms |
| Notice | Third-party attribution and trademark notices |
| Code owners | Defines code owners |
Copy .env.example to .env and configure as needed:
cp .env.example .env# Install dev dependencies
pip install -e ".[dev]"
pip install -r requirements.txt
# Run tests
pytest Tests/ -v
# Run linter
ruff check Scripts/ Tests/
# Run type checker
mypy Scripts/- Core pipeline (fetch → validate → normalize → score → dedup → output)
- 16 output formats
- CI/CD with GitHub Actions
- Comprehensive test suite
- Docker containerization
- PyPI publishing
- Additional threat intel sources (CISA KEV, Spamhaus, URLhaus)
- Web dashboard
Contributions are welcome! Please read our contributing guidelines before submitting a pull request.
This project is licensed under the MIT License. See LEGAL_NOTICES for important legal information regarding data redistribution.
This tool is provided as-is for legitimate cybersecurity research and defense purposes. Users are responsible for compliance with all applicable laws and regulations.
T.C. Siber Güvenlik Başkanlığı (Cyber Security Presidency) API'si için Otomatik Tehdit İstihbaratı Hattı
TC-SGB-API-to-List, TC SGB kamu API'sinden (https://siberguvenlik.gov.tr/api/) IoC (İhlal Göstergesi) verilerini çeker, güçlü bir çok aşamalı hat üzerinden işler ve 16 birlikte çalışabilir biçimde yapılandırılmış tehdit istihbaratı çıktısı üretir.
- Otomatik IoC Çekme — Yeniden deneme mantığı ve hız sınırlaması ile sayfalı veri çekme
- Doğrulama ve Normalleştirme — Pydantic tabanlı veri modelleri ile IoC türü çıkarma ve biçim normalleştirme
- Tekilleştirme — Çekimler arasında verimli küme tabanlı tekilleştirme
- Kalite Puanlama — Her IoC için çok faktörlü kalite değerlendirmesi
- 16 Çıktı Formatı:
- DNS: NextDNS, AdGuard, Pi-hole, dnsmasq, Unbound, RPZ, Technitium, MikroTik
- Güvenlik Duvarı: nftables, ipset
- IDS/IPS: Suricata, CrowdSec
- Veri: CSV, JSON, YAML, SQLite
- Zamanlanmış Hat — Her gün (19:00 UTC) otomatik güncellemeler için GitHub Actions cron zamanlayıcısı
- Çift Dilli Dokümantasyon — Tam İngilizce ve Türkçe dokümantasyon
- Python 3.11+
- pip veya Poetry
git clone https://github.com/bayraktarozcan/TC-SGB-API-to-List.git
cd TC-SGB-API-to-List
pip install -e .# Tam hattı çalıştır
tc-sgb fetch
# Daha önce kaydedilmiş ham veriden çıktı üret
tc-sgb generate -i Output/raw_records.json
# Sağlık durumunu görüntüle
tc-sgb health
# Üçüncü taraf tehdit akışlarını çek (CERT.PL, CERT.SI, blacklist.gov.az)
tc-sgb fetch-external
# Yayımlanmış harici listeleri güvenlik politikasına göre doğrula (çekme yok)
tc-sgb validate-externalEn güncel önceden üretilmiş IoC çıktıları (her gün, 19:00 UTC) yuvarlanan GitHub Release'i ioc-data'da otomatik olarak yayınlanır. Beş büyük biçim dosyası kararlı indirme bağlantıları üzerinden dağıtılır (küçük biçimler Output/ dizininde izlenmeye devam eder):
| Biçim | Dosya | Yaklaşık Boyut |
|---|---|---|
| Ham kayıtlar | raw_records.json | 129 MB |
| Yapılandırılmış JSON | threat_intel_json.json | 130 MB |
| SQLite veritabanı | threat_intel_sqlite.db | 96 MB |
| Suricata JSON | threat_intel_suricata.json | 203 MB |
| Yapılandırılmış YAML | threat_intel_yaml.yaml | 97 MB |
wget/curl/Invoke-WebRequestile indirin veya release sayfasını inceleyin. Diğer tüm biçimler hattı yerel olarak çalıştırdığınızdaOutput/dizinine üretilir.Brave / AdGuard kullanıcıları: release bağlantıları dosya indirme olarak sunulur ve Brave bunları özel filtre listesi olarak kabul etmez. Bunun yerine her gün güncellenen düz metin aynayı kullanın (
brave://adblock→ Add filter list via URL). Aynı dalda, aynı iş akışıyla güncellenen üç seçkin liste daha yayınlanır (Polonya, Azerbaycan, Slovenya); dosyalar numaralıdır, böylece Brave onları ülke sırasıyla gösterir (04Litvanya için ayrılmıştır):
Sözdizimi doğrulaması kural biçimini denetler; Scripts/src/safety.py içindeki
güvenlik politikası bir makinenin toptan engellenmesinin yayımlanmasının güvenli
olup olmadığına karar verir. Yüksek etkili makineler doğrudan reddedilir, ortak
kullanıcı içerik altyapısı incelemeye ayrılır ve tutulan her gösterge gerekçesiyle
birlikte akış başına denetim dosyasına (Output/External/) yazılır — asla sessizce
düşürülmez. Zamanlanmış iş akışı yalnızca tc-sgb validate-external geçen listeleri
yayımlar; koşamayan akış son iyi anlık görüntüyü sunmaya devam eder.
TC-SGB-API-to-List/
├── Scripts/
│ ├── main.py # CLI giriş noktası
│ └── src/
│ ├── models.py # Pydantic veri modelleri
│ ├── client.py # Asenkron API istemcisi
│ ├── external_feeds.py # Üçüncü taraf tehdit akışı aynaları
│ ├── safety.py # Yayımlama güvenlik politikası (ortak)
│ ├── validator.py # IoC doğrulama
│ ├── normalizer.py # IoC normalleştirme
│ ├── deduplicator.py # Tekilleştirme
│ ├── quality.py # Kalite puanlama
│ ├── outputs.py # 16 çıktı biçimi üreteçleri
│ └── pipeline.py # Hat koordinatörü
├── Tests/ # Test paketi
├── Docs/ # Dokümantasyon (çift dilli)
├── Schema/ # JSON Schema ve OpenAPI belirtimi
├── Data/ # Çalışma zamanı veri önbelleği
├── Output/ # Üretilen IoC çıktı dosyaları (küçük biçimler izlenir; büyük biçimler `ioc-data` release'i aracılığıyla)
├── Examples/ # Kullanım örnekleri
├── Benchmark/ # Performans karşılaştırmaları
└── .github/workflows/ # CI/CD hatları
| Belge | Açıklama |
|---|---|
| Mimari | Sistem tasarımı ve bileşen genel bakışı |
| Veri Akışı | Hat veri akışı ve dönüşümleri |
| Modül Mimarisi | Modül sorumlulukları ve arayüzleri |
| Depo Yapısı | Dizin yerleşimi ve dosya amaçları |
| API Analizi | TC SGB API uç noktaları ve yetenekleri |
| Veri Modeli | Pydantic modelleri ve şemaları |
| Tehdit Modeli | STRIDE tehdit analizi |
| Güvenlik Analizi | Güvenlik duruşu ve sertleştirme |
| Lisans Analizi | Hukuki ve lisanslama hususları |
| Test Stratejisi | Test yaklaşımı ve kapsama |
| Regresyon Stratejisi | Regresyon test metodolojisi |
| Performans Stratejisi | Performans karşılaştırmaları ve optimizasyon |
| Sürüm Stratejisi | Semantik sürümleme yaklaşımı |
| Yayın Stratejisi | Dağıtım ve yayınlanma |
| Bakım Planı | Sürekli bakım prosedürleri |
| Risk Analizi | Risk değerlendirmesi ve azaltma |
| Yol Haritası | Geliştirme yol haritası |
| Yasal Bildirimler | Hukuki ve uyum bildirimleri |
| Belge | Açıklama |
|---|---|
| Değişiklik Günlüğü | Sürüm geçmişi |
| Katkıda Bulunma | Katkı yönergeleri |
| Güvenlik | Güvenlik bildirim süreci |
| Destek | Soru sorma ve sorun bildirme yeri |
| Gizlilik | Projenin ne topladığı, sakladığı ve ilettiği |
| Davranış Kuralları | Davranış kuralları |
| Sürüm notları | Sürüm notlarının izlediği iskelet |
| Ajan kılavuzu | İnsanlar ve kodlama ajanları için çalışma kuralları |
| Lisans | Lisans koşulları |
| Bildirim | Üçüncü taraf atıfları ve marka bildirimleri |
| Kod sahipleri | Kod sahiplerini tanımlar |
.env.example dosyasını .env olarak kopyalayın ve gerektiğince yapılandırın:
cp .env.example .env# Geliştirici bağımlılıklarını kur
pip install -e ".[dev]"
pip install -r requirements.txt
# Testleri çalıştır
pytest Tests/ -v
# Linter'ı çalıştır
ruff check Scripts/ Tests/
# Tip kontrolcüyü çalıştır
mypy Scripts/- Çekirdek hat (çek → doğrula → normalleştir → puanla → tekilleştir → çıktı)
- 16 çıktı biçimi
- GitHub Actions ile CI/CD
- Kapsamlı test paketi
- Docker konteynerleştirme
- PyPI yayınlama
- Ek tehdit istihbaratı kaynakları (CISA KEV, Spamhaus, URLhaus)
- Web kontrol paneli
Katkılar memnuniyetle karşılanmaktadır! Lütfen pull request göndermeden önce katkı yönergelerimizi okuyun.
Bu proje MIT Lisansı altında lisanslanmıştır. Veri yeniden dağıtımı ile ilgili önemli yasal bilgiler için YASAL BİLDİRİMLER dosyasına bakın.
Bu araç, meşru siber güvenlik araştırması ve savunma amaçları için olduğu gibi sağlanmaktadır. Kullanıcılar, geçerli tüm yasa ve düzenlemelere uymaktan sorumludur.