Kısaca: Sunucu sıkılaştırma (server hardening), yeni kurulan bir Linux sunucuda varsayılan ayarları güvenli hale getirerek saldırı yüzeyini küçültmektir. Yeni bir VPS'te ilk gün yapılması gereken 10 adım şunlardır: sistemi güncellemek, otomatik güvenlik güncellemelerini açmak, sudo yetkili ayrı bir kullanıcı oluşturmak, SSH anahtarına geçmek, root ve parola ile girişi kapatmak, güvenlik duvarını açmak, Fail2ban kurmak, gereksiz servisleri kapatmak, yedeklemeyi kurmak ve izlemeyi başlatmak.
İnternete açılan yeni bir sunucu, kısa süre içinde otomatik tarayıcıların SSH ve parola denemeleriyle karşılaşır. Bu denemeler size özel değildir; internetteki her IP adresi düzenli olarak taranır. Bu yüzden sıkılaştırma "site yayına girince bakarız" denecek bir iş değil, sunucuya ilk bağlandığınız gün yapılacak bir rutindir. Aşağıdaki komutlar Ubuntu ve Debian içindir; diğer dağıtımlarda paket yöneticisi ve servis adları değişse de mantık aynıdır.
Varsayılan kurulumlar kolay kullanım için hazırlanır, güvenlik için değil: root ile parola girişi açık olabilir, güvenlik duvarı kapalı gelebilir, ihtiyacınız olmayan servisler dinlemede kalabilir. Sunucuya uygulama, veritabanı ve müşteri verisi yerleştikten sonra bu ayarları değiştirmek hem daha riskli hem daha zahmetlidir. İlk gün yapılan sıkılaştırma, sonraki her kurulumun güvenli bir zemin üzerinde yükselmesini sağlar.
Sıkılaştırmanın amacı sunucuyu "kırılamaz" yapmak değil; saldırganın işini zorlaştırmak, hataları erken fark etmek ve bir sorun yaşandığında hızla toparlanabilmektir. Bu yüzden aşağıdaki adımlar üç amaca hizmet eder: erişimi daraltmak (kullanıcı, SSH anahtarı, güvenlik duvarı), saldırı yüzeyini küçültmek (güncellemeler ve gereksiz servisler) ve görünürlük kazanmak (yedek, günlükler ve izleme).

İlk iş, kurulum imajından bu yana çıkmış güvenlik yamalarını yüklemektir: sudo apt update && sudo apt upgrade. Çekirdek güncellendiyse /var/run/reboot-required dosyası oluşur; bu durumda sunucuyu yeniden başlatın.
Ubuntu'da unattended-upgrades paketi varsayılan olarak kuruludur ve güvenlik güncellemelerini günde bir kez otomatik uygular. Paket yoksa sudo apt install unattended-upgrades ile kurabilir, ayarları sudo unattended-upgrade -v --dry-run ile deneyebilirsiniz. Ayrıntılar için Ubuntu otomatik güncelleme belgesine bakabilirsiniz.
Günlük işler için root yerine kendi kullanıcınızı kullanın: sudo adduser yonetici ve sudo usermod -aG sudo yonetici. Böylece yetkili komutlar kayıt altına alınır ve root parolası dolaşımda olmaz.
Kendi bilgisayarınızda ssh-keygen -t ed25519 ile bir anahtar çifti üretin ve ssh-copy-id yonetici@sunucu-ip ile açık anahtarı sunucuya kopyalayın. SSH bağlantısının temellerini SSH nedir, nasıl bağlanılır rehberimizde anlattık.
/etc/ssh/sshd_config dosyasında PermitRootLogin no ve PasswordAuthentication no ayarlarını yapın. Bulut imajlarında /etc/ssh/sshd_config.d/ altındaki bir dosya bu ayarı ezebilir; geçerli değeri sudo sshd -T | grep -i passwordauthentication ile kontrol edin. Söz dizimini sudo sshd -t ile doğrulayıp sudo systemctl reload ssh çalıştırın. Mevcut oturumu kapatmadan önce yeni bir pencerede anahtarla giriş yapabildiğinizi mutlaka test edin.
UFW ile gelen trafiği varsayılan olarak reddedip yalnızca gerekenlere izin verin: sudo ufw default deny incoming, sudo ufw allow OpenSSH, web sunucusu varsa sudo ufw allow 80,443/tcp, ardından sudo ufw enable. SSH izni vermeden güvenlik duvarını açarsanız kendinizi dışarıda bırakırsınız. Kavramın arka planı için firewall nedir yazımıza göz atın.
sudo apt install fail2ban ile kurun, /etc/fail2ban/jail.local dosyasında [sshd] bölümüne enabled = true ekleyin ve servisi yeniden başlatın. Engellenen IP'leri sudo fail2ban-client status sshd ile görebilirsiniz. Günlükleri yalnızca journald'da tutan sistemlerde (örneğin Debian 12) aynı bölüme backend = systemd eklemeniz gerekir.
sudo ss -tulpn komutu dinlemedeki tüm portları ve süreçleri listeler. Kullanmadığınız servisleri sudo systemctl disable --now servis-adi ile kapatın. Veritabanı gibi yalnızca sunucunun kendisinin erişmesi gereken servisler 127.0.0.1 adresini dinlemeli, internete açık olmamalıdır.
Sıkılaştırma saldırı riskini azaltır ama sıfırlamaz; hatalı bir güncelleme veya silinen bir dosya da veri kaybı demektir. Yedeklerin en az bir kopyası sunucunun dışında durmalı ve geri yükleme düzenli olarak denenmelidir. Doğru stratejiyi web sitesi yedeklemenin önemi rehberimizde bulabilirsiniz.
Başarısız giriş denemelerini journalctl -u ssh --since today ile, saat senkronizasyonunu timedatectl ile kontrol edin; doğru saat, günlüklerin karşılaştırılabilmesi için şarttır. CPU, RAM ve disk kullanımındaki ani artışlar da çoğu zaman bir sorunun ilk işaretidir; bunları sunucu kaynak kullanımı nasıl izlenir yazımızdaki yöntemlerle takip edebilirsiniz.
sshd -T çıktısı)?Bu listeyi yeni sunucu kurulumlarınızda standart hale getirin ve ayda bir gözden geçirin. Sunucu yönetimiyle hiç uğraşmak istemiyorsanız, paylaşımlı web hostingde işletim sistemi güncellemeleri, güvenlik duvarı ve sunucu bakımı hosting sağlayıcısının sorumluluğundadır; siz yalnızca sitenize odaklanırsınız. Seçenekleri web hosting paketlerimizde inceleyebilirsiniz.
Bu yazıdaki 10 adım, komutlara aşina biri için yeni bir sunucuda genellikle bir iki saat içinde tamamlanır. Asıl iş, ayarları sonradan da korumak ve düzenli kontrol etmektir.
Tek başına sağlamaz. Port değiştirmek otomatik tarayıcıların ürettiği günlük gürültüsünü azaltır, ancak gerçek koruma SSH anahtarı, kapalı parola girişi, güvenlik duvarı ve Fail2ban'dan gelir.
Sudo yetkili kullanıcınız ve çalışan bir SSH anahtarınız varsa hayır. Ayarı değiştirmeden önce yeni bir pencerede bu kullanıcıyla giriş yapabildiğinizi test edin ve mevcut oturumu açık tutun.
Güvenlik güncellemelerinin bozma riski düşüktür ve güncellememe riski genellikle daha yüksektir. Kritik bir uygulamanız varsa belirli paketleri otomatik güncellemenin dışında bırakabilirsiniz.