SSH (Secure Shell), uzak sistemlere güvenli bir şekilde erişim sağlamak için yaygın olarak kullanılan bir protokoldür. Ancak, düzgün yapılandırılmadığında güvenlik açıkları yaratabilir. Bu makalede, SSH sunucusunu güvence altına almak için en iyi uygulamaları ve önerilen yapılandırmaları ele alacağız.

1. Anahtar Tabanlı Kimlik Doğrulama (Key-Based Authentication)

Şifre yerine anahtar tabanlı kimlik doğrulama kullanmak, SSH güvenliğini önemli ölçüde artırır. Bu yöntem, bir özel anahtar ve bir genel anahtar çiftinin kullanılmasını gerektirir. Özel anahtar, güvenli bir şekilde saklanırken, genel anahtar sunucunun authorized_keys dosyasına eklenir.

Yapılandırma Adımları:

  • SSH Anahtar Çifti Oluşturma:
Bash
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

Bu komut, 4096 bitlik bir RSA anahtar çifti oluşturur.

  • Genel Anahtarı Sunucuya Kopyalama:
Bash
ssh-copy-id user@remote_server

Alternatif olarak, genel anahtar (~/.ssh/id_rsa.pub) manuel olarak sunucunun ~/.ssh/authorized_keys dosyasına eklenebilir.

Aşağıdaki komutlar yeni bir kullanıcı oluşturur ve genel anahahtarınızı eklemeniz için gerekli adımları gerçekleştirir. Genel anahatarınız kopyalayıp, kaydediniz. (Kaydetmek için : CTRL+O, Çıkış için : CTRL+X)

Bash
useradd -m --shell /bin/bash sshuser
mkdir /home/sshuser/.ssh
chmod 700 /home/sshuser/.ssh
touch /home/sshuser/.ssh/authorized_keys
chmod 600 /home/sshuser/.ssh/authorized_keys
chown sshuser:sshuser -R /home/sshuser
nano /home/sshuser/.ssh/authorized_keys

2. SSH Yapılandırmasında Değişiklik Yapma

/etc/ssh/sshd_config dosyasındaki aşağıdaki satırları kontrol edin veya ekleyin:

Bash
sudo nano /etc/ssh/sshd_config
Bash
PubkeyAuthentication yes
PasswordAuthentication no

3. Varsayılan Portu Değiştirme

SSH portunu değiştirmek, saldırganların yaygın olarak kullandığı 22 numaralı portu hedef almasını engeller. Bu, brute force saldırılarını zorlaştırır ve sunucunuzun tespit edilmesini geciktirir, böylece güvenliği artırır.

Bash
Port 22122

4. Root Girişini Devre Dışı Bırakma

Root kullanıcısının SSH üzerinden giriş yapmasını engellemek, önemli bir güvenlik önlemidir. Bunun yerine, sudo veya su komutlarıyla ayrıcalıklı erişim sağlanmalıdır.

Bash
PermitRootLogin no

5. Protokol 2 Kullanımı Aktif Etme

Protokol 2, daha güvenli şifreleme ve doğrulama sunar. Protokol 1 ise eski ve güvenlik açıklarına sahip olduğu için kullanılmamalıdır.

Bash
Protocol 2

6. X11 Forwarding’i Devre Dışı Bırakma

X11 Forwarding, GUI uygulamalarını SSH üzerinden çalıştırmak için kullanılır, ancak güvenlik riskleri taşır. Eğer gerek yoksa, devre dışı bırakın.

Bash
X11Forwarding no

7. Kullanıcı Erişimini Kısıtlama

SSH erişimini sadece belirli kullanıcılar veya gruplarla sınırlamak, sunucunun güvenliğini artırır.

Bash
AllowUsers user1 user2
AllowGroups sshusers

8. Zaman Aşımı ve Bağlantı Sınırlarını Yapılandırma

Zaman aşımı ve bağlantı limitleri, kötüye kullanımı sınırlamak ve kaynak tüketimini engellemek için gereklidir.

Bash
#Sunucu, her 5 dakikada bir istemciye bağlantının aktif olup olmadığını kontrol etmek için mesaj gönderir.
ClientAliveInterval 300

# İstemci 3 kez yanıt vermezse, bağlantı otomatik olarak kesilir.
ClientAliveCountMax 3

# Bir SSH oturumu sırasında kimlik doğrulama için yapılabilecek maksimum deneme sayısını 10 ile sınırlar.
MaxAuthTries 10

#Her SSH bağlantısı üzerinden açılabilecek maksimum aktif oturum sayısını 2 ile sınırlar.
MaxSessions 2

Örnek SSH Yapılandırma Dosyası (/etc/ssh/sshd_config)

Aşağıdaki örnek, yukarıdaki güvenlik önlemleriyle ilgili tüm yapılandırmaları içermektedir:

Bash
# Diğer yapılandırma dosyalarından ayarları dahil et
Include /etc/ssh/sshd_config.d/*.conf

# SSH bağlantı noktası olarak varsayılan 22 yerine 2222'yi kullan
Port 22122

# Root kullanıcısının SSH üzerinden giriş yapmasını engelle
PermitRootLogin no

# Sadece SSH protokol 2'yi kullan, protokol 1 güvenlik açıkları içeriyor
Protocol 2

# PAM (Pluggable Authentication Modules) kullanımını etkinleştir
# Bu ayar, sistemdeki kimlik doğrulama modüllerinin kullanılmasını sağlar.
UsePAM yes

# Bu ayar, kullanıcıların SSH ile bağlandığında sunucuya özgü bir mesaj görmesini engeller.
PrintMotd no

# X11 Forwarding'i devre dışı bırak (GUI uygulamaları gerekmiyorsa)
X11Forwarding no

# Sadece belirli kullanıcıların ve grupların SSH ile bağlanmasına izin ver
AllowUsers user1 user2              # Yetkili kullanıcıları giriniz
AllowGroups sshusers                # Yetkili grupları giriniz

# Bağlantı zaman aşımını ve bağlantı limitlerini yapılandır
# Sunucu, her 5 dakikada bir istemciye bağlantının aktif olup olmadığını kontrol etmek için mesaj gönderir
ClientAliveInterval 300

# İstemci 3 kez yanıt vermezse, bağlantı otomatik olarak kesilir
ClientAliveCountMax 3

# Bir SSH oturumu sırasında kimlik doğrulama için yapılabilecek maksimum deneme sayısını 10 ile sınırlar
MaxAuthTries 10

# Her SSH bağlantısı üzerinden açılabilecek maksimum aktif oturum sayısını 2 ile sınırlar
MaxSessions 2

# Bu ayar, kullanıcıların dil ayarlarını içeren çevresel değişkenlerin (LANG ve LC_*) sunucuya iletilmesini sağlar.
AcceptEnv LANG LC_*

# SFTP'nin (SSH dosya transfer protokolü) kullanılacağı yolu belirler
# Bu ayar, SFTP sunucusunun kullanılacak yolunu belirtir.
Subsystem       sftp    /usr/lib/openssh/sftp-server

Ayarları kaydedip sistemi yeniden başlatın

Bash
systemctl restart sshd