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 novePermitRootLogin no.sshd -tile 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).
Saldırıyı gözlemlemek: günlükte ne görürsünüz?
İnternete açık bir SSH portu birkaç saat içinde otomatik taramalarla karşılaşır. Gerçek bir sunucuda sudo journalctl -u ssh --since "1 hour ago" | grep "Failed password" komutu çoğu zaman yüzlerce satır üretir: root, admin, pi, ubuntu, test gibi tahmin edilen kullanıcı adlarına denenen parolalar. Bu normaldir ve kişisel bir hedef anlamına gelmez; botlar tüm adres aralığını tarar. Önemli olan, parolayla girişin kapalı olmasıdır; o zaman bu denemeler sonuç vermez, yalnızca günlüğü kirletir. fail2ban'ın işi bu gürültüyü kesmek ve sunucunuzu gereksiz yükten korumaktır. Günlük okuma alışkanlığı için journalctl rehberine bakın.
fail2ban'ı yapılandırmak ve doğrulamak
Ayarları /etc/fail2ban/jail.local dosyasında tutun; jail.conf güncellemelerde ezilir. Örnek:
[sshd]
enabled = true
port = ssh
maxretry = 4
findtime = 10m
bantime = 1h
ignoreip = 127.0.0.1/8 192.168.1.0/24
ignoreip satırına kendi yerel ağınızı eklemek, kendinizi yanlışlıkla kilitlemenizi önler. Değişiklikten sonra sudo systemctl restart fail2ban çalıştırın. Durumu görmek için sudo fail2ban-client status sshd komutu engellenen adresleri ve toplam başarısız deneme sayısını gösterir. Bir adresin engelini kaldırmak için sudo fail2ban-client set sshd unbanip ADRES kullanılır.
Doğrulamanın en iyi yolu, başka bir cihazdan bilerek birkaç kez yanlış parola denemektir (anahtar girişi zorunluysa ssh -o PubkeyAuthentication=no ile). Eşik aşılınca bağlantı reddedilmeye başlamalıdır. Bu testi, UFW ile birlikte kullanıyorsanız kuralların çakışmadığını görmek için de yapın (UFW rehberi).
Kendinizi kilitlemeden değişiklik yapmak
SSH ayarlarında en büyük risk, kendi erişiminizi kaybetmektir. Güvenli bir sıra izleyin: (1) mevcut oturumu açık bırakın; (2) yeni bir terminal açıp anahtarla girişi test edin; (3) ancak o çalışıyorsa parolayı kapatın ve sudo sshd -t ile yapılandırmayı doğrulayın; (4) servisi yeniden yükleyin; (5) ikinci bir terminalden tekrar giriş deneyin; (6) başarılıysa eski oturumu kapatın. Uzaktaki bir sunucuda bu sırayı atlayıp yapılandırmayı bozmak, fiziksel erişim gerektiren bir sorun yaratabilir.
Sık sorulan sorular
Port değiştirmek güvenlik sağlar mı? Gürültüyü azaltır, güvenlik sağlamaz. Tarama yapan biri tüm portlara bakar. Asıl koruma anahtar girişi ve parolanın kapatılmasıdır.
fail2ban tek başına yeterli mi? Hayır; anahtar girişi, güncel sistem ve güvenlik duvarıyla birlikte bir katmandır. Parolayla girişi açık bırakıp yalnızca fail2ban'a güvenmek zayıf bir stratejidir.
IPv6 ile ilgili özel bir durum var mı? Eski sürümler yalnızca IPv4'ü yönetir; güncel sürümler ikisini de destekler. fail2ban-client status çıktısında IPv6 adreslerinin de göründüğünü kontrol edin.
Anahtarımı kaybedersem? Yedek bir anahtar tanımlamamışsanız konsol ya da fiziksel erişime ihtiyaç duyarsınız. Özel anahtarın şifreli bir yedeğini güvenli bir yerde tutun ve en az iki yönetici anahtarı ekleyin.