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.
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
# 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
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";
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
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