İçeriğe Atla
Mustafa Erbay
Teknoloji · 9 dk okuma · görüntülenme Read in English

Self-Hosting: Tam Kontrolün Getirdiği Güvenlik Sorumluluğu

Kendi sunucularınızı yönetmek tam kontrol sağlasa da, beraberinde getirdiği güvenlik sorumluluklarını ve bu sorumlulukları nasıl yöneteceğinizi kendi…

100%

Birkaç yıl önce kendi özel finansal hesaplayıcılarımı barındırdığım VPS’te, bir sabah loglara baktığımda SSH’a yönelik yüzlerce başarısız giriş denemesi gördüm. fail2ban devreye girmiş, birçoğunu engellemişti ama bu durum beni bir kez daha self-hosting’in getirdiği güvenlik sorumluluğuna odakladı. Tam kontrol vaadi cazip gelse de, bu kontrolle birlikte gelen güvenlik yükünü hafife almak, ciddi sorunlara yol açabiliyor.

Kendi sistemlerimi yönetirken edindiğim 20 yıllık tecrübemde, self-hosting’in hem özgürlük hem de ağır bir sorumluluk olduğunu gördüm. Başlangıçta sadece “bir şeyler çalıştırmak” niyetinde olsak da, zamanla sistemin her katmanında güvenliği düşünmek bir zorunluluk haline geliyor. Bu yazıda, self-hosting yaparken güvenlik konusunda nelere dikkat ettiğimi ve hangi pratikleri uyguladığımı anlatacağım.

Neden Self-Hosting Seçeriz ve Riskleri Nelerdir?

Self-hosting’i genellikle daha fazla kontrol, maliyet tasarrufu veya sadece öğrenme ve deneme merakı yüzünden tercih ederiz. Kendi donanımınızın veya sanal sunucunuzun her milimetresine hükmetme hissi, birçok geliştirici ve sistem yöneticisi için çekicidir. Kendi yan ürünlerimi geliştirirken veya bir müşteri projesinin özel ihtiyaçları olduğunda, esneklik çoğu zaman kritik bir faktör oluyor ve bu esnekliği bulutta her zaman aynı maliyetle bulmak zorlaşabiliyor.

Ancak bu kontrol, beraberinde ciddi riskleri de getirir. Bir bulut sağlayıcısının arka planda sizin için yönettiği birçok güvenlik katmanı (fiziksel güvenlik, ağ izolasyonu, işletim sistemi yamaları gibi) self-hosting’de tamamen sizin omuzlarınıza biner. Yanlış yapılandırılmış bir firewall, güncellenmemiş bir işletim sistemi veya zayıf bir şifre politikası, sisteminizi siber saldırılara açık hale getirebilir. Benim deneyimlerimde, genellikle ilk başta sadece uygulamanın çalışmasına odaklanıldığı için, bu temel güvenlik adımları ya atlanır ya da ertelenir; bu da zamanla büyük bir borç birikimine yol açar.

Temel Sistem Güvenliği: İşletim Sistemi ve Servisler

Kendi sunucunuzun çekirdeği olan işletim sistemi, güvenlik stratejinizin temelini oluşturur. Buradaki en küçük bir açık, tüm sistemin ele geçirilmesine neden olabilir. Bu yüzden, işletim sistemi seviyesindeki güvenlik ayarlarını asla göz ardı etmemek gerekir.

İlk olarak, işletim sistemi yamalarını düzenli olarak takip etmek ve uygulamak olmazsa olmazdır. CVE takibi bu konuda çok önemli. Örneğin, geçenlerde kritik bir kernel modülü olan algif_aead’deki bir zafiyet (CVE-2026-31431) ortaya çıktığında, ilgili modülü hemen blacklist’e alarak olası bir saldırı yüzeyini kapattım. Kendi sistemlerimde genellikle unattended-upgrades gibi araçlarla otomatik güncellemeleri aktif tutsam da, kritik yamaları elle kontrol edip hızlıca uygulamayı tercih ediyorum.

