İnternete yeni açılmış bir sunucunun kayıtlarına bakın: daha siz ilk komutu yazmadan dünyanın dört bir yanından otomatik taramalar SSH portuna parola denemeye başlamış olur. Bu bir abartı değil; açık IP adresli her sunucu dakikalar içinde bu trafiği görür. İyi haber şu ki bu saldırıların neredeyse tamamı, kurulumdan sonraki ilk yarım saatte yapılacak birkaç basit ayarla etkisiz hâle geliyor. Bu yazı, yeni bir Debian ya da Ubuntu sunucuya bağlandığımda izlediğim sıranın sade bir hâli.
İlk 30 dakikanın listesi: 1) Sistemi güncelle. 2) sudo yetkili kendi kullanıcını oluştur. 3) SSH anahtarıyla gir, parola ve root girişini kapat. 4) UFW ile yalnızca gereken portları aç. 5) fail2ban kur. 6) Otomatik güvenlik güncellemelerini aç. 7) Yedeği ilk gün planla.
Kilitlenmeyin: SSH ayarlarını değiştirirken mevcut oturumu kapatmayın. Yeni ayarı ikinci bir terminal penceresinden test edin; çalıştığını görmeden ilk oturumu kapatmayın. Sağlayıcınızın web konsolunun (VNC/KVM) nerede olduğunu önceden bilin.
1. Sistemi güncelleyin
sudo apt update && sudo apt full-upgrade -y
sudo reboot
Sağlayıcıların hazır imajları çoğu zaman haftalar önce hazırlanmıştır. Güncellemeden işe başlamak, zaten yaması çıkmış açıklarla yaşamak demek.
2. Kendi kullanıcınızı oluşturun
Her işi root ile yapmak, tek bir hatalı komutla her şeyi silme riskini taşır. Kendinize sudo yetkili bir kullanıcı açın:
adduser orcun
usermod -aG sudo orcun
Kullanıcı adını “admin”, “user”, “test” gibi herkesin denediği isimlerden seçmeyin.
3. SSH anahtarı: parolaya veda
Kendi bilgisayarınızda (sunucuda değil) bir anahtar çifti oluşturun. Ed25519 günümüzde önerilen tür:
ssh-keygen -t ed25519 -C "orcun-dizustu"
ssh-copy-id orcun@SUNUCU_IP
Anahtar oluştururken bir parola (passphrase) belirleyin; dizüstünüz çalınırsa anahtarınız da korunur. Sonra yeni kullanıcıyla ve anahtarla giriş yapabildiğinizi test edin:
ssh orcun@SUNUCU_IP
4. SSH yapılandırması: root ve parola girişini kapatın
Debian ve Ubuntu’da ana dosyayı düzenlemek yerine ayrı bir yapılandırma dosyası oluşturmak daha temiz:
sudo nano /etc/ssh/sshd_config.d/10-sertlestirme.conf
İçine:
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
AllowUsers orcun
Sözdizimini kontrol edip SSH’yi yeniden yükleyin:
sudo sshd -t && sudo systemctl reload ssh
Şimdi ikinci bir terminalden tekrar bağlanmayı deneyin. Başarılıysa ilk oturumu kapatabilirsiniz.
SSH portunu değiştirmeli miyim?
Portu 22’den başka bir sayıya almak kayıtlardaki gürültüyü azaltır ama gerçek bir güvenlik önlemi değildir; asıl koruma, parolayla girişin kapalı olmasıdır. Değiştirecekseniz önce güvenlik duvarında yeni portu açın, sonra SSH’yi taşıyın. Ubuntu’nun yeni sürümlerinde SSH “socket activation” ile çalıştığı için port ayarının ssh.socket birimi üzerinden de yapılması gerekebilir; dağıtımınızın belgesine bakın.
5. Güvenlik duvarı: UFW
UFW, iptables/nftables üzerinde basit bir arayüz. Sıra önemli: önce SSH’ye izin verin, sonra açın.
sudo apt install ufw
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow OpenSSH
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose
80 ve 443’ü yalnızca web sunucusu çalıştıracaksanız açın. Veritabanı portlarını (3306, 5432) asla herkese açmayın; uzaktan erişim gerekiyorsa yalnızca belirli bir IP’ye izin verin:
sudo ufw allow from 203.0.113.10 to any port 5432 proto tcp
Bu uyarıyı boşuna yapmıyorum: İnternete açık bırakılmış veritabanları, otomatik fidye botlarının en sevdiği hedef. Botlar veritabanını boşaltıp yerine “verilerinizi geri almak için şu adrese ödeme yapın” yazan bir tablo bırakıyor.
6. fail2ban: tekrar deneyenleri engelleyin
fail2ban kayıtları izler, belirli sayıda başarısız giriş deneyen IP’yi bir süre engeller.
sudo apt install fail2ban
sudo nano /etc/fail2ban/jail.local
[DEFAULT]
bantime = 1h
findtime = 10m
maxretry = 5
backend = systemd
[sshd]
enabled = true
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd
Parola girişi zaten kapalıysa fail2ban daha çok kayıtları temiz tutmaya yarar; ama web uygulamaları için de kural (jail) eklenebildiği için kurmaya değer. Kendi IP’nizi yanlışlıkla engellememek için ignoreip satırına ofis IP’nizi ekleyebilirsiniz.
7. Otomatik güvenlik güncellemeleri
sudo apt install unattended-upgrades
sudo dpkg-reconfigure -plow unattended-upgrades
Bu ayar yalnızca güvenlik güncellemelerini otomatik kurar; ana sürüm yükseltmesi yapmaz. Çekirdek güncellemeleri için yeniden başlatma gerekir; /var/run/reboot-required dosyası varsa uygun bir saatte yeniden başlatın.
8. Gereksiz servisleri kapatın
Hangi portların dinlendiğine bakın:
sudo ss -tulpn
Tanımadığınız ya da kullanmadığınız bir servis dinliyorsa kapatın:
sudo systemctl disable --now servis-adi
Özellikle geliştirme sırasında açılıp unutulan paneller, “debug” modunda bırakılmış uygulamalar ve varsayılan parolalı yönetim arayüzleri çok risklidir.
9. Yedek: güvenliğin son halkası
Tüm önlemlere rağmen bir gün bir şeyler ters gidebilir. O gün sizi kurtaracak tek şey, sunucunun dışında duran ve düzenli test edilen bir yedek. Veritabanını düzenli döküm (dump) olarak alın, dosyaları restic ya da borg gibi şifreli ve artımlı yedek araçlarıyla başka bir konuma gönderin. Ayrıntılı strateji için KOBİ’ler için yedekleme rehberine bakın.
Kontrol listesi
| Adım | Komut / Dosya | Tamam mı? |
|---|---|---|
| Sistem güncel | apt full-upgrade |
|
| Kendi sudo kullanıcım var | adduser, usermod -aG sudo |
|
| SSH anahtarıyla giriş | ssh-copy-id |
|
| Root ve parola girişi kapalı | sshd_config.d/10-sertlestirme.conf |
|
| UFW açık, yalnız gerekli portlar | ufw status |
|
| fail2ban çalışıyor | fail2ban-client status |
|
| Otomatik güvenlik güncellemesi | unattended-upgrades |
|
| Dinleyen portlar kontrol edildi | ss -tulpn |
|
| Sunucu dışı yedek planlandı | restic / borg / döküm |
Komutların kendisi yabancı geliyorsa önce 30 temel terminal komutu yazısına bakın. Hangi dağıtımı seçeceğinize henüz karar vermediyseniz Fedora vs Debian karşılaştırması işinizi görür.
Sık sorulan sorular
SSH anahtarımı kaybedersem ne olur?
Parola girişini kapattığınız için sunucuya SSH ile giremezsiniz. Sağlayıcının web konsolundan girip yeni anahtar eklersiniz. Bu yüzden ikinci bir cihazda yedek anahtar tutmak iyi fikir.
Ubuntu Server ile Debian arasında güvenlik farkı var mı?
İkisi de iyi; bu yazıdaki adımlar ikisinde de aynı. Ubuntu’da Ubuntu Pro ile ek güvenlik yamaları alınabiliyor; Debian’da güvenlik ekibi ve LTS süreci var.
Kontrol paneli (HestiaCP, cPanel vb.) kullanırsam bunlar gerekli mi?
Paneller kendi güvenlik duvarı ve fail2ban ayarlarıyla geliyor, ama SSH anahtarı, güncel sistem ve sunucu dışı yedek yine sizin sorumluluğunuzda.
Sunucumun saldırıya uğrayıp uğramadığını nasıl anlarım?
last, journalctl -u ssh ve sudo ss -tulpn çıktılarında tanımadığınız giriş ya da servis var mı bakın. ~/.ssh/authorized_keys dosyasında sizin eklemediğiniz bir anahtar görüyorsanız ciddi bir işarettir.
Sunucunuzu sıfırdan güvenli kurmak ya da mevcut sunucunuzun güvenlik ayarlarını gözden geçirmek isterseniz Burgaz Bilişim’in sunucu kiralama ve bulut sunucu sayfasından bize ulaşabilirsiniz.