Sunucu Güvenliği: Linux Sunucuda Temel Sıkılaştırma

İnternete açık her sunucu, açılır açılmaz otomatik saldırı denemeleriyle karşılaşır. Linux sunucunuzu korumak için uygulanması gereken temel sıkılaştırma adımlarını anlattım.

İçindekiler
  1. Sunucu güvenliği neden ayrı bir iş?
  2. SSH erişimini sıkılaştırmak
  3. Güvenlik duvarı ve açık portlar
  4. Güncellemeler ve yazılım envanteri
  5. Yetkiler, kullanıcılar ve gizli bilgiler
  6. Log takibi ve uygulama katmanı
  7. Bu işi nasıl birlikte yaparız?
  8. Sık sorulan sorular
  9. Sonuç

Yeni bir sunucu açıp birkaç saat sonra giriş kayıtlarına baktığınızda, dünyanın dört bir yanından gelen yüzlerce başarısız oturum açma denemesi görmeniz şaşırtıcı değildir. Bunlar size özel saldırılar değil; interneti tarayan otomatik botlardır. Ancak zayıf bir şifre ya da güncellenmemiş bir paket bulduklarında sonuç ciddi olabilir. Bu yazıda sunucu güvenliği için bir Linux sunucuda uyguladığım temel sıkılaştırma adımlarını, nedenleriyle birlikte anlatıyorum.

Sunucu güvenliği neden ayrı bir iş?

Web sitenizin güvenliği yalnızca kullandığınız yazılıma bağlı değildir. Uygulama ne kadar sağlam yazılmış olursa olsun, üzerinde çalıştığı sunucu açık bırakılmışsa saldırgan oradan içeri girebilir. Bir binanın dairelerine çelik kapı takıp ana giriş kapısını açık bırakmaya benzer.

Paylaşımlı hostingde bu katmanı sağlayıcı yönetir. VPS veya bulut sunucuda ise sorumluluk büyük ölçüde sizdedir. Sunucuyu ilk kez kuruyorsanız önce sunucu kurulumu kontrol listesine göz atmanızı, ardından bu yazıdaki adımlarla sıkılaştırmayı tamamlamanızı öneririm.

SSH erişimini sıkılaştırmak

SSH, sunucuya uzaktan bağlanmanın kapısıdır ve saldırıların büyük kısmı buraya yönelir. Bu kapıyı daraltmak, en etkili ilk adımdır.

  • Şifre yerine anahtar kullanın: SSH anahtarları tahmin edilemez; şifreyle girişi tamamen kapatmak kaba kuvvet saldırılarını etkisiz kılar.
  • Doğrudan root girişini kapatın: Yönetici işlemleri, yetkili bir kullanıcı üzerinden gerektiğinde yapılmalıdır.
  • Erişimi sınırlayın: Mümkünse SSH’e yalnızca belirli IP adreslerinden veya bir VPN üzerinden izin verin.
  • Başarısız denemeleri engelleyin: Fail2ban gibi araçlar, art arda hatalı giriş yapan adresleri geçici olarak yasaklar.

SSH ayar dosyasında bu kararların karşılığı birkaç satırdan ibarettir:

PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3

Bu değişikliği yapmadan önce anahtarla girişin çalıştığını mutlaka ayrı bir oturumda test edin. Aksi halde kendinizi sunucunun dışında bırakabilirsiniz; bu, en sık yapılan ve en can sıkıcı hatalardan biridir.

Güvenlik duvarı ve açık portlar

Bir sunucuda dışarıya açık her port, potansiyel bir giriş noktasıdır. Temel kural basittir: ihtiyaç duyulmayan hiçbir port açık kalmamalıdır.

Servis Dışarıya açık olmalı mı? Not
HTTP / HTTPS Evet Web trafiği için gerekli
SSH Kısıtlı olarak Mümkünse belirli IP’lere
Veritabanı Hayır Yalnızca sunucu içinden erişilmeli
Önbellek servisleri Hayır İnternete açık kalması ciddi risktir
Uygulama portları Hayır Reverse proxy arkasında kalmalı

Docker kullanıyorsanız dikkatli olun: Docker’ın port yönlendirmesi bazı durumlarda sunucunun güvenlik duvarı kurallarını atlayabilir. Bu yüzden kapsayıcı portlarını yalnızca yerel adrese bağlamak ve dışarıya kapalı olduklarını harici bir taramayla doğrulamak gerekir.

Güncellemeler ve yazılım envanteri

Bilinen güvenlik açıkları için yamalar genellikle hızla yayınlanır; sorun, bu yamaların uygulanmamasıdır. Sunucu güvenliği açısından güncelleme disiplini şöyle olmalıdır:

  1. İşletim sistemi güvenlik güncellemelerinin otomatik uygulanmasını sağlayın.
  2. Büyük sürüm geçişlerini önce test ortamında deneyin.
  3. Kullanılmayan paketleri ve servisleri kaldırın; çalışmayan yazılım saldırı yüzeyi oluşturmaz.
  4. Web sunucusu, veritabanı ve dil sürümlerinin desteklenen sürümler olduğunu düzenli kontrol edin.
  5. Docker imajlarını da periyodik olarak güncel sürümlerle yeniden oluşturun.

Yetkiler, kullanıcılar ve gizli bilgiler

