Bir VPS satın aldığınızda varsayılan kurulum hiçbir güvenlik katmanı sunmaz. Root erişimi açıktır, firewall kapalıdır ve brute-force saldırılarına karşı koruma yoktur. Bu rehberde, Ubuntu 22.04/24.04 üzerinde sunucunuzu üretim ortamına hazır hale getirecek tüm güvenlik adımlarını detaylıca uygulayacağız.

Bilgi
Bu rehberdeki tüm komutlar Ubuntu 22.04 LTS ve 24.04 LTS üzerinde test edilmiştir. Debian 12 için de büyük ölçüde geçerlidir.

İlgili rehberler: DNS nedir, ayarları değiştirme · Domain adı ve WHOIS sorgulama · Hosting türleri rehberi · Nginx yapılandırma · Plesk panel yönetimi

SSH Güvenlik Sertleştirme

SSH, sunucunuza erişmenin birincil yoludur ve en çok saldırıya uğrayan servistir. Varsayılan yapılandırma parola ile root girişine izin verir — bu en büyük güvenlik açığıdır. İlk adım olarak anahtar tabanlı kimlik doğrulamaya geçeceğiz.

Yeni Kullanıcı Oluşturma

Root kullanıcısıyla doğrudan çalışmak yerine sudo yetkisine sahip ayrı bir kullanıcı oluşturun. Bu, hem güvenlik hem de denetim (audit) açısından kritik öneme sahiptir.

# Yeni kullanıcı oluştur
adduser deploy

# Sudo grubuna ekle
usermod -aG sudo deploy

# Kullanıcıya geçiş yap ve test et
su - deploy
sudo whoami  # root döndürmeli

SSH Anahtar Çifti Oluşturma

Yerel bilgisayarınızda (sunucuda değil!) ED25519 algoritmasıyla bir SSH anahtar çifti oluşturun. ED25519, RSA'ya kıyasla daha kısa anahtar boyutuyla daha yüksek güvenlik sunar.

# Yerel bilgisayarınızda çalıştırın
ssh-keygen -t ed25519 -C "deploy@sunucum" -f ~/.ssh/sunucum_key

# Public key'i sunucuya kopyalayın
ssh-copy-id -i ~/.ssh/sunucum_key.pub deploy@SUNUCU_IP

# Test edin (parola sormadan bağlanmalı)
ssh -i ~/.ssh/sunucum_key deploy@SUNUCU_IP

SSH Yapılandırmasını Sertleştirme

Anahtar tabanlı giriş çalıştığını doğruladıktan sonra SSH daemon yapılandırmasını güncelleyin. Aşağıdaki ayarlar root girişini, parola doğrulamasını ve X11 yönlendirmesini devre dışı bırakır, portu değiştirir.

sudo nano /etc/ssh/sshd_config
# /etc/ssh/sshd_config — değiştirilecek satırlar
Port 2222
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
AuthorizedKeysFile .ssh/authorized_keys
X11Forwarding no
AllowTcpForwarding no
MaxAuthTries 3
ClientAliveInterval 300
ClientAliveCountMax 2
UsePAM yes
AllowUsers deploy
Uyarı
Port değişikliği yaptıktan sonra YENİ bir terminal penceresi açıp yeni portla bağlanabildiğinizi test edin. Mevcut oturumunuzu kapatmayın — aksi halde sunucuya erişiminizi kaybedebilirsiniz!
# Yapılandırmayı doğrula
sudo sshd -t

# Servisi yeniden başlat
sudo systemctl restart sshd

# Yeni terminalden test
ssh -p 2222 -i ~/.ssh/sunucum_key deploy@SUNUCU_IP

UFW Firewall Yapılandırması

UFW (Uncomplicated Firewall), iptables'ın kullanıcı dostu bir arayüzüdür. Varsayılan olarak tüm gelen trafiği engelleyip sadece ihtiyacınız olan portları açmak en güvenli yaklaşımdır.

# UFW kur ve varsayılan politikayı ayarla
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing

# SSH portunu aç (değiştirdiyseniz yeni portu yazın)
sudo ufw allow 2222/tcp comment "SSH"

# Web trafiği
sudo ufw allow 80/tcp comment "HTTP"
sudo ufw allow 443/tcp comment "HTTPS"

# UFW'yi etkinleştir
sudo ufw enable

