İçindekiler
- 1 VPS Güvenlik Sertleştirme Neden Bu Kadar Önemli?
- 2 VPS Güvenlik Sertleştirme Kontrol Listesi: Büyük Resim
- 3 sshd_config ile SSH Erişimini Sertleştirmek
- 4 Root Erişimini Kapatmak ve Sağlıklı Yetki Modeli Kurmak
- 5 fail2ban ile Brute-Force Saldırılarını Otomatik Bloklamak
- 6 Otomatik Güvenlik Güncellemeleri: Yamalar Gecikmesin
- 7 Ek Kontroller: Güvenlik Duvarı, Loglar ve Yedekler
- 8 DCHost Üzerinde Bu Kontrol Listesini Nasıl Uygularsınız?
- 9 Sonuç ve Önerilen Yol Haritası
VPS Güvenlik Sertleştirme Neden Bu Kadar Önemli?
Bir VPS satın alıp ilk SSH bağlantısını yaptığınız anda aslında sadece kendi projenize değil, tüm ağa karşı da bir sorumluluk almış oluyorsunuz. Güvenlik tarafında ufak bir ihmal; spam gönderen, DDoS saldırılarına katılan ya da veritabanı sızdıran bir sunucuya dönüşmenize yol açabiliyor. DCHost ekibi olarak yaptığımız güvenlik denetimlerinde, ihlal yaşamış sunucuların çok büyük kısmında aynı temel eksikleri görüyoruz: varsayılan SSH ayarları, kapatılmamış root erişimi, aktif ama yapılandırılmamış fail2ban ve çalışmayan otomatik güvenlik güncellemeleri.
Bu yazıda, pratik bir VPS güvenlik sertleştirme kontrol listesi üzerinden ilerleyeceğiz. Odakta özellikle şu adımlar var: sshd_config sertleştirmesi, root erişimini kapatmak, fail2ban ile brute-force saldırılarını sınırlamak ve otomatik güvenlik güncellemelerini doğru kurmak. Adımların her biri tek başına basit görünebilir; fakat birlikte uygulandığında hem küçük projeler hem de yoğun trafikli uygulamalar için oldukça sağlam bir temel güvenlik katmanı sağlar. Ayrıca, DCHost üzerinde yeni açtığınız ya da mevcutta çalışan VPS/dedicated sunucularınıza bu kontrol listesini nasıl uygulayabileceğinizi de adım adım örneklendireceğiz.
VPS Güvenlik Sertleştirme Kontrol Listesi: Büyük Resim
Detay ayarlara inmeden önce, sağlam bir VPS için olması gereken temel güvenlik adımlarını netleştirelim. Aşağıdaki listeyi, hem yeni bir VPS kurarken hem de mevcut bir sunucuyu denetlerken checklist olarak kullanabilirsiniz:
- İşletim sistemini ve paketleri güncellemek (özellikle güvenlik güncellemeleri)
- sshd_config dosyasını sertleştirmek (port, kimlik doğrulama, root erişimi vb.)
- Doğrudan root girişi yerine yetkili bir kullanıcı + sudo modeli kurmak
- Parola ile SSH girişini kapatıp sadece SSH anahtarları ile bağlanmak
- fail2ban veya benzeri bir mekanizma ile brute-force saldırılarını sınırlamak
- Güvenlik duvarı (ufw, firewalld, iptables/nftables) ile sadece gereken portları açmak
- Dağıtıma uygun otomatik güvenlik güncellemelerini etkinleştirmek
- Log döngüsü ve disk takibi ile beklenmedik dolmaları engellemek
- Düzenli ve test edilmiş yedekleme stratejisi (en az 3-2-1 yaklaşımına yakın bir yapı)
Bu yazıda odak daha çok SSH, root, fail2ban ve güncellemeler üzerinde olacak. Güvenlik duvarı tarafında detay arıyorsanız, DCHost blogda yayınladığımız VPS sunucularda güvenlik duvarı yapılandırma rehberini mutlaka gözden geçirmenizi öneririz.
sshd_config ile SSH Erişimini Sertleştirmek
VPS’inize ilk dokunduğunuz yer neredeyse her zaman SSH olur. Dolayısıyla saldırganların ilk denediği kapı da burasıdır. Varsayılan ayarlarla bırakılan SSH servisi; deneme-yanılma brute-force saldırılarına, kimlik doğrulama hatalarına ve yanlışlıkla açık bırakılmış özelliklere davetiye çıkarır. İyi yapılandırılmış bir sshd_config dosyası ise saldırgan için maliyeti anında yükseltir.
Temel sshd_config Sertleştirme Parametreleri
Önce birkaç temel parametreye bakalım. Çoğu Debian/Ubuntu tabanlı sistemde yapılandırma dosyası /etc/ssh/sshd_config konumundadır (yeni sürümlerde sshd_config.d/ dizini de kullanılabilir).
# Protokol ve temel ayarlar
Protocol 2
Port 22
AddressFamily inet
ListenAddress 0.0.0.0
# Root login ve parola ayarları
PermitRootLogin no
PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM yes
# Kimlik doğrulama denemeleri
MaxAuthTries 3
LoginGraceTime 20
# Boştaki bağlantıları düşürme
ClientAliveInterval 300
ClientAliveCountMax 2
Bu iskelet yapılandırma, çoğu küçük ve orta ölçekli projede gayet sağlıklı bir başlangıçtır. Öne çıkan noktalar:
- Protocol 2: Güncel sistemlerde zaten varsayılan, ama eski alışkanlıklar yüzünden hâlâ belirtilmesinde fayda var.
- PermitRootLogin no: Root hesabıyla direkt girişleri tamamen kapatır (detayını aşağıda ayrı başlıkta açacağız).
- PasswordAuthentication no: Parola ile girişleri iptal eder, sadece SSH anahtarıyla bağlantıya izin verir.
- MaxAuthTries 3: Yanlış parola/anahtar denemesini sınırlayarak brute-force saldırılarında hızla bağlantının kesilmesini sağlar.
SSH Portunu Değiştirmek: Güvenlik mi, Gürültü Azaltma mı?
Güvenlik camiasında sık tartışılan bir başlık: SSH portunu değiştirmek. Gerçekçi olmak gerekirse, sadece portu değiştirmek size tam anlamıyla ek bir güvenlik katmanı kazandırmaz; ama otomatik taramaların ve amatör brute-force denemelerinin önemli bir kısmını elemiş olursunuz. Bu da log gürültüsünü ve fail2ban yükünü azaltır.
Örneğin 22 yerine 2222 gibi bir port kullanmak istiyorsanız:
Port 2222
Portu değiştirmeden önce:
- Güvenlik duvarınızda yeni portu açın.
- Eski bağlantıyı kapatmadan yeni bir terminal sekmesinde yeni porttan test edin.
- Sunucu üzerinde çalışan güvenlik araçlarınızın (örn. fail2ban) konfigürasyonunu yeni porta göre güncelleyin.
AllowUsers / AllowGroups ile Erişimi Daraltmak
SSH’a bağlanabilen kullanıcıları sınırlandırmak, özellikle birden fazla sistem kullanıcısının olduğu VPS’lerde kritik önem taşır. AllowUsers ve AllowGroups direktifleri ile sadece belirli hesapların giriş yapabilmesini sağlayabilirsiniz.
# Sadece belirli kullanıcılar SSH ile giriş yapabilsin
AllowUsers admin deploy
# Ya da bir grup üzerinden sınırlandırma
AllowGroups sshusers
Bu yaklaşım, yanlışlıkla şifre atanmış ancak hiç kullanılmayan sistem hesaplarının dışarıya açık bir saldırı yüzeyine dönüşmesini engeller. Ekipli çalışıyorsanız, DCHost blogda detaylarını anlattığımız SSH anahtar yönetimi ve yetki paylaşımı rehberi ile bu ayarları birleştirmenizi öneririz.
SSH Anahtarı Zorunlu Kılmak
Parola ile SSH erişimi, özellikle sızdırılmış parolalar ve parola tekrar kullanım alışkanlıkları yüzünden bugün pratikte kabul edilmiyor. Yapmanız gereken net adım: PasswordAuthentication no ile parolayı tamamen devre dışı bırakmak ve her kullanıcı için birer SSH anahtarı tanımlamak.
Özet adımlar:
- İstemci tarafında
ssh-keygen -t ed25519ile anahtar çifti üretin. - Oluşan
~/.ssh/id_ed25519.pubiçeriğini sunucudaki ilgili kullanıcının~/.ssh/authorized_keysdosyasına ekleyin. - Sunucuda
chmod 700 ~/.sshvechmod 600 ~/.ssh/authorized_keysizinlerini doğrulayın. - Son olarak
PasswordAuthentication noayarını aktif edip SSH servisini yeniden başlatın.
Bu noktada hem brute-force hem de parola sızıntısı riskini ciddi ölçüde azaltmış olursunuz.
Root Erişimini Kapatmak ve Sağlıklı Yetki Modeli Kurmak
Birçok ihlal incelemesinde gördüğümüz klasik senaryo: root hesabına doğrudan SSH erişimi açık, parola ile giriş aktif ve parola çoğu zaman zayıf veya tekrar kullanılan türden. Bu kombinasyon, saldırgan açısından “en sevilen” hedeftir. Sağlıklı model; doğrudan root yerine, yetkili kullanıcı + sudo kullanmaktır.
Adım 1: Yetkili Bir Admin Kullanıcı Oluşturmak
Önce, root’a eşdeğer yönetim yapabileceğiniz ama doğrudan root olmayan bir kullanıcı açın:
adduser admin
usermod -aG sudo admin # Debian/Ubuntu
# veya
usermod -aG wheel admin # RHEL/AlmaLinux/Rocky Linux
Admin kullanıcınıza SSH anahtarını tanımladıktan sonra, root ile açık olan terminali kapatmadan ssh admin@sunucu-ip ile giriş yapmayı mutlaka test edin.
Adım 2: sudo Yetkilerini İnce Ayar Yapmak
Birçok dağıtımda sudoers dosyası zaten makul varsayılanlarla gelir; yine de en azından şu iki noktayı gözden geçirmekte fayda var:
visudo
# Örneğin sadece admin kullanıcısına tam yetki vermek için:
admin ALL=(ALL:ALL) ALL
Güvenlik seviyesi daha yüksek ortamlarda her kullanıcıya tam yetki vermek yerine, belirli komutları NOPASSWD ile, diğerlerini ise parola zorunlu olacak şekilde tanımlamak mümkündür. Örneğin deployment kullanıcısının sadece belirli servisleri yönetebilmesini isteyebilirsiniz.
Adım 3: Root SSH Erişimini Kapatmak
Admin kullanıcınızla SSH erişimi netleştikten sonra, artık en kritik adımı atabilirsiniz. sshd_config içinde:
PermitRootLogin no
satırını aktif edin ve SSH servisini yeniden başlatın:
systemctl restart ssh # Debian/Ubuntu
systemctl restart sshd # RHEL/AlmaLinux/Rocky Linux
Bundan sonra root hesabına sadece sudo su - veya sudo -i ile geçebilirsiniz. Böylece:
- Root parolasının sızması halinde bile doğrudan SSH erişimi mümkün olmaz.
- Kim hangi komutları hangi kullanıcıyla çalıştırmış,
/var/log/auth.logüzerinden çok daha net takip edilir.
Bu adımı, DCHost blogda anlattığımız yeni VPS’te ilk 24 saat rehberi ile birlikte uyguladığınızda, ilk günden itibaren oldukça sağlam bir temel kurmuş olursunuz.
fail2ban ile Brute-Force Saldırılarını Otomatik Bloklamak
SSH ayarlarınızı sertleştirdiniz, parola erişimini kapattınız, root girişini yasakladınız. Yine de internetten sürekli taranan bir IP adresine sahip olduğunuz için loglarınızda hâlâ başarısız giriş denemeleri göreceksiniz. İşte burada devreye fail2ban giriyor.
fail2ban Nasıl Çalışır?
fail2ban, belirli log dosyalarını izleyip şüpheli davranışları (örneğin art arda başarısız SSH giriş denemeleri) tespit ettiğinde, ilgili IP adresini geçici olarak yasaklayan bir servistir. Genellikle şu bileşenlerle birlikte çalışır:
- İzlenen log dosyası: Örn.
/var/log/auth.logveya/var/log/secure - Filtre kuralları (filter.d): Log satırlarını Regex ile eşleyen dosyalar
- Jail tanımları (jail.conf / jail.local): Hangi kuralların hangi servis için, hangi eşiklerde uygulanacağını belirler
- Güvenlik duvarı entegrasyonu: ufw, iptables veya nftables üzerinden IP bloklama
SSH İçin Basit Bir fail2ban Jail Örneği
Ubuntu/Debian için tipik kurulum:
apt update
apt install fail2ban
Ardından, varsayılan dosyalara dokunmak yerine bir /etc/fail2ban/jail.local oluşturmak iyi pratiktir:
[sshd]
enabled = true
port = ssh
filter = sshd
logpath = /var/log/auth.log
maxretry = 5
findtime = 600
bantime = 3600
Bu yapılandırma ile:
- 10 dakika içinde 5’ten fazla başarısız giriş denemesi yapan IP,
- 1 saat boyunca otomatik olarak yasaklanır.
SSH portunuzu değiştirdiyseniz port = 2222 gibi güncellemeyi unutmayın. Ayrıca güvenlik duvarınızı daha detaylı yönetmek istiyorsanız, nftables ile VPS güvenlik duvarı rehberi ile birlikte kullanmak oldukça etkilidir.
Yanlış Pozitifler ve Beyaz Liste Yönetimi
Özellikle küçük ekiplerde, geliştiricilerin yanlış anahtar kullanması veya VPN değişimi nedeniyle kendi IP’lerini engellemesi sık görülen bir durumdur. Bu yüzden ignoreip direktifini kullanarak ofis IP’lerinizi veya VPN ağınızı beyaz listeye almanız mantıklıdır:
[DEFAULT]
ignoreip = 127.0.0.1 10.0.0.0/24 1.2.3.4
Ayrıca, üretim ortamında bantime süresini çok uzun tutmak yerine, ihlal şiddetine göre artırmak daha faydalı olur. Örneğin ilk ihlalde 1 saat, tekrar eden IP’ler için 1 gün gibi artan cezalar tanımlayabilirsiniz.
Otomatik Güvenlik Güncellemeleri: Yamalar Gecikmesin
Bugün birçok ihlal, aslında aylar önce yamalanmış güvenlik açıkları yüzünden yaşanıyor. Yani sorun çoğu zaman “bilinmeyen sıfırıncı gün açıkları” değil, uygulanmamış yamalar. Bu yüzden otomatik güvenlik güncellemeleri kritik bir savunma katmanı.
Ubuntu/Debian: unattended-upgrades ile Güvenlik Güncellemeleri
Debian ve Ubuntu tabanlı sistemlerde unattended-upgrades paketi, özellikle güvenlik güncellemelerini otomatik kurmak için ideal çözümdür.
apt update
apt install unattended-upgrades apt-listchanges
Ardından temel yapılandırma için:
dpkg-reconfigure unattended-upgrades
Bu sihirbaz, güvenlik güncellemelerinin otomatik kurulmasını tek adımda etkinleştirir. Detaylı ayarlar için /etc/apt/apt.conf.d/50unattended-upgrades dosyasını gözden geçirin:
Unattended-Upgrade::Origins-Pattern {
"origin=Ubuntu,codename=${distro_codename},label=Ubuntu-Security";
};
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:30";
Burada kritik olan; otomatik reboot gerektiren güncellemelerin hangi saat aralığında uygulanacağına bilinçli karar vermektir. Trafiğinizin düşük olduğu saatleri tercih edin ve öncesinde mutlaka yedekleme stratejinizi netleştirin. Yedek tarafını daha derin ele almak isterseniz, 3-2-1 yedekleme stratejisi rehberimize göz atabilirsiniz.
RHEL/AlmaLinux/Rocky Linux: dnf-automatic ile Güncellemeler
RHEL ailesinde ise dnf-automatic benzer işi görür:
dnf install dnf-automatic
Sonra /etc/dnf/automatic.conf dosyasını düzenleyin:
[commands]
upgrade_type = security
random_sleep = 0
[emitters]
email_from = root@sunucu
email_to = [email protected]
[base]
automatic_install = yes
Ve zamanlayıcıyı etkinleştirin:
systemctl enable --now dnf-automatic.timer
Üretim ortamlarında genellikle sadece güvenlik güncellemelerini otomatikleştirmek, büyük versiyon geçişlerini ise kontrollü bakım pencerelerine bırakmak daha sağlıklı bir stratejidir.
Otomatik Güncelleme Riskleri Nasıl Yönetilir?
“Her şeyi otomatiğe bağlayalım” yaklaşımı kulağa hoş gelse de, özellikle karmaşık stack’lerde beklenmedik uyumsuzluklara yol açabilir. Bu riski azaltmak için:
- Otomatik güncellemeyi sadece güvenlik yamaları ile sınırlayın.
- Çekirdek/güvenlik bileşenleri için önce staging veya test VPS’inde deneme yapın.
- Güncelleme öncesi ve sonrası için basit sağlık kontrolleri (ör. HTTP 200 durumu) tanımlayın.
- Güncelleme sonrası oluşabilecek performans sorunlarını yakalamak için VPS kaynak kullanımı izleme rehberimizde anlattığımız gibi temel metrikleri takip edin.
Ek Kontroller: Güvenlik Duvarı, Loglar ve Yedekler
sshd_config, root erişimi, fail2ban ve otomatik güncellemeler, VPS güvenliğinin omurgasıdır. Ancak bu omurgayı destekleyecek birkaç önemli katman daha var.
Güvenlik Duvarı ile Saldırı Yüzeyini Küçültmek
Temel prensip: İnternete açık port sayısı ne kadar azsa, saldırı yüzeyiniz de o kadar küçüktür. VPS üzerinde çoğu zaman sadece aşağıdaki portların açık olması yeterlidir:
- SSH (örn. 22 veya alternatif port)
- HTTP (80) ve HTTPS (443)
- Gerçekten ihtiyaç duyulan özel servis portları (ör. 3306 sadece iç ağa açık gibi)
Detaylı örnekler ve ufw/firewalld/iptables karşılaştırması için VPS güvenlik duvarı yapılandırma rehberini kullanabilirsiniz.
Log Yönetimi ve Disk Dolmasını Önlemek
Güvenlik önlemleri arttıkça log hacmi de artar. Bu iyi bir şeydir; ancak yönetilmezse disk dolması gibi kritik sorunlara yol açabilir. Log dosyalarınızın sağlıklı döndürülmesi ve eski logların sıkıştırılarak saklanması için logrotate yapılandırmasının düzgün olduğundan emin olun.
Bu konuda pratik bir yol haritası arıyorsanız, DCHost blogdaki VPS disk kullanımı ve logrotate ayarları rehberi size adım adım yol gösterecektir.
Yedekleme: Güvenlik Açığı Kadar Hata Payınızı da Düşürür
Güvenlik sertleştirme, saldırı ihtimalini azaltır; ancak hiçbir önlem %100 değildir. Yanlış bir komutla sshd_config dosyasını bozmanız veya hatalı bir firewall kuralıyla kendinizi kilitlemeniz de mümkündür. Bu yüzden düzenli VPS snapshotları ve harici depolamaya alınan dosya/veritabanı yedekleri, güvenlik kadar operasyonel hata riskini de minimize eder.
DCHost Üzerinde Bu Kontrol Listesini Nasıl Uygularsınız?
DCHost olarak sunduğumuz VPS ve dedicated sunucu hizmetlerinde, bu yazıda bahsettiğimiz adımların çoğu varsayılan kurulumlarda uygulanmaya hazır halde gelir; ancak her projenin ihtiyacı farklı olduğu için, müşterilerimizin büyük kısmı bu ayarları kendi süreçlerine göre özelleştiriyor.
Genel yaklaşımımız şöyle:
- Yeni bir VPS açtığınızda, ilk iş olarak işletim sistemini güncellemeniz ve SSH anahtarlarınızı tanımlamanız için dokümantasyon ve rehberler sunuyoruz.
- İsteyen müşteriler için yönetilen hizmet kapsamında, sshd_config sertleştirme, fail2ban kurulumu ve otomatik güvenlik güncellemelerini standartlaştırılmış profillerle uygulayabiliyoruz.
- Yüksek erişilebilirlik veya çok sunuculu mimariler kuruyorsanız, VPS üzerinde veritabanı replikasyon rehberimiz gibi yazılarla ağ ve veri katmanında da güvenli ve ölçeklenebilir çözümler planlamanıza yardımcı oluyoruz.
Eğer mevcut DCHost VPS’inizde bu kontrol listesini uygularken takıldığınız bir nokta olursa, destek talebi açarak konfigürasyonunuza özel öneri de isteyebilirsiniz.
Sonuç ve Önerilen Yol Haritası
VPS güvenliği, tek bir “sihirli ayar” ile çözülen bir mesele değil. Ancak bu yazıda ele aldığımız dört temel başlık; sshd_config sertleştirme, root erişimini kapatma, fail2ban ile brute-force koruması ve otomatik güvenlik güncellemeleri, küçük-büyük fark etmeksizin neredeyse her Linux VPS için vazgeçilmez bir çekirdek oluşturuyor.
Pratik bir yol haritası isterseniz:
- Önce güncellemeleri yapın ve SSH anahtarlarınızı tanımlayın.
- Ardından admin kullanıcınızı oluşturup root girişini kademeli olarak kapatın.
- sshd_config ayarlarınızı (port, kimlik doğrulama, AllowUsers) sertleştirin.
- fail2ban veya benzeri bir mekanizma ile SSH ve kritik servisleri brute-force saldırılarına karşı koruyun.
- Dağıtımınıza uygun otomatik güvenlik güncellemelerini devreye alın, log ve yedek stratejinizi netleştirin.
Bu adımları tamamladığınızda, DCHost üzerinde çalışan VPS veya dedicated sunucunuz; hem dış saldırılara hem de içerden gelebilecek hatalı kullanımlara karşı çok daha dirençli hale gelir. İlerleyen aşamada WAF, CDN, merkezi loglama, gelişmiş izleme gibi katmanlarla güvenlik mimarinizi genişletmek isterseniz, blogumuzdaki VPS sunucu güvenliği ve diğer güvenlik odaklı yazılarımız üzerinden adım adım ilerleyebilirsiniz.