“En az yetki” ilkesi, sunucu güvenliğinin temel taşlarındandır. Her kullanıcı ve her servis, yalnızca işini yapmaya yetecek kadar yetkiye sahip olmalıdır.

  • Web uygulaması root olarak değil, kendi sınırlı kullanıcısıyla çalışmalıdır.
  • Veritabanı kullanıcısı yalnızca ilgili veritabanına erişebilmelidir.
  • Dosya izinleri, yüklenen dosyaların çalıştırılamayacağı şekilde ayarlanmalıdır.
  • Ayrılan çalışanların veya işi biten geliştiricilerin erişim anahtarları hemen kaldırılmalıdır.
  • API anahtarları ve şifreler koda değil, erişimi kısıtlı ortam değişkenlerine yazılmalıdır.

Örnek senaryo

Bir işletmenin sitesini yıllar önce bir geliştirici kurmuş, sonra iş ilişkisi bitmiş. Sunucuda o geliştiricinin SSH anahtarı, eski bir test veritabanı ve kimsenin hatırlamadığı bir yönetim aracı hâlâ duruyor. Bu tablo oldukça yaygındır. Basit bir erişim ve servis envanteri çıkarmak, çoğu zaman en büyük riskleri birkaç saat içinde ortaya koyar.

Log takibi ve uygulama katmanı

Kayıtların sunucu dışına da gönderilmesi önemlidir. Sunucuya sızan biri ilk iş olarak izlerini silmeye çalışır; kayıtların bir kopyası başka bir yerde duruyorsa ne olduğunu sonradan anlamak mümkün olur. Küçük işletmeler için bile basit bir günlük özet e-postası, olağandışı durumları erken fark etmeyi sağlar.

Sıkılaştırma bir kez yapılıp unutulacak bir iş değildir. Neler olduğunu görebilmeniz için kayıtların tutulması ve gözden geçirilmesi gerekir. Giriş denemeleri, web sunucusu hataları ve beklenmedik kaynak artışları çoğu zaman bir sorunun ilk işaretidir.

Sunucu katmanı kadar uygulama katmanı da önemlidir. WordPress kullanıyorsanız eklenti ve tema güncellemeleri, yönetici hesapları ve dosya izinleri ayrı bir dikkat ister; bunları WordPress güvenliği yazısında ele aldım. Sunucunun önüne Cloudflare gibi bir katman koymak da kötü niyetli trafiği sunucuya ulaşmadan filtrelemeye yardımcı olur.

Son olarak, hiçbir güvenlik önlemi yüzde yüz koruma sağlamaz. Bu yüzden sunucu dışında saklanan, düzenli alınan ve geri yüklemesi test edilmiş yedekler, güvenlik planının vazgeçilmez parçasıdır.

Bu işi nasıl birlikte yaparız?

Mevcut sunucunuzun güvenlik durumunu öğrenmek veya yeni bir sunucuyu baştan sağlam kurmak istiyorsanız birlikte şöyle ilerleriz:

  1. Mevcut durum taraması: Açık portları, kullanıcıları, SSH ayarlarını, yazılım sürümlerini ve yedek durumunu incelerim.
  2. Bulgular ve teklif: Riskleri önem sırasına göre listeleyen kısa bir rapor ve hangi adımların yapılacağını içeren bir teklif sunarım.
  3. Sıkılaştırma ve doğrulama: Değişiklikleri hizmeti kesintiye uğratmadan uygular, dış taramayla sonuçları doğrularım.
  4. Teslim ve takip: Yapılanları belgeler, erişim bilgilerini size teslim eder; isterseniz düzenli güncelleme ve log kontrolünü üstlenirim.

Sunucunuzu birlikte gözden geçirmek için bana ulaşabilirsiniz.

Sık sorulan sorular

Sunucu güvenliği için antivirüs gerekli mi?

Linux sunucularda masaüstü bilgisayarlardaki gibi bir antivirüs yerine; güncel yazılım, sıkı erişim kontrolü, güvenlik duvarı ve log takibi çok daha etkilidir. Kullanıcıların dosya yüklediği sistemlerde ayrıca dosya taraması eklenebilir.

SSH portunu değiştirmek güvenliği artırır mı?

Otomatik taramalardan gelen gürültüyü azaltır ama tek başına bir güvenlik önlemi değildir. Asıl korumayı anahtarla giriş, root girişinin kapatılması ve erişim kısıtlaması sağlar.

Sunucumun saldırıya uğradığını nasıl anlarım?

Beklenmedik işlemci kullanımı, tanımadığınız kullanıcılar veya süreçler, değişmiş dosyalar ve sitenizde istemediğiniz yönlendirmeler başlıca işaretlerdir. Şüphe durumunda sunucuyu ağdan ayırıp uzman desteği almak gerekir.

Sıkılaştırma bir kez yapılınca yeterli olur mu?

Hayır. Yeni açıklar ortaya çıktıkça güncelleme, erişim gözden geçirme ve log kontrolü düzenli tekrarlanmalıdır.

Sonuç

Sunucu güvenliği; SSH’in daraltılması, gereksiz portların kapatılması, güncellemelerin düzenli uygulanması, yetkilerin sınırlandırılması ve kayıtların izlenmesiyle sağlanır. Bu adımları kendi sunucunuzda uygulamak için destek isterseniz iletişim sayfasından yazabilirsiniz.