Skip to content
Back to blog
Teknoloji SSH Güvenlik Anahtar Tabanlı Giriş Linux Sunucu Yönetimi OpenSSH Brute Force Yetkilendirme Mistral

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:

  1. Ö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.
  2. 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

  1. Kullanıcı, SSH istemcisi aracılığıyla sunucuya bağlanmak istediğinde, özel anahtarını kullanarak bir imza oluşturur.
  2. Sunucu, bu imzayı public anahtarla doğrular.
  3. 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:

  1. Anahtar dosyasının kaydedileceği konumu seçin. Varsayılan olarak ~/.ssh/id_rsa konumuna kaydedilir. Özel bir konum tercih ediyorsanız, yolu belirtin.

  2. 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:
  3. Anahtar çifti oluşturuldu. Artık ~/.ssh/ dizininde id_rsa (özel anahtar) ve id_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:

  1. Public anahtarınızın içeriğini kopyalayın:

    cat ~/.ssh/id_rsa.pub
  2. Sunucuya bağlanın:

    ssh kullanici@sunucu-ip-adresi
  3. Sunucuda ~/.ssh dizinini oluşturun (eğer yoksa):

    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
  4. authorized_keys dosyası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_keys dosyası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_keys dosyası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_keys dosyasına aşağıdaki gibi bir satır ekleyebilirsiniz:
    command="",no-agent-forwarding,no-port-forwarding,no-X11-forwarding,no-pty ssh-rsa AAAAB3NzaC1yc2E... [email protected]
    Bu, anahtarın sadece belirli komutları çalıştırmasına izin verir ve diğer SSH özelliklerini devre dışı bırakır.

7. Anahtarların İzlenmesi ve Güncellenmesi

  • Sunucunuzda bulunan authorized_keys dosyası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.allow ve /etc/hosts.deny dosyaları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:

  • ~/.ssh dizinine ve authorized_keys dosyasına doğru izinleri verin:
    chmod 700 ~/.ssh
    chmod 600 ~/.ssh/authorized_keys
  • Sunucuda sshd_config dosyasını kontrol edin ve PubkeyAuthentication yes satı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_keys dosyasının içeriğini kontrol edin:
    cat ~/.ssh/authorized_keys
  • Eğer anahtar doğru şekilde eklenmişse, sunucuda sshd servisinin 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.