VPS (Virtual Private Server), fiziksel bir sunucunun sanallaştırma ile bölünmüş, size ait kök (root) yetkili bir dilimidir. Paylaşımlı hosting'in aksine tüm işletim sistemine hükmedersiniz — bu güç, aynı zamanda tüm güvenlik sorumluluğunun size ait olması demektir. VPS ile VDS farkını ve fiyat bandını merak ediyorsanız VPS karşılaştırma ve VDS karşılaştırma sayfalarımıza göz atabilirsiniz. Bu yazıda Ubuntu tabanlı yeni bir VPS'i sıfırdan üretime hazır hale getiriyoruz.

💡 Ön koşul: Elinizde VPS'in IP adresi, root parolası (ya da sağlayıcının verdiği ilk kullanıcı) ve yerel bilgisayarınızda bir terminal (macOS/Linux'ta hazır, Windows'ta PowerShell veya PuTTY) olmalı. Örneklerde IP olarak 203.0.113.10, kullanıcı adı olarak deploy kullanacağız — kendinize göre değiştirin.

1. İlk Bağlantı ve Sistem Güncellemesi

İlk iş, sunucuya bağlanmak ve tüm paketleri güncel sürüme çekmektir. Kurulum imajları çoğu zaman haftalar öncesine ait olduğundan, güvenlik yamaları geride kalmış olabilir.

# Yerel bilgisayarınızdan root ile bağlanın
ssh root@203.0.113.10

# Paket listesini yenile ve tüm paketleri güncelle
apt update && apt upgrade -y

# Artık gerekmeyen paketleri temizle
apt autoremove -y

Kernel güncellemesi geldiyse bir yeniden başlatma gerekebilir. Güncelleme bittikten sonra gerekiyorsa reboot komutunu çalıştırın ve 30-60 saniye sonra tekrar bağlanın.

2. Yeni Sudo Kullanıcısı Oluşturma

Root ile günlük işlem yapmak son derece risklidir; yanlış bir komut tüm sistemi silebilir ve saldırganların ilk hedefi her zaman root hesabıdır. Bu yüzden yetkili (sudo) yeni bir kullanıcı oluşturup root'u devre dışı bırakacağız.

# Yeni kullanıcı oluştur (parola sorar, ad-soyad boş bırakılabilir)
adduser deploy

# Kullanıcıyı sudo grubuna ekle
usermod -aG sudo deploy

# Doğrula: sudo yetkisini test et
su - deploy
sudo whoami   # çıktı: root olmalı
exit
⚠️ Dikkat: Bir sonraki adımlarda root ile SSH girişini kapatacağız. Bunu yapmadan önce yeni deploy kullanıcısının hem parola hem de SSH ile giriş yapabildiğinden mutlaka emin olun. Aksi halde sunucuya kilitlenebilirsiniz. Test için mevcut oturumu kapatmadan ikinci bir terminal açıp yeni kullanıcı ile bağlanmayı deneyin.

3. SSH Anahtarı ile Girişe Geçme

Parola ile giriş, sözlük ve brute-force saldırılarına açıktır. SSH anahtar çifti ise kriptografik olarak kırılması pratikte imkânsız bir yöntemdir. Yerel bilgisayarınızda henüz anahtarınız yoksa oluşturun:

# YEREL bilgisayarınızda çalıştırın (sunucuda değil)
ssh-keygen -t ed25519 -C "deploy@vps"
# Enter'a basıp varsayılan yolu (~/.ssh/id_ed25519) kabul edin
# İsteğe bağlı ama önerilir: bir passphrase belirleyin

# Genel anahtarı sunucudaki yeni kullanıcıya kopyalayın
ssh-copy-id deploy@203.0.113.10

ssh-copy-id yoksa (Windows/PuTTY) genel anahtarınızın içeriğini sunucudaki ~/.ssh/authorized_keys dosyasına elle ekleyebilirsiniz:

# SUNUCUDA (deploy kullanıcısıyla) çalıştırın
mkdir -p ~/.ssh && chmod 700 ~/.ssh
nano ~/.ssh/authorized_keys
# Genel anahtarınızı (ssh-ed25519 AAAA... deploy@vps) tek satır olarak yapıştırın
chmod 600 ~/.ssh/authorized_keys

Şimdi yeni bir terminalden ssh deploy@203.0.113.10 ile parola sormadan girebildiğinizi doğrulayın. Anahtarla giriş çalışıyorsa bir sonraki adıma geçebilirsiniz.

4. SSH Sunucusunu Sertleştirme

Artık root ile parola girişini kapatabilir ve SSH portunu değiştirebiliriz. Ana yapılandırma dosyası /etc/ssh/sshd_config'tur.

# deploy kullanıcısıyla
sudo nano /etc/ssh/sshd_config

Aşağıdaki satırları bulup (varsa başındaki # işaretini kaldırıp) şu değerlere getirin:

Port 2222                      # varsayılan 22'yi değiştir (isteğe bağlı ama gürültüyü azaltır)
PermitRootLogin no             # root ile SSH girişini kapat
PasswordAuthentication no      # parola girişini tamamen kapat, sadece anahtar
PubkeyAuthentication yes       # anahtar tabanlı girişi aç
X11Forwarding no               # gereksiz forwarding'i kapat
MaxAuthTries 3                 # deneme sınırı

Kaydedip yapılandırmayı test edin ve servisi yeniden başlatın:

# Sözdizimi hatası var mı kontrol et
sudo sshd -t

# Servisi yeniden başlat (Ubuntu 22.04+ için)
sudo systemctl restart ssh
⚠️ Kilitlenmeyin: SSH portunu 2222 yaptıysanız artık ssh -p 2222 deploy@203.0.113.10 ile bağlanmalısınız. Servisi yeniden başlatmadan önce mevcut oturumunuzu kapatmayın. Yeni terminalde yeni portla bağlanmayı test edin; çalıştığından emin olmadan eski oturumu asla kapatmayın. Ayrıca bir sonraki adımda firewall'da bu portu açmayı unutmayın.

5. UFW Firewall Kurulumu

UFW (Uncomplicated Firewall), Ubuntu'nun iptables üstüne oturan basit firewall aracıdır. Prensip nettir: her şeyi kapat, sadece ihtiyacın olan portları aç.

# Varsayılan politika: gelen her şeyi engelle, giden her şeye izin ver
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH portunu aç (portu değiştirdiyseniz 2222, yoksa 22 / 'OpenSSH')
sudo ufw allow 2222/tcp

# Web sunucusu çalıştıracaksanız HTTP/HTTPS açın
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp

# Firewall'ı etkinleştir (SSH portunu açtığınızdan emin olun!)
sudo ufw enable

# Durumu görüntüle
sudo ufw status verbose

Bir port bandını (örn. oyun sunucusu) açmanız gerekirse sudo ufw allow 25565:25570/tcp gibi aralık verebilirsiniz. Minecraft sunucusu kuracaklar için port ve sağlayıcı seçimini Minecraft sunucu karşılaştırma sayfamızda inceleyebilirsiniz.

6. Fail2ban ile Brute-Force Koruması

Anahtar tabanlı girişe geçtiyseniz brute-force riski büyük ölçüde düşer, ancak fail2ban yine de log'ları izleyip başarısız denemeler yapan IP'leri otomatik banlayarak ek bir katman sağlar ve sunucu log'larını temiz tutar.

# Kurulum
sudo apt install fail2ban -y

# Yerel yapılandırma dosyası oluştur (jail.conf'u doğrudan düzenlemeyin)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

[sshd] bölümünü bulup şu ayarları uygulayın (portu değiştirdiyseniz belirtin):

[sshd]
enabled  = true
port     = 2222
maxretry = 3
findtime = 10m
bantime  = 1h
# Kendinizi yanlışlıkla banlamamak için sabit IP'nizi beyaz listeye alın:
ignoreip = 127.0.0.1/8 ::1 88.230.10.5
# Servisi başlat ve açılışta otomatik başlaması için etkinleştir
sudo systemctl enable --now fail2ban

# Banlanan IP'leri ve durumu görüntüle
sudo fail2ban-client status sshd
💡 İpucu: Yanlışlıkla kendinizi banlarsanız (örn. hatalı port), sağlayıcınızın web konsolu / VNC üzerinden bağlanıp sudo fail2ban-client set sshd unbanip IP_ADRESI komutuyla ban'ı kaldırabilirsiniz. Bu yüzden statik IP'nizi ignoreip listesine eklemek önemlidir.

7. Otomatik Güvenlik Güncellemeleri

Güvenlik açıklarının çoğu, yamanın yayınlandığı ama sunucuya uygulanmadığı bilinen zafiyetlerdir. unattended-upgrades, kritik güvenlik yamalarını otomatik uygular.

# Paketi kur
sudo apt install unattended-upgrades -y

# Yapılandırmayı etkinleştir (interaktif ekranda "Yes" seçin)
sudo dpkg-reconfigure --priority=low unattended-upgrades

# Otomatik yeniden başlatmayı isterseniz ayarlayın
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

Dosyada aşağıdaki satırları açarak (başındaki // kaldırılarak) güvenlik yamalarından sonra gece 03:00'te otomatik yeniden başlatma tanımlayabilirsiniz:

Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "03:00";
# Kuru çalıştırma ile test et (gerçekten kurmadan neyi güncelleyeceğini gösterir)
sudo unattended-upgrades --dry-run --debug

8. Zaman Dilimi ve Swap Ayarı

Doğru zaman dilimi, log'ların ve cron görevlerinin tutarlı çalışması için önemlidir. Swap alanı ise düşük RAM'li VPS'lerde (1-2 GB) programların OOM (bellek yetersiz) hatasıyla çökmesini engeller.

# Zaman dilimini İstanbul olarak ayarla
sudo timedatectl set-timezone Europe/Istanbul
timedatectl   # doğrula

# 2 GB swap dosyası oluştur (RAM'i 2GB veya altındaki sunucular için)
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile

# Kalıcı olması için fstab'a ekle
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# Doğrula
free -h

SSD ömrünü korumak için swap'ın ne kadar agresif kullanılacağını ayarlayabilirsiniz:

# Swap'ı sadece gerektiğinde kullan (varsayılan 60, düşürüyoruz)
sudo sysctl vm.swappiness=10
echo 'vm.swappiness=10' | sudo tee -a /etc/sysctl.conf

9. Ek Sertleştirme (Shared Memory, Kernel)

Temel adımların ötesine geçmek isteyenler için birkaç ek koruma. Aşağıdaki tablo, kurduğumuz katmanların ne işe yaradığını özetliyor:

Katman Neyi Korur Öncelik
SSH anahtarı + parola kapalı Yetkisiz giriş, brute-force Kritik
UFW firewall Açık portlara doğrudan saldırı Kritik
Fail2ban Otomatik saldırı botları Yüksek
Otomatik güncelleme Bilinen zafiyetler (CVE) Yüksek
Swap + swappiness Bellek taşması kaynaklı çökme Orta

Paylaşımlı bellek segmentini salt okunur bağlayarak bazı exploit türlerini zorlaştırabilirsiniz:

# /run/shm'i noexec, nosuid, nodev ile bağla
echo 'tmpfs /run/shm tmpfs defaults,noexec,nosuid,nodev 0 0' | sudo tee -a /etc/fstab

# Kernel seviyesinde ping/spoofing korumaları
sudo tee -a /etc/sysctl.conf > /dev/null <<'EOF'
net.ipv4.conf.all.rp_filter = 1
net.ipv4.icmp_echo_ignore_broadcasts = 1
net.ipv4.conf.all.accept_source_route = 0
EOF

# Ayarları hemen uygula
sudo sysctl -p
✅ Öneri: Sunucu izleme için basit bir başlangıç: htop (canlı kaynak takibi) ve ncdu (disk kullanımı) araçlarını kurun (sudo apt install htop ncdu -y). Web sitenizin veya API'nizin ayakta olup olmadığını dışarıdan takip etmek isterseniz durum izleme sayfamızı da kullanabilirsiniz.

10. Kontrol Listesi ve Sonraki Adımlar

Buraya kadar geldiyseniz VPS'iniz temel güvenlik açısından üretime hazır. Kapatmadan önce hızlı kontrol listesi:

  • ☑️ Sistem tamamen güncel (apt upgrade yapıldı)
  • ☑️ Root ile SSH girişi kapalı, sudo kullanıcısı çalışıyor
  • ☑️ Parola ile giriş kapalı, sadece SSH anahtarı çalışıyor
  • ☑️ UFW aktif; yalnızca gerekli portlar açık (ufw status)
  • ☑️ Fail2ban çalışıyor ve statik IP'niz beyaz listede
  • ☑️ Otomatik güvenlik güncellemeleri etkin
  • ☑️ Zaman dilimi doğru, gerekiyorsa swap tanımlı

Bundan sonra sunucunuza rolüne göre yazılım kurabilirsiniz: bir web sitesi için Nginx + PHP + MySQL (LEMP), bir uygulama için Docker, ya da bir kontrol paneli. Kontrol paneli tarafını merak ediyorsanız cPanel rehberimiz iyi bir başlangıç. Hangi sağlayıcının VPS/VDS fiyat-performansının daha iyi olduğunu karşılaştırmak için hosting karşılaştırma ve karşılaştırma aracımızı kullanabilirsiniz.

Sıkça Sorulan Sorular

SSH portunu değiştirmek gerçekten güvenlik sağlar mı?

Tek başına tam bir güvenlik önlemi değildir; buna "belirsizlikle güvenlik" (security through obscurity) denir. Ancak varsayılan 22 portunu tarayan otomatik botların büyük çoğunluğu sizi göremez, bu da log'larınızı önemli ölçüde temizler ve gürültüyü azaltır. Asıl koruma anahtar tabanlı giriş, firewall ve fail2ban'dan gelir; port değiştirme bunların üstüne konan pratik bir ek katmandır.

Root ile SSH girişini kapatmadan önce mutlaka ne yapmalıyım?

Yeni sudo kullanıcınızın hem SSH anahtarıyla bağlanabildiğini hem de sudo komutlarını çalıştırabildiğini ikinci bir terminalde test edin. Mevcut root oturumunuzu, yeni kullanıcıyla başarılı bir giriş doğrulamadan asla kapatmayın. Aksi halde sunucuya erişiminizi kaybedebilir ve sağlayıcının web konsolundan kurtarmanız gerekir.

fail2ban ile UFW aynı işi mi yapıyor?

Hayır, birbirini tamamlarlar. UFW hangi portların açık olacağını belirleyen statik bir kapıdır. Fail2ban ise açık portlara (özellikle SSH) tekrarlayan başarısız denemeler yapan IP'leri log'lardan tespit edip UFW/iptables kuralıyla geçici olarak banlayan dinamik bir bekçidir. İkisini birlikte kullanmak en iyi sonucu verir.

Ubuntu VPS'imi ne sıklıkla güncellemeliyim?

Güvenlik yamalarını unattended-upgrades ile otomatikleştirdiyseniz kritik açıklar günlük olarak kapanır. Yine de ayda bir kez manuel sudo apt update && sudo apt upgrade çalıştırıp kernel ve dağıtım güncellemelerini kontrol etmeniz, ardından uygun bir bakım penceresinde yeniden başlatmanız önerilir.

Bu adımları Debian veya AlmaLinux'ta da uygulayabilir miyim?

Mantık aynıdır. Debian'da komutların neredeyse tamamı birebir çalışır. AlmaLinux/Rocky gibi RHEL tabanlı dağıtımlarda paket yöneticisi apt yerine dnf, firewall aracı UFW yerine firewalld olur ve SSH servisi sshd adıyla yönetilir. Prensipler (anahtar girişi, firewall, fail2ban, otomatik güncelleme) tüm Linux dağıtımlarında geçerlidir.