## [0.5.0] - 2026-07-26

Panelin "yönettiği sunucu bozulduğunda ne oluyor" sorusuna cevap veren sürüm.
Önceki sürümler sunucuyu yönetmeyi çözmüştü; bu sürüm işletim gerçekliğini
kapatıyor: uyarılar artık panel dışına çıkıyor, yedekler sunucu dışına
kopyalanıyor, siteler HTTP düzeyinde izleniyor ve panelin kendisi şifreli
konuşabiliyor. Ayrıca nginx ve PHP doğrudan panelden yapılandırılıyor.

### Eklenenler

- **WAF için "yalnız izle" kipi.** Site koruması yalnız açık/kapalıydı. Bir
  site meşru bir isteği yüzünden CRS'e takıldığında pratikte tek çare WAF'ı
  tümüyle kapatmaktı; site o andan sonra korumasız kalıyordu. Yeni kip
  (`SecRuleEngine DetectionOnly`) kuralları çalıştırır ve olay akışına yazar
  ama isteği engellemez — yeni bir siteyi kırmadan tanımanın ve istisnaları
  gerçek trafikle çıkarmanın yolu
- **nginx `http` ayarları.** Panelde yalnız site başına `server{}` parçacığı
  vardı; tüm siteleri kapsayan yönergeler hiçbir yerden verilemiyordu.
  Siteler → **nginx ayarları** altında azami istek gövdesi, zaman aşımları,
  vekil zaman aşımları, gzip ve sürüm başlığı ayarlanıyor; katalogda olmayan
  her şey için "ek yönergeler" alanı var. Kaydetmeden önce `nginx -t`
  çalışıyor, reddedilirse eski ayarlara dönülüyor ve hiçbir site etkilenmiyor
- **Katalog dışı PHP ayarları.** PHP kataloğu kapalı bir altı anahtardan
  ibaretti ve katalogda olmayan her ayar sessizce atılıyordu. Site düzenleme
  formuna "Ek PHP ayarları" alanı eklendi: `date.timezone`, `opcache.*`,
  `session.*` gibi php.ini ayarları ve `pm.max_children` gibi FPM havuz
  yönergeleri artık verilebiliyor. Havuz yalıtımını taşıyan anahtarlar
  (`open_basedir`, `user`, `listen`, `chdir`) açıklamalı bir hatayla
  reddediliyor — siteler aynı PHP container'ını paylaşıyor
- **WAF olay detayı.** Olay akışı bir CRS eşleşmesinin yalnız kuralını ve
  yolunu gösteriyordu; "gerçek saldırı mı, yanlış pozitif mi" kararını
  verdiren alanlar hiç toplanmıyordu. Artık her olayla birlikte **User-Agent**,
  yönlendiren alan adı, ülke (GeoIP kuruluysa), kuralı tetikleyen **eşleşen
  veri**, kural dosyası ve CRS etiketleri saklanıyor. Satıra tıklandığında
  hepsi bir detay penceresinde açılıyor; işlem kimliği kopyalanabiliyor.
  Listede User-Agent ve ülke kısaltılmış olarak da görünüyor
- Güvenlik tarayıcıları (`sqlmap`, `nikto`, `nuclei`, `wpscan`, `masscan`,
  `zgrab`) bot imza listesine eklendi — WAF olaylarında ve trafik
  kırılımında "insan" olarak sayılıyorlardı

### Düzeltmeler

- **Panel bir TLS vekilinin arkasındayken oturum çerezi artık `Secure`.**
  Paneli kendi nginx'inin arkasına koymak (panele bir ters vekil sitesi açıp
  sertifikayı normal site akışından almak) çalışıyordu, ama panelin kendisi düz
  HTTP konuştuğu için çerez `Secure` işaretlenmiyordu — tarayıcı çerezi düz HTTP
  üzerinden de göndermeye razı oluyor, TLS'in kazandırdığının bir kısmı orada
  kayboluyordu. Panel artık güvenilen vekilden gelen `X-Forwarded-Proto`
  başlığına bakıyor. Güven kuralı gerçek IP ile aynı: başlığa yalnız bağlantı
  güvenilen bir ağdan geliyorsa **ve** "panel de bu vekilin arkasında" ayarı
  açıkken bakılır
- **PHP logları artık gerçekten görünüyor.** Log kataloğu container adını
  `webpanel-php-8.4` biçiminde kuruyordu ama gerçek ad `webpanel-php-84`
  (sürümdeki nokta silinir). Hem Loglar sayfasındaki PHP kaynağı hem site
  detayındaki "Loglar" sekmesi bu yüzden her zaman boş dönüyordu. Ad üretimi
  tek bir yere alındı ve elle kurulmasını engelleyen bir test eklendi
- **WAF büyük yüklemeleri ve uzun form gönderimlerini artık engellemiyor.**
  ModSecurity `SecRequestBodyLimitAction Reject` ile geliyordu: 12,5 MB üstü
  dosya yüklemesi 403, 128 KB'ı aşan form gönderimi (uzun bir blog yazısı,
  büyük bir ayar sayfası) 400 alıyordu — ikisi de meşru trafik. Artık
  `ProcessPartial` kullanılıyor, dosya sınırı nginx'in gövde sınırıyla hizalı
  (64 MB) ve dosya dışı gövde sınırı 1 MB. Ölçüldü: 30 MB'lık dosya yüklemesi
  ve 560 KB'lık form gönderimi WAF açıkken geçiyor, saldırı tespiti değişmiyor
- **Edge container'ı ModSecurity ayarı değişince yeniden kuruluyor.** Container
  yalnız image ve revizyon etiketine bakılarak karşılaştırılıyordu; ortam
  değişkenleri karşılaştırmaya girmiyordu. Bir sürüm ModSecurity ayarını
  değiştirse mevcut kurulumlarda **sessizce** eski değerlerle çalışmaya devam
  ederdi. Ortam değişkenleri artık revizyon özetine dahil
- **Yükleme sınırı gerçekten uygulanıyor.** `client_max_body_size` hiçbir yerde
  yazılmadığı için nginx 1 MB varsayılanında kalıyordu. Panel PHP tarafında
  `upload_max_filesize = 64M` gösteriyor olsa da 1 MB üstü her yükleme nginx'ten
  413 alıyor, istek PHP'ye hiç ulaşmıyordu. Sınır artık nginx ayarlarından
  yönetiliyor ve varsayılanı 64 MB. (WAF açık sitelerde ModSecurity'nin ~13 MB
  tavanı ayrıca geçerlidir; arayüz bunu belirtiyor.)
- **`webpanel` komutu artık PATH'te.** Kurulum ana binary'yi yalnız
  `/opt/webpanel/webpanel` altına koyuyordu; `webpanel doctor`,
  `webpanel repair`, `webpanel reset-password` ve `webpanel restore --panel`
  — panelin kendi hata mesajlarında önerilenler dahil — "command not found"
  veriyordu. Kurulum artık `/usr/local/bin/webpanel` bağını oluşturuyor,
  güncelleme eksik bağı kendiliğinden onarıyor ve kaldırma temizliyor. Bağ
  binary'nin kendisi değil sembolik bağ olduğu için güncellemeler
  kendiliğinden yeni sürümü gösteriyor. Operatör bağı başka bir hedefe
  çevirdiyse ya da yerinde gerçek bir dosya varsa dokunulmuyor
- `webpanel-update status` çıktısına CLI bağının durumu eklendi

