Yeni bir VPS veya VDS kiraladığınızda, hosting firması genellikle size temiz bir Ubuntu, Debian veya AlmaLinux işletim sistemi ve varsayılan olarak root şifresi teslim eder.
Ancak sunucunuz internete bağlandığı andan itibaren (ilk 15 dakika içinde), küresel botnet ağları varsayılan 22 numaralı porta kaba kuvvet (brute-force), sözlük saldırıları ve bilinen Linux açık taramaları göndermeye başlar.
Güvenlik önlemleri alınmamış bir Linux sunucu, dakikada yüzlerce şifre denemesine maruz kalarak hem CPU kaynaklarını tüketir hem de zayıf bir şifre durumunda zombi botnet ağına dahil edilme riskiyle karşı karşıya kalır.
Bu rehberde, kurumsal DevOps ve sistem yöneticilerinin uyguladığı 6 temel sunucu sertleştirme (hardening) adımını paylaşıyoruz.
1. Hızlı Güvenlik Kontrol Tablosu
| Güvenlik Önlemi | Yapılandırma | Güvenlik Etkisi |
|---|---|---|
| Ayrı Sudo Kullanıcısı | adduser deployer && usermod -aG sudo deployer | Kritik (Doğrudan root ile komut çalıştırmayı önler) |
| SSH Anahtarı ile Giriş | Ed25519 anahtar çifti (ssh-keygen -t ed25519) | Kritik (Kaba kuvvet şifre denemelerini imkansız kılar) |
| Root ve Şifreli Girişi Kapatma | PermitRootLogin no, PasswordAuthentication no | Kritik (%99.9 botnet taramasını durdurur) |
| UFW Güvenlik Duvarı | Gelen tüm portları kapat, sadece 80, 443 ve SSH portuna izin ver | Yüksek (Açık kalan arka kapıları ve test servislerini gizler) |
| Fail2ban Saldırı Engelleyici | 3 başarısız denemede IP'yi 24 saat boyunca banla | Yüksek (Israrcı brute-force botlarını ağ seviyesinde kilitler) |
| Otomatik Güvenlik Yamaları | unattended-upgrades ile kritik Linux yamalarını otomatik kur | Yüksek (0-Day çekirdek açıklarına karşı anında korunma) |
2. 1. Adım: Yeni Sudo Kullanıcısı Oluşturma
Sunucuyu asla doğrudan root kullanıcısı ile yönetmemelisiniz. Yapacağınız tek bir yanlış komut (rm -rf vb.) tüm işletim sistemini çökertebilir.
# Yeni bir sistem yöneticisi kullanıcısı oluşturun:
adduser sysadmin
# Kullanıcıya sudo (yönetici) yetkisi tanımlayın:
usermod -aG sudo sysadmin
3. 2. Adım: SSH Anahtarı (Ed25519) ile Girişi Zorunlu Kılma
Şifreler tahmin edilebilir veya brute-force ile kırılabilir. Kriptografik SSH anahtarları ise 256-bit eliptik eğri şifrelemesi kullanarak kırılmayı imkansız kılar.
1. Kendi Bilgisayarınızda Anahtar Üretin:
ssh-keygen -t ed25519 -C "[email protected]"
2. Açık Anahtarı (Public Key) Sunucuya Yükleyin:
ssh-copy-id -i ~/.ssh/id_ed25519.pub sysadmin@SUNUCU_IP
4. 3. Adım: Root ve Şifreli Girişleri Kapatma
SSH yapılandırma dosyasını düzenleyerek şifreli girişleri ve root erişimini tamamen devre dışı bırakın:
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırları bulun ve güncelleyin:
# Root ile doğrudan girişi engelleyin
PermitRootLogin no
# Şifreyle girişi tamamen kapatın (Sadece SSH anahtarı kabul edilsin)
PasswordAuthentication no
# Boş şifrelere izin vermeyin
PermitEmptyPasswords no
SSH servisini yeniden başlatmadan önce açık olan mevcut oturumunuzu asla kapatmayın. Yeni bir terminal sekmesi açarak yeni kullanıcı ve anahtarınızla giriş yapabildiğinizi test edin:
sudo systemctl restart sshd
5. 4. Adım: UFW (Uncomplicated Firewall) Kurulumu
Linux çekirdeğinde yerleşik bulunan netfilter/iptables filtrelerini yönetmenin en pratik yolu UFW aracıdır.
# 1. Varsayılan olarak gelen tüm istekleri engelleyin, çıkan isteklere izin verin:
sudo ufw default deny incoming
sudo ufw default allow outgoing
# 2. Web trafiğine ve SSH portuna izin verin:
sudo ufw allow 22/tcp comment 'SSH'
sudo ufw allow 80/tcp comment 'HTTP'
sudo ufw allow 443/tcp comment 'HTTPS'
# 3. Güvenlik duvarını aktif edin:
sudo ufw enable
# Durumu kontrol edin:
sudo ufw status verbose
6. 5. Adım: Fail2ban Kurulumu ve Yapılandırması
Fail2ban, sistem günlüklerini (/var/log/auth.log) gerçek zamanlı olarak izler. Belirli bir süre içinde çok sayıda başarısız oturum denemesi yapan IP adreslerini iptables kurallarıyla otomatik olarak engeller.
# Fail2ban paketini kurun:
sudo apt update && sudo apt install fail2ban -y
# Yerel yapılandırma dosyası oluşturun:
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local
[DEFAULT] ve [sshd] bölümlerini aşağıdaki gibi optimize edin:
[DEFAULT]
bantime = 1d # Kötü niyetli IP'yi 24 saat boyunca engelle
findtime = 10m # 10 dakikalık pencere içinde izle
maxretry = 3 # 3 başarısız denemede kilitle
[sshd]
enabled = true
port = 22
mode = aggressive
Servisi yeniden başlatın ve engellenen IP'leri izleyin:
sudo systemctl restart fail2ban
sudo fail2ban-client status sshd
7. 6. Adım: Otomatik Güvenlik Yamaları (Unattended-Upgrades)
Linux çekirdeğinde veya OpenSSL kütüphanesinde keşfedilen kritik güvenlik açıkları birkaç gün içinde istismar edilebilir. Güvenlik yamalarını her gün manuel yüklemek yerine otomatikleştirin:
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure --priority=low unattended-upgrades
Bu yapılandırma sayesinde Debian ve Ubuntu, sisteminizi yeniden başlatmadan sadece kritik güvenlik yamalarını her gece otomatik olarak indirecek ve kuracaktır.
8. Paylaşımlı Bellek (/dev/shm) Güvenliği
Zararlı yazılımların ve rootkit'lerin en sık sığındığı alanlardan biri geçici paylaşımlı bellek (/dev/shm) alanıdır. Bu alanda ikili dosyaların (binary) çalıştırılmasını yasaklayın:
/etc/fstab dosyasına şu satırı ekleyin:
tmpfs /dev/shm tmpfs defaults,noexec,nosuid,nodev 0 0
Değişikliği anında uygulamak için:
sudo mount -o remount /dev/shm
Bu 6 adımı uyguladığınızda, sanal sunucunuz internetteki otomatik tarayıcıların, kaba kuvvet botlarının ve bilinen siber tehditlerin %99.9'una karşı tam donanımlı bir kaleye dönüşecektir.