itsrda

SSH Güvenliği: Anahtarla Giriş, Parolayı Kapatma ve fail2ban

İnternete açık ya da iç ağdaki bir Linux sunucunun SSH erişimini sertleştirmek için sırasıyla anahtar çifti, parolalı girişi kapatma, root girişini engelleme ve fail2ban kurulumu.

Bir sunucunun SSH portu internete açılır açılmaz, birkaç dakika içinde deneme saldırılarıyla karşılaşır. /var/log/auth.log dosyasına bakarsanız admin, root, pi, ubuntu gibi kullanıcılarla yapılmış yüzlerce başarısız deneme görürsünüz. Bunlar otomatik tarayıcılardır; hedef sizin sunucunuz değil, internetteki her açık 22 numaralı porttur. Güçlü bir parola çoğu zaman yeterli olur, ama doğru yol parolayı tamamen devre dışı bırakmaktır.

Önemli uyarı: Aşağıdaki adımlarda kendinizi sunucudan kilitleyebilirsiniz. Her değişiklikten sonra mevcut oturumu kapatmadan ikinci bir terminalde yeni oturum açıp denemeyi alışkanlık edinin.

1. Anahtar çifti oluşturmak

Kendi bilgisayarınızda (sunucuda değil):

ssh-keygen -t ed25519 -C "isim@cihaz"

Parola sorulduğunda boş bırakmayın; anahtar dosyanız çalınırsa parolası son savunma hattıdır. Bu komut ~/.ssh/id_ed25519 (özel anahtar, kimseyle paylaşılmaz) ve ~/.ssh/id_ed25519.pub (genel anahtar) dosyalarını üretir.

Genel anahtarı sunucuya kopyalayın:

ssh-copy-id kullanici@sunucu-adresi

Windows'ta aynı işi OpenSSH istemcisiyle ya da genel anahtarın içeriğini sunucudaki ~/.ssh/authorized_keys dosyasına elle ekleyerek yapabilirsiniz. Dizin izinleri önemlidir: ~/.ssh için 700, authorized_keys için 600.

2. Anahtarla girişi doğrulayın

Parolasız (anahtar parolası hariç) giriş yaptığınızdan emin olun:

ssh kullanici@sunucu-adresi

Bu çalışmadan sonraki adıma geçmeyin.

3. Parolayla girişi kapatmak

Sunucuda, ana dosyayı değiştirmek yerine bir parça dosya oluşturmak güncellemelerde ezilmeyi önler. /etc/ssh/sshd_config.d/10-guvenlik.conf:

PasswordAuthentication no
KbdInteractiveAuthentication no
PermitRootLogin no
PubkeyAuthentication yes
MaxAuthTries 3
LoginGraceTime 30

Yapılandırmayı yeniden başlatmadan önce sınayın:

sudo sshd -t && sudo systemctl reload ssh

sshd -t hata vermezse yeniden yükleme güvenlidir. Servis adı Debian ve Raspberry Pi OS'ta ssh, bazı dağıtımlarda sshd'dir. Şimdi yeni bir terminalden bağlanmayı deneyin; eski oturum açık kalsın. Parola isteyen bir bağlantı artık reddedilmelidir:

ssh -o PubkeyAuthentication=no kullanici@sunucu-adresi
# Beklenen: Permission denied (publickey)

Bazı dağıtımlarda ana dosyadaki bir Include satırı veya bulut imajlarının kendi parçaları ayarı geçersiz kılabilir. Etkin değeri sudo sshd -T | grep -i passwordauthentication ile doğrulayın.

4. Varsayılan kullanıcıyı ele almak

Raspberry Pi OS'ta eskiden herkesin bildiği pi kullanıcısı vardı; kurulum sırasında kendi kullanıcı adınızı seçtiyseniz sorun yok. Eğer varsayılan kullanıcı ve parola hâlâ duruyorsa değiştirin. Sudo yetkisini yalnızca gerçekten ihtiyacı olan hesaba verin.

5. fail2ban ile tekrarlayan denemeleri engellemek

Parola kapalı olsa bile deneme trafiği günlükleri doldurur ve kaynak tüketir. fail2ban, günlükleri izler ve çok sayıda başarısız denemede o IP'yi geçici olarak güvenlik duvarında engeller.

sudo apt install fail2ban

/etc/fail2ban/jail.d/sshd.local:

[sshd]
enabled  = true
maxretry = 4
findtime = 10m
bantime  = 1h
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Çıktıda "Currently banned" altında engellenmiş IP'leri görürsünüz. Kendi IP'nizi yanlışlıkla engellerseniz sudo fail2ban-client set sshd unbanip <IP> ile kaldırabilirsiniz. Kendi sabit adresiniz varsa ignoreip satırına ekleyin.

6. Portu değiştirmek işe yarar mı?

SSH'ı 22 dışında bir porta almak otomatik tarayıcı gürültüsünü azaltır, ama gerçek bir güvenlik önlemi değildir; kararlı bir saldırgan tüm portları tarar. Anahtar kimlik doğrulama zaten asıl korumadır. Port değişikliği yaparsanız güvenlik duvarını ve bağlantı komutlarınızı da güncellemeyi unutmayın.

7. İnternete hiç açmamak

En güvenli SSH, internete bakmayandır. Uzaktan yönetim gerekiyorsa servisi doğrudan açmak yerine bir VPN (WireGuard, Tailscale) ya da Cloudflare Tunnel/Access arkasına alın. Cloudflare Tunnel yazımızda bu yaklaşımı anlattık.

Kontrol listesi

  • Anahtar parolalı ve özel anahtar yalnızca sizde.
  • PasswordAuthentication no ve PermitRootLogin no.
  • sshd -t ile sınadınız, ikinci oturumla doğruladınız.
  • fail2ban etkin ve çalışıyor.
  • Sistem güncellemeleri düzenli (sudo apt update && sudo apt upgrade).
Not: Komutları üretim ortamında çalıştırmadan önce yedek alın ve önce test ortamında deneyin. Bir adım sizde farklı davranıyorsa bize yazın, rehberi güncelleyelim.