# Örnek: kernel modülünü blacklist'e alma
echo "blacklist algif_aead" | sudo tee /etc/modprobe.d/algif_aead_blacklist.conf
sudo update-initramfs -u

SSH erişimini güvence altına almak da kritik bir adımdır. Parola ile giriş yerine, sadece SSH key kullanmak ve fail2ban gibi araçlarla brute-force saldırılarını engellemek temel bir gerekliliktir. Kendi sunucularımda fail2ban için özel filtreler yazarak, sıkça karşılaştığım belirli saldırı paternlerini daha etkili bir şekilde bloke ediyorum. Ayrıca, auditd alt sistemi ile önemli dosya erişimlerini ve sistem çağrılarını izlemek, beklenmedik aktiviteleri yakalamak için iyi bir yöntemdir. SELinux veya AppArmor gibi zorunlu erişim kontrol mekanizmalarını doğru profillerle kullanmak da, bir servisin veya uygulamanın zarar görmesi durumunda yayılma alanını kısıtlar.

Ağ Güvenliği: Sınırları Belirlemek ve İzlemek

Ağ katmanı, sunucunuz ile dış dünya arasındaki ilk savunma hattıdır. Yanlış yapılandırılmış bir ağ, diğer tüm güvenlik önlemlerini anlamsız kılabilir. Bir üretim ERP’sinin backend’ini geliştirirken, uygulama sunucularının doğrudan internete açık olmasının ne kadar tehlikeli olduğunu defalarca gördüm.

graph TD;
  A["İstemci (Tarayıcı/Uygulama)"] --> B["Internet"];
  B --> C["Firewall / Güvenlik Duvarı"];
  C --> D["Nginx (Reverse Proxy / Load Balancer)"];
  D --> E["Uygulama Sunucusu (FastAPI/Node.js)"];
  E --> F["Veritabanı (PostgreSQL/Redis)"];
  E --> G["Diğer Servisler (MQ/Cache)"];

  subgraph "Güvenlik Katmanları"
      C -- "Paket Filtreleme" --> D;
      D -- "Rate Limiting / WAF" --> E;
      E -- "Authentication / Authorization" --> F;
      E -- "Veri Doğrulama" --> G;
  end

Ağ segmentasyonu, özellikle birden fazla servisi veya uygulamayı barındırıyorsanız hayati öneme sahiptir. VLAN tagging ile farklı servisleri veya ortamları izole etmek, bir segmentin ele geçirilmesi durumunda saldırının diğerlerine yayılmasını zorlaştırır. Örneğin, veritabanı sunucularını uygulama sunucularından farklı bir VLAN’a alıp, aralarında sadece gerekli portlar üzerinden iletişime izin veren firewall kuralları tanımlıyorum.

Nginx gibi bir reverse proxy kullanmak, gelen trafiği filtrelemek ve dengelemek için harika bir yoldur. Ben Nginx’i sadece SSL sonlandırma ve load balancing için değil, aynı zamanda rate limiting ve temel WAF (Web Application Firewall) özellikleri için de kullanıyorum. Böylece, doğrudan uygulama sunucularıma ulaşmadan önce kötü niyetli istekleri engellemiş oluyorum.

# Nginx ile basit bir rate limiting örneği
limit_req_zone $binary_remote_addr zone=mylimit:10m rate=5r/s;

server {
    listen 80;
    server_name example.com;

    location / {
        limit_req zone=mylimit burst=10 nodelay;
        proxy_pass http://backend_servers;
        # Diğer proxy ayarları
    }
}