# Durumu kontrol et
sudo ufw status verbose
PortProtokolAçıklamaVarsayılan
2222TCPSSH (özelleştirilmiş port)İzin ver
80TCPHTTP web trafiğiİzin ver
443TCPHTTPS şifreli web trafiğiİzin ver
25TCPSMTP (mail gönderimi)Gerekirse aç
3306TCPMySQL/MariaDBKAPALI tut
5432TCPPostgreSQLKAPALI tut
İpucu
Veritabanı portlarını (3306, 5432) asla dışarıya açmayın. Uzaktan erişim gerekiyorsa SSH tüneli kullanın: ssh -L 5432:localhost:5432 deploy@SUNUCU_IP -p 2222

Fail2ban ile Brute-Force Koruması

Fail2ban, log dosyalarını izleyerek tekrarlayan başarısız giriş denemelerini tespit eder ve saldırganın IP adresini otomatik olarak engeller. SSH, Nginx, Apache gibi birçok servis için jail (hapishane) kuralları tanımlayabilirsiniz.

# Kurulum
sudo apt install fail2ban -y

# Yerel yapılandırma dosyası oluştur (asıl dosyayı düzenlemeyin)
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
# /etc/fail2ban/jail.local
[DEFAULT]
bantime  = 3600
findtime = 600
maxretry = 3
banaction = ufw

[sshd]
enabled  = true
port     = 2222
logpath  = /var/log/auth.log
maxretry = 3
bantime  = 86400

[nginx-http-auth]
enabled  = true
logpath  = /var/log/nginx/error.log
maxretry = 5

[nginx-limit-req]
enabled  = true
logpath  = /var/log/nginx/error.log
maxretry = 10
findtime = 120
# Servisi başlat ve durumu kontrol et
sudo systemctl enable fail2ban
sudo systemctl start fail2ban

# Aktif jail'leri listele
sudo fail2ban-client status

# SSH jail detaylarını gör
sudo fail2ban-client status sshd

# Belirli bir IP'yi manuel olarak engelden çıkar
sudo fail2ban-client set sshd unbanip 192.168.1.100

Otomatik Güvenlik Güncellemeleri

Güvenlik yamalarını geciktirmek, bilinen açıkların (CVE) istismar edilmesine davetiye çıkarır. unattended-upgrades paketi ile kritik güvenlik güncellemelerini otomatik olarak uygulayabilirsiniz.

# Kurulum
sudo apt install unattended-upgrades apt-listchanges -y

# Yapılandır
sudo dpkg-reconfigure -plow unattended-upgrades

# Veya manuel yapılandırma
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades
// /etc/apt/apt.conf.d/50unattended-upgrades
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
};
Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "true";
Unattended-Upgrade::Automatic-Reboot-Time "04:00";
Unattended-Upgrade::Mail "admin@siteadi.com";
Bilgi
Otomatik reboot saatini (04:00) trafiğin en düşük olduğu zamana ayarlayın. Kritik sunucularda Automatic-Reboot yerine manuel reboot tercih edebilirsiniz.

Log İzleme ve Uyarı Sistemi

Güvenlik olaylarını gerçek zamanlı izlemek, saldırıları erken tespit etmenin anahtarıdır. Logwatch veya GoAccess gibi araçlarla günlük raporlar oluşturabilir, kritik olaylarda anında e-posta bildirimi alabilirsiniz.

# Logwatch kurulumu — günlük özet rapor gönderir
sudo apt install logwatch -y

# Yapılandır
sudo nano /usr/share/logwatch/default.conf/logwatch.conf
Output = mail
MailTo = admin@siteadi.com
MailFrom = logwatch@sunucu
Detail = Med
Range = yesterday
Service = All
# Önemli log dosyalarını anlık izleme
sudo tail -f /var/log/auth.log     # SSH giriş denemeleri
sudo tail -f /var/log/ufw.log       # Firewall blokları
sudo tail -f /var/log/fail2ban.log  # Fail2ban aksiyonları

# Son 24 saatte başarısız SSH denemelerini say
sudo grep "Failed password" /var/log/auth.log | grep "$(date +%b\ %d)" | wc -l

SSH için İki Faktörlü Doğrulama (2FA)

