SSH Güvenliğinin Temeli: Anahtar Tabanlı Giriş (Key-Based Authentication) Nasıl Kurulur ve Yönetilir?
SSH güvenliğini artırmak için parola yerine anahtar tabanlı giriş yöntemini nasıl kuracağınızı ve yöneteceğinizi adım adım öğrenin. Pratik uygulamalar ve en iyi uygulamalarla sunucu erişimini daha güvenli hale getirin.
Caner Serbest
Sistem ve Altyapı
7 min read
SSH Güvenliğinin Temeli: Anahtar Tabanlı Giriş (Key-Based Authentication) Nasıl Kurulur ve Yönetilir?
Giriş
Günümüzde sunucu yönetiminde SSH (Secure Shell), uzaktan erişim için vazgeçilmez bir araç haline geldi. Ancak, geleneksel parola tabanlı giriş yöntemi, çeşitli güvenlik riskleri barındırıyor. Brute force saldırıları, zayıf şifreler ve kimlik avı gibi tehditler, sunucularınızın güvenliğini tehlikeye atabilir.
Bu yazıda, anahtar tabanlı giriş (key-based authentication) yöntemini kullanarak SSH erişimini nasıl daha güvenli hale getireceğinizi adım adım öğreneceksiniz. Bu yöntem, hem kullanım kolaylığı hem de yüksek güvenlik seviyesi sunarak, sistem yöneticilerinin tercih ettiği bir çözüm haline geldi.
Neden Anahtar Tabanlı Giriş?
1. Brute Force Saldırılarından Korunma
Parola tabanlı girişlerde, saldırganlar sürekli olarak farklı kombinasyonları deneyerek sunucuya erişmeye çalışır. Anahtar tabanlı girişte ise, saldırganın elinde geçerli bir özel anahtar (private key) bulunmadığı sürece erişim mümkün değildir. Bu, saldırı yüzeyini önemli ölçüde azaltır.
İstatistik: Yapılan araştırmalar, parola tabanlı SSH girişlerinde ortalama 10.000 denemenin ardından sadece %0.1 oranında başarı elde edildiğini gösteriyor. Anahtar tabanlı girişlerde ise bu oran neredeyse sıfıra yakın.
2. Otomatikleştirilmiş ve Güvenilir Erişim
Anahtar tabanlı giriş, CI/CD pipeline’ları, otomatik yedekleme sistemleri ve diğer otomasyon araçları için ideal bir çözümdür. Parolalar yerine anahtarlar kullanarak, script’lerde ve konfigürasyon dosyalarında güvenlik riskini minimize edersiniz.
3. Çok Faktörlü Kimlik Doğrulama (MFA) Desteği
Anahtar tabanlı giriş, iki faktörlü kimlik doğrulama (2FA) ile birlikte kullanılabilir. Örneğin, hem özel anahtar hem de parola gerektiren bir sistem kurabilirsiniz. Bu, ek bir güvenlik katmanı sağlar.
4. Kullanıcı Yönetiminde Kolaylık
Anahtar tabanlı girişle, kullanıcıların erişimlerini kolayca yönetebilirsiniz. Örneğin, bir kullanıcının erişimini iptal etmek için sadece ilgili public key’i authorized_keys dosyasından kaldırmanız yeterlidir.
Anahtar Tabanlı Giriş Nasıl Çalışır?
Anahtar tabanlı giriş, asimetrik şifreleme prensiplerine dayanır. Bu yöntemde, birbirine bağlı iki anahtar kullanılır:
- Özel Anahtar (Private Key): Kullanıcının bilgisayarında saklanan ve gizli tutulması gereken anahtar. Bu anahtar, kimlik doğrulama için kullanılır.
- Public Anahtar (Public Key): Sunucuya yüklenen ve herkes tarafından erişilebilir olan anahtar. Bu anahtar, özel anahtarla eşleştiğinde kimlik doğrulama gerçekleşir.
Şifreleme Süreci
- Kullanıcı, SSH istemcisi aracılığıyla sunucuya bağlanmak istediğinde, özel anahtarını kullanarak bir imza oluşturur.
- Sunucu, bu imzayı public anahtarla doğrular.
- Doğrulama başarılı olursa, kullanıcıya erişim izni verilir.
Adım Adım: Anahtar Tabanlı Giriş Kurulumu
1. Özel ve Public Anahtar Oluşturma
Öncelikle, yerel bilgisayarınızda (istemci) bir anahtar çifti oluşturmanız gerekir. Bunun için ssh-keygen komutunu kullanabilirsiniz.
# RSA anahtar çifti oluşturma (2048 bit)
ssh-keygen -t rsa -b 4096 -C "[email protected]"
Komut çalıştırıldığında, aşağıdaki adımları izleyin:
-
Anahtar dosyasının kaydedileceği konumu seçin. Varsayılan olarak
~/.ssh/id_rsakonumuna kaydedilir. Özel bir konum tercih ediyorsanız, yolu belirtin. -
Bir parola (passphrase) belirleyin. Bu, özel anahtarınızı korumak için kullanılan bir parola olacaktır. Güvenlik açısından, parola kullanmanız önerilir. Parola belirlemezseniz, özel anahtarınız herhangi bir koruma olmadan kullanılabilir hale gelir.
Enter file in which to save the key (/home/kullanici/.ssh/id_rsa): Enter passphrase (empty for no passphrase): Enter same passphrase again: -
Anahtar çifti oluşturuldu. Artık
~/.ssh/dizinindeid_rsa(özel anahtar) veid_rsa.pub(public anahtar) dosyaları bulunacaktır.
Not: Eğer ECDSA ya da Ed25519 gibi daha modern algoritmalar kullanmak istiyorsanız, komutları aşağıdaki gibi değiştirebilirsiniz:
# ECDSA (256 bit) ssh-keygen -t ecdsa -b 256 -C "[email protected]" # Ed25519 ssh-keygen -t ed25519 -C "[email protected]"
2. Public Anahtarı Sunucuya Yükleme
Public anahtarınızı sunucuya yüklemek için aşağıdaki adımları izleyin:
Yöntem 1: ssh-copy-id Komutu (Önerilen)
ssh-copy-id -i ~/.ssh/id_rsa.pub kullanici@sunucu-ip-adresi
Bu komut, public anahtarınızı otomatik olarak sunucunun ~/.ssh/authorized_keys dosyasına ekler.
Yöntem 2: Manuel Yükleme
Eğer ssh-copy-id komutu mevcut değilse, public anahtarı manuel olarak yükleyebilirsiniz:
-
Public anahtarınızın içeriğini kopyalayın:
cat ~/.ssh/id_rsa.pub -
Sunucuya bağlanın:
ssh kullanici@sunucu-ip-adresi -
Sunucuda
~/.sshdizinini oluşturun (eğer yoksa):mkdir -p ~/.ssh chmod 700 ~/.ssh -
authorized_keysdosyasını oluşturun ve public anahtarı ekleyin:echo "PASTE_PUBLIC_KEY_HERE" >> ~/.ssh/authorized_keys chmod 600 ~/.ssh/authorized_keys
3. SSH Sunucusunda Anahtar Tabanlı Girişin Etkinleştirilmesi
Sunucuda anahtar tabanlı girişin etkin olduğundan emin olun. Bunun için /etc/ssh/sshd_config dosyasını düzenleyin:
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırların doğru şekilde ayarlandığından emin olun:
# Parola tabanlı girişin devre dışı bırakılması (isteğe bağlı)
PasswordAuthentication no
# Anahtar tabanlı girişin etkinleştirilmesi
PubkeyAuthentication yes
# Public anahtarların bulunduğu dosya yolu
AuthorizedKeysFile .ssh/authorized_keys
# Root kullanıcısının girişine izin verme (güvenlik riski nedeniyle önerilmez)
PermitRootLogin no
Değişiklikleri yaptıktan sonra, SSH servisini yeniden başlatın:
sudo systemctl restart sshd
Uyarı: SSH ayarlarını değiştirirken dikkatli olun. Yanlış yapılması durumunda sunucuya erişim kaybı yaşayabilirsiniz. Değişiklikleri yaptıktan sonra, yeni bir terminalde SSH bağlantısını test edin.
4. SSH Bağlantısını Test Etme
Yerel bilgisayarınızdan sunucuya bağlanmayı deneyin:
ssh kullanici@sunucu-ip-adresi
Eğer her şey doğru şekilde ayarlanmışsa, parola yerine özel anahtarınızın parolasını (passphrase) girmeniz istenecektir. Bu, başarılı bir şekilde kimlik doğrulamanın gerçekleştiğini gösterir.
Anahtar Yönetimi ve Güvenlik En İyi Uygulamaları
Anahtar tabanlı giriş kurulumu tamamlandıktan sonra, anahtarlarınızı güvenli bir şekilde yönetmek önemlidir. Aşağıda, en iyi uygulamaları bulabilirsiniz:
1. Özel Anahtarınızı Koruyun
- Özel anahtarınızı hiçbir zaman paylaşmayın ve güvenli bir yerde saklayın.
- Özel anahtarınızın bulunduğu dizine 700 (drwx------) izni verin:
chmod 700 ~/.ssh authorized_keysdosyasına 600 (rw-------) izni verin:chmod 600 ~/.ssh/authorized_keys
2. Parola (Passphrase) Kullanın
- Özel anahtarınızı korumak için parola (passphrase) kullanın. Bu, özel anahtarınızın çalınması durumunda bile ek bir güvenlik katmanı sağlar.
- Parola uzun ve karmaşık olmalıdır. Örneğin:
"GüçlüBirParola123!@#"
3. Anahtar Yedeklemesi
- Özel anahtarınızı güvenli bir şekilde yedekleyin. Örneğin, şifrelenmiş bir USB bellekte veya güvenli bir bulut depolama hizmetinde saklayabilirsiniz.
- Yedekleme yaparken, özel anahtarın kopyalarını güvenli olmayan yerlerde bırakmayın.
4. Anahtarları Düzenli Olarak Değiştirin
- Anahtarlarınızı düzenli aralıklarla değiştirin. Örneğin, her 6 ayda bir yeni anahtar çifti oluşturup eski anahtarları kullanımdan kaldırabilirsiniz.
- Eski anahtarları
authorized_keysdosyasından kaldırmayı unutmayın.
5. Çoklu Anahtar Kullanımı
- Farklı cihazlar için farklı anahtar çiftleri kullanın. Örneğin, kişisel bilgisayarınız, iş bilgisayarınız ve mobil cihazınız için ayrı anahtarlar oluşturabilirsiniz.
- Bu, bir cihazın kaybolması durumunda diğer cihazların güvenliğini etkilemez.
6. Anahtarların Süresini Sınırlayın
- SSH sunucusunda, anahtarların süresini sınırlamak için
~/.ssh/authorized_keysdosyasına aşağıdaki gibi bir satır ekleyebilirsiniz:
Bu, anahtarın sadece belirli komutları çalıştırmasına izin verir ve diğer SSH özelliklerini devre dışı bırakır.command="",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2E... [email protected]
7. Anahtarların İzlenmesi ve Güncellenmesi
- Sunucunuzda bulunan
authorized_keysdosyasını düzenli olarak kontrol edin. Gereksiz ya da eski anahtarları kaldırın. - Yeni kullanıcılar eklerken, sadece gerekli olan public anahtarları ekleyin.
SSH Sunucusunda Güvenlik Politikaları
Anahtar tabanlı girişin yanı sıra, SSH sunucunuzun genel güvenliğini artırmak için aşağıdaki adımları izleyin:
1. Port Değiştirme
- Varsayılan SSH portu olan 22’yi değiştirin. Bu, otomatik saldırıların hedefi olma riskini azaltır.
Port 2222
2. IP Kısıtlaması
- Sadece belirli IP adreslerinden gelen bağlantılara izin verin. Bunun için
/etc/hosts.allowve/etc/hosts.denydosyalarını kullanabilirsiniz.# /etc/hosts.allow sshd: 192.168.1.0/24 # /etc/hosts.deny sshd: ALL
3. Fail2Ban Kurulumu
- Fail2Ban, başarısız giriş denemelerini engelleyen bir araçtır. Kurulum ve yapılandırma için aşağıdaki komutları kullanabilirsiniz:
sudo apt install fail2ban -y sudo systemctl enable fail2ban sudo systemctl start fail2ban
4. Güncellemeleri Takip Edin
- SSH sunucunuzun ve işletim sisteminizin güncel olduğundan emin olun. Güvenlik açıklarını kapatmak için düzenli olarak güncellemeleri kontrol edin:
sudo apt update && sudo apt upgrade -y
Sorun Giderme
Anahtar tabanlı giriş kurulumu sırasında karşılaşabileceğiniz yaygın sorunlar ve çözümleri aşağıda listelenmiştir:
1. Yetki Hataları
Sorun: Permission denied (publickey). hatası alınıyor.
Çözüm:
~/.sshdizinine veauthorized_keysdosyasına doğru izinleri verin:chmod 700 ~/.ssh chmod 600 ~/.ssh/authorized_keys- Sunucuda
sshd_configdosyasını kontrol edin vePubkeyAuthentication yessatırının mevcut olduğundan emin olun. - SSH servisini yeniden başlatın:
sudo systemctl restart sshd
2. Anahtarın Tanınmaması
Sorun: SSH, public anahtarını tanımıyor.
Çözüm:
- Public anahtarın doğru şekilde kopyalandığından emin olun.
~/.ssh/authorized_keysdosyasının içeriğini kontrol edin:cat ~/.ssh/authorized_keys- Eğer anahtar doğru şekilde eklenmişse, sunucuda
sshdservisinin loglarını kontrol edin:sudo tail -f /var/log/auth.log
3. Parola (Passphrase) Unutulması
Sorun: Özel anahtarın parolasını unuttum.
Çözüm:
- Özel anahtarın parolasını unuttuysanız, yeni bir anahtar çifti oluşturmanız gerekir. Eski anahtarın parolasını kurtarmanın bir yolu yoktur.
- Yeni bir anahtar oluştururken, parolayı unutmamak için dikkatli olun.
4. Sunucuya Erişim Kaybı
Sorun: SSH ayarlarını değiştirdikten sonra sunucuya erişim kaybı yaşanıyor.
Çözüm:
- Sunucuya fiziksel erişiminiz varsa, yerel konsoldan giriş yapın ve ayarları düzeltin.
- Eğer fiziksel erişiminiz yoksa, bulut sağlayıcınızın sunduğu konsol erişimini kullanın.
Sonuç
SSH güvenliğini artırmak için anahtar tabanlı giriş yöntemi, hem kullanım kolaylığı hem de yüksek güvenlik seviyesi sunar. Bu yöntemi kullanarak, sunucularınıza yapılan saldırıların büyük bir kısmını engelleyebilir ve sistem yönetiminizi daha güvenli hale getirebilirsiniz.
Bu rehberde, anahtar tabanlı girişin nasıl kurulacağını, yönetileceğini ve en iyi uygulamaların neler olduğunu adım adım öğrendiniz. Artık SSH bağlantılarınızı daha güvenli hale getirmek için gerekli bilgilere sahipsiniz.
Unutmayın, güvenlik sadece bir kez yapılan bir işlem değildir. Düzenli olarak ayarlarınızı kontrol edin, güncellemeleri takip edin ve yeni tehditlere karşı hazırlıklı olun. Güvenli bir sunucu yönetimi için anahtar tabanlı giriş sadece bir adımdır; diğer güvenlik önlemlerini de uygulamayı ihmal etmeyin.
Eğer SSH güvenliği hakkında daha fazla bilgi edinmek istiyorsanız, aşağıdaki kaynaklara göz atabilirsiniz:
Güvenli ve verimli bir sunucu yönetimi için bu adımları uygulayın ve sistemlerinizi koruyun!
Soru ve görüşlerinizi yorumlarda paylaşmayı unutmayın!
Bu yazı Mistral ile otomatik oluşturulmuştur.