Ayrıca, VPN veya Zero Trust Network Access (ZTNA) çözümleriyle uzaktan erişimi güvence altına almak gerekiyor. Bir şirketin iç ağlarına erişimde, ZTNA modelini kullanarak sadece belirli kullanıcıların, belirli cihazlardan ve belirli uygulamalara erişmesine izin verdim. Bu, geleneksel VPN’den çok daha granüler bir güvenlik sağlıyor. MTU/MSS mismatches gibi görünüşte küçük ağ detayları bile, bazı durumlarda tünellenmiş trafik üzerinde DoS saldırılarına yol açabileceği için dikkatli incelenmelidir. Switch’ler üzerinde DHCP snooping, Dynamic ARP Inspection (DAI) ve IP Source Guard gibi özellikleri etkinleştirerek, ağ içi saldırıları da bir nebze önleyebiliriz.

Uygulama Güvenliği: Geliştirme ve Dağıtım Süreçleri

Sistem ve ağ güvenliği temellerini attıktan sonra, sıra kendi geliştirdiğiniz veya kullandığınız uygulamaların güvenliğine gelir. Uygulama katmanındaki zafiyetler, genellikle en kolay istismar edilen ve en yıkıcı sonuçlara yol açanlardır.

Bir üretim ERP’sinde operatör ekranları tasarlarken, kullanıcıdan gelen her verinin potansiyel bir tehdit olduğunu varsayarak hareket ettim. SQL injection ve Cross-Site Scripting (XSS) gibi yaygın saldırı türlerine karşı proaktif önlemler almak şart. Gelen tüm girdileri sanitize etmek ve çıktılarda uygun kodlamayı kullanmak temel kuraldır. ORM kullanmak bu konuda bir miktar koruma sağlasa da, yine de özel sorgularda dikkatli olmak gerekir.

Kimlik doğrulama ve yetkilendirme mekanizmaları da çok önemlidir. JWT (JSON Web Token) veya OAuth2 gibi modern paternleri kullanırken, token’ların doğru şekilde imzalandığından, geçerlilik sürelerinin kısa tutulduğundan ve güvenli bir şekilde saklandığından emin olmak gerekir. Kendi yan ürünümün backend’inde, her API endpoint’ine rate limiting uygulayarak, hem brute-force saldırılarını engelliyorum hem de servisimin aşırı yüklenmesini önlüyorum.

CI/CD pipeline’larında güvenlik taramaları (statik kod analizi, bağımlılık analizi) entegre etmek, zafiyetleri geliştirme aşamasında yakalamak için iyi bir yöntemdir. Dark launch veya feature flag gibi dağıtım stratejilerini kullanırken bile, yeni özelliklerin güvenlik etkilerini gözden kaçırmamak gerekir.

Veritabanı Güvenliği ve Veri Bütünlüğü

Veritabanı, uygulamalarınızın en değerli varlığı olan verileri barındırır, bu yüzden güvenliği en üst düzeyde tutulmalıdır. Bir müşteri projesinde PostgreSQL veritabanının düzgün yapılandırılmamış connection pool’u yüzünden yetkisiz erişim riski oluştuğunu görmüştüm.

PostgreSQL özelinde, kullanıcı yetkilendirmelerini çok dikkatli yönetmek gerekiyor. Her uygulama veya servis için ayrı bir veritabanı kullanıcısı oluşturup, bu kullanıcılara sadece ihtiyaç duydukları tablolara ve operasyonlara erişim yetkisi vermek önemlidir. connection pool ayarlarını yaparken, maksimum bağlantı sayısını ve bağlantı bekleme sürelerini güvenlik ve performans dengesini gözeterek ayarlamak gerekir. Aşırıya kaçan bağlantı istekleri, bir DoS (Denial of Service) saldırısı olarak değerlendirilebilir.

Redis gibi bir in-memory veritabanı veya cache kullanıyorsanız, buradaki verilerin de güvende olduğundan emin olmalısınız. Redis’in requirepass özelliği ile parola koruması eklemek ve sadece güvenilen IP adreslerinden erişime izin vermek temel adımlardır. Ağ segmentasyonu sayesinde, Redis sunucusuna sadece uygulama sunucularının erişebilmesi, doğrudan dışarıdan gelecek saldırıları engeller.