Google Authenticator PAM modülü ile SSH bağlantılarına ikinci bir doğrulama katmanı ekleyebilirsiniz. Anahtar tabanlı kimlik doğrulamaya ek olarak TOTP kodu istenecektir.

# Google Authenticator PAM modülünü kur
sudo apt install libpam-google-authenticator -y

# Kullanıcıyla çalıştır (root değil!)
su - deploy
google-authenticator

# Sorulara cevaplar:
# Time-based tokens? → y
# Update .google_authenticator file? → y
# Disallow multiple uses? → y
# Rate limiting? → y
# PAM yapılandırmasını düzenle
sudo nano /etc/pam.d/sshd

# Dosyanın sonuna ekleyin:
auth required pam_google_authenticator.so

# SSH yapılandırmasını güncelle
sudo nano /etc/ssh/sshd_config

# Şu satırları değiştirin:
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

# Yeniden başlat
sudo systemctl restart sshd
Uyarı
2FA yedek kodlarınızı (scratch codes) güvenli bir yerde saklayın. Telefonunuza erişiminizi kaybederseniz bu kodlarla giriş yapabilirsiniz.

Ek Güvenlik Önlemleri

Temel sertleştirme adımlarına ek olarak aşağıdaki uygulamalar sunucu güvenliğinizi bir üst seviyeye taşır.

  • Kernel sertleştirme: sysctl parametrelerini optimize edin (ICMP yönlendirmeyi devre dışı bırakın, SYN flood koruması)
  • AppArmor/SELinux: Zorunlu erişim kontrolü ile uygulamaların sistem kaynaklarına erişimini sınırlayın
  • ClamAV: Düzenli malware taraması yapın
  • rkhunter: Rootkit taraması ile sistemdeki gizli tehditleri tespit edin
  • Disk şifreleme: LUKS ile hassas verilerin bulunduğu bölümleri şifreleyin
# Kernel sertleştirme parametreleri
sudo nano /etc/sysctl.d/99-security.conf
# ICMP yönlendirmeyi devre dışı bırak
net.ipv4.conf.all.accept_redirects = 0
net.ipv6.conf.all.accept_redirects = 0

# IP source routing devre dışı
net.ipv4.conf.all.accept_source_route = 0

# SYN flood koruması
net.ipv4.tcp_syncookies = 1
net.ipv4.tcp_max_syn_backlog = 2048

# IP spoofing koruması
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1

# Ping isteklerini yoksay (opsiyonel)
net.ipv4.icmp_echo_ignore_all = 1
# Parametreleri uygula
sudo sysctl -p /etc/sysctl.d/99-security.conf

# rkhunter ile rootkit taraması
sudo apt install rkhunter -y
sudo rkhunter --update
sudo rkhunter --check --sk

Güvenlik Kontrol Listesi

AdımDurumÖncelik
Root girişini devre dışı bırakKritik
SSH anahtar tabanlı girişKritik
SSH portunu değiştirYüksek
UFW firewall aktifKritik
Fail2ban kurulumuYüksek
Otomatik güvenlik güncellemeleriYüksek
Log izleme ve bildirimlerOrta
2FA aktifleştirmeOrta
Kernel sertleştirmeOrta
Rootkit taramasıDüşük

Modern Web Hosting ve Sunucu Altyapısı

Performanslı bir web hosting hizmeti üç temel altyapı kararına dayanır: NVMe SSD diskler (klasik SATA SSD'ye göre 4-6 kat IOPS), LiteSpeed Web Server veya Nginx + LSCache kombinasyonu (Apache'ye göre 9 kat istek kapasitesi) ve CloudLinux + Imunify360 izolasyonu. Hosting sağlayıcısının kontrol paneli (cPanel, Plesk, DirectAdmin), günlük yedek politikası, veri merkezi konumu ve destek ekibi yanıt süresi de büyük fark yaratır. Türkiye lokasyonu yerli ziyaretçilere düşük gecikme verirken; Hetzner Frankfurt veya OVH Roubaix gibi Avrupa lokasyonları global trafik için daha uygundur. Site büyüdükçe paylaşımlı hosting'ten VPS, ardından dedicated server'a geçiş; CPU/RAM/disk kaynaklarının web sitemizin ihtiyaçlarına göre ölçeklenmesini sağlar.

Güvenli ve yüksek performanslı VPS çözümleri için KEYDAL hosting planlarını inceleyin.

WhatsApp