ft_transcendence

42 İstanbul’un son ortak projesi: tarayıcıda oynanan, gerçek zamanlı çok oyunculu bir Pong platformu. Ekipte backend’den ve güvenlik katmanından sorumluydum: sırları Vault’a taşıdım, trafiği ModSecurity’den geçirdim.

Tür
42 İstanbul ekip projesi
Rolüm
Backend, HashiCorp Vault ve ModSecurity
Yıl
2024–2025
Backend
Django, WebSocket, PostgreSQL
Altyapı
Docker, Nginx, HashiCorp Vault, ModSecurity
Pong maçı: dört raket, ortada kesikli çizgi, skor 3-1
Maç ekranı: 4 oyunculu yerel mod.

Oyun

Çevrim içi maçlar WebSocket üzerinden gerçek zamanlı oynanıyor. Giriş yapan kullanıcı arkadaş ekleyebiliyor, kayıtlı oyuncuları görebiliyor ve farklı modlarda oynayabiliyor.

Yapay zekâya karşı

Bilgisayar rakibe karşı tek kişilik maç.

Yerel çok oyunculu

Aynı klavyede 2 ya da 4 oyuncu.

Turnuva

Arkadaşlarla turnuva kurup eleme usulü oynama.

Çevrim içi

Başka bir tarayıcıdaki oyuncuyla, sunucu üzerinden canlı maç.

ft_transcendence ana sayfası: Play Local, Play Online, Friends ve All Users kartları
Giriş yapınca: yerel ve çevrim içi oyun, arkadaşlar, tüm kullanıcılar.
Oyun modları ekranı: Play Against AI, Local Multiplayer (2 ve 4 oyuncu) ve Tournament
Oyun modları: yapay zekâ, yerel 2/4 oyuncu ve turnuva.

Güvenlik

Bu bölümdeki Vault ve ModSecurity kurulumu benim işim. Amaç, gerçek bir uygulamada ihtiyaç duyulan katmanları kurmaktı: sırların yönetimi, uygulama önünde bir WAF ve güçlü kimlik doğrulama.

Sırlar HashiCorp Vault’ta

Veritabanı bilgileri, e-posta sunucusu ayarları ve Django’nun SECRET_KEY’i koda ya da .env dosyasına yazılmıyor; Vault’taki bir KV sırrında (myapp/config) duruyor. Servisler açılırken değerleri Vault’tan okuyor. Böylece sırlar depoya hiç girmiyor, sürümleniyor ve tek yerden değiştirilebiliyor.

HashiCorp Vault token ile giriş ekranı
HashiCorp Vault giriş ekranı.
Vault arayüzünde myapp/config sırrı: DB, e-posta ve SECRET_KEY anahtarları, değerler gizli
myapp/config: uygulamanın bütün sırları Vault’ta, değerler maskeli.

Önünde ModSecurity WAF

Nginx ile çalışan ModSecurity, uygulamaya ulaşmadan önce gelen istekleri kurallara göre denetliyor. SQL enjeksiyonu ve XSS gibi tipik saldırı kalıpları Django’ya varmadan engelleniyor; uygulama kodundaki bir hatanın sömürülmesi zorlaşıyor.

OAuth2 ve 2FA

OAuth2 ile giriş ve iki adımlı doğrulama (2FA).

Docker ile tek komutta ayağa kalkan yapı

Uygulama, veritabanı, Nginx, ModSecurity ve Vault ayrı Docker konteynerlerinde çalışıyor; bütün sistem tek komutla kuruluyor.