# Redis yapılandırma dosyasında (redis.conf) örnek parola ayarı
requirepass sizin_güçlü_şifreniz
bind 127.0.0.1 192.168.1.100 # Sadece belirli IP'lerden erişime izin ver

Veri bütünlüğünü sağlamak için, file integrity monitoring (FIM) araçları kullanarak kritik veritabanı dosyalarında veya konfigürasyon dosyalarında beklenmedik değişiklikleri izlemek faydalıdır. Ayrıca, düzenli yedeklemeler yapmak ve bu yedekleri güvenli, izole bir ortamda saklamak, olası bir veri kaybı veya bozulma durumunda kurtarma şansınızı artırır. PostgreSQL’de logical replication veya physical replication gibi yöntemlerle okuma replikaları oluşturarak hem yükü dağıtırım hem de olası bir felakete karşı veri sürekliliğini sağlarım.

İzleme, Yedekleme ve Acil Durum Yönetimi

Güvenlik, sadece önlemler almakla bitmez; sürekli izleme, düzenli yedekleme ve acil durum planlaması da kritik bileşenlerdir. Sisteminiz ne kadar güvenli olursa olsun, her zaman bir şeylerin ters gitme ihtimali vardır.

Observability (gözlemlenebilirlik) prensiplerini uygulamak, sistemlerimde güvenlik açıklarını veya saldırı denemelerini erken aşamada tespit etmemi sağlıyor. Metrikler (CPU, bellek, disk I/O, ağ trafiği), loglar (uygulama logları, sistem logları, firewall logları) ve trace’ler (isteklerin sistem içindeki akışı) toplamak, bir olayın kök nedenini anlamak için vazgeçilmezdir. Anomali tabanlı izleme sistemleri kurarak, normal trafik paternlerinden sapmaları otomatik olarak algılayıp beni uyarmalarını sağlıyorum. Örneğin, belirli bir IP adresinden gelen anormal sayıda başarısız login denemesi veya yüksek veritabanı sorgu yükü, potansiyel bir saldırının işareti olabilir.

Acil durum yönetimi, bir güvenlik ihlali durumunda ne yapacağınızı belirleyen bir yol haritasıdır. Bu plan, ihlali tespit etme, izole etme, ortadan kaldırma, kurtarma ve gelecekteki benzer olayları önlemek için öğrenilen dersleri uygulama adımlarını içermelidir. Kendi sistemlerimde, bir ihlal durumunda ilk olarak hangi servisi durduracağımı, hangi logları kontrol edeceğimi ve yedeklerden nasıl döneceğimi içeren basit bir checklist’im var. CVE takibi ve yama yönetimi de bu sürecin bir parçasıdır; yeni çıkan zafiyetleri hızlıca değerlendirip sistemlerime yamasını yapmak, sürekli bir güvenlik duruşu sağlar.

Sonuç

Self-hosting, tam kontrolün cazibesini sunarken, beraberinde tam bir güvenlik sorumluluğu getirir. Bu sorumluluk, sadece bir firewall kurmaktan veya bir şifre belirlemekten çok daha fazlasını ifade eder; işletim sistemi çekirdeğinden uygulama koduna, ağ yapılandırmasından veritabanı ayarlarına kadar her katmanda sürekli bir uyanıklık ve proaktif önlemler gerektirir. Benim tecrübelerimde, bu süreçte yapılan her hata, bir sonraki adımda daha sağlam bir yapı kurmamı sağladı. Unutmayın, güvenlik tek seferlik bir işlem değil, sürekli devam eden bir yolculuktur. Kendi sistemlerinizin güvenliğini sağlamak, sadece sizin için değil, aynı zamanda sistemlerinizin etkileşimde olduğu tüm diğer unsurlar için de kritik öneme sahiptir.

Paylaş:

Bu yazı faydalı oldu mu?

Yükleniyor...

Bu yazı nasıldı?

Sıkça Sorulanlar

Bu makale ile ilgili okurların sorduğu yaygın sorular.

Self-hosting'i seçerken güvenlik sorumluluklarını nasıl yönetebiliriz?
Ben self-hosting'i seçerken, güvenlik sorumluluklarını yönetmek için birkaç şey yapıyorum. İlk olarak, sistemlerimi düzenli olarak güncelliyorum ve güvenlik yamalarını uyguluyorum. Ayrıca, güçlü parolalar ve iki faktörlü kimlik doğrulama kullanıyorum. Firewall kurallarını da sık sık kontrol ediyorum ve gereksiz hizmetleri kapatıyorum. Bu şekilde, sistemlerimi güvenliğini sağlamak için aktif olarak çalışıyorum.
Self-hosting'de en büyük güvenlik riski nedir?
Ben self-hosting'de en büyük güvenlik riskinin, yanlış yapılandırılmış bir firewall veya güncellenmemiş bir işletim sistemi olduğunu düşünüyorum. Bu tür hatalar, sisteminize erişim sağlamak için saldırganlara kolay bir yol sağlayabilir. Bu nedenle, sistemlerinizi düzenli olarak kontrol etmek ve güncellemek çok önemlidir.
Self-hosting için hangi araçları kullanmalıyım?
Ben self-hosting için, fail2ban gibi araçları kullanıyorum. Fail2ban, SSH'a yönelik başarısız giriş denemelerini engellemek için harika bir araç. Ayrıca, sistemlerinizi izlemek için监视 araçları da kullanıyorum. Bu araçlar, sistemlerinizin durumunu sürekli olarak izlememi sağlıyor ve olası güvenlik tehditlerini快速 bir şekilde tespit etmemi sağlıyor.
Self-hosting'de hata meydana geldiğinde ne yapmalıyım?
Ben self-hosting'de hata meydana geldiğinde, ilk olarak sakin kalmaya çalışıyorum. Sonra, hatanın kaynağını tespit ediyorum ve gerekli adımları takip ediyorum. Eğer hatasecurity ile ilgiliyse, sistemi derhal kapatıyorum ve güncellemeleri yapıyorum. Ayrıca, logları inceleyerek hatanın nedenini ve etkilerini belirlemeye çalışıyorum. Deneyimlerim, self-hosting'de hataların hızla ve etkili bir şekilde çözülmesi gerektiğini gösteriyor.
ME

Mustafa Erbay

Sistem Mimarisi · Network Uzmanı · Altyapı, Güvenlik ve Yazılım

2006'dan bu yana sistem mimarisi, network, sunucu altyapıları, büyük yapıların kurulumu, yazılım ve sistem güvenliği ekseninde çalışıyorum. Bu blogda sahada karşılığı olan teknik deneyimlerimi paylaşıyorum.

Kişisel Notlar

Bu notlar sadece sizde saklanır. Tarayıcınızda yerel olarak tutulur.

Hazır 0 karakter

Yorumlar

Sunucu Taraflı AI Moderasyon

Yorumlar sunucuda yapay zeka ile denetlenir ve kalıcı olarak saklanır.

?
0/2000

Sunucu taraflı AI denetim

✉️ Ücretsiz · Spam yok · İstediğin an çık

Yeni yazılardan haberdar olun

Yeni içerikler ve teknik notlar e-postanıza gelsin.

  • 📌
    Haftanın en iyisi Sadece okumaya değer tek yazı
  • 🔧
    Alet çantası Bu hafta kullandığım araçlar
  • 🧠
    Perde arkası Blog'a girmeyen notlar

Spam yapmıyoruz. İstediğiniz zaman ayrılabilirsiniz. · Sadece Umami (self-hosted, Google yok) ile takip.

Okuma İstatistikleriniz

0

Yazı Okundu

0dk

Okuma Süresi

0

Gün Serisi

-

Favori Kategori

İlgili Yazılar