sshd Sunucu Ayarları

Bir önceki bölümde istemciyi nasıl kullanacağımızı ve nasıl ayarlayacağımızı gördük. Bu kısımda sunucu üzerinde OpenSSH ayarlamalarını nasıl yapacağımızı göreceğiz.

Genellikle sunucular üzerinde ssh sunucusu yüklü gelir, ancak bazı sistemlerde (örneğin masaüstü sistemlerde) gelmemesi halinde paket yöneticinizden edinebilirsiniz.

Örneğin Ubuntu masaüstü sistemler için aşağıdaki komut ilgili paketleri yükleyecektir.

apt-get install openssh-server

sshd_config Dosyası

SSH sunucusunun (sshd - SSH daemon) davranışını kontrol eden ana yapılandırma dosyası genellikle /etc/ssh/sshd_config yolunda bulunur. Bu dosyada yapılan değişikliklerin geçerli olması için sshd servisinin yeniden yüklenmesi (reload) veya yeniden başlatılması (restart) gerekir.

Buradaki seçenekler istemcide kullanılana benzerdir, ancak bazı noktaların üzerinden geçmekte fayda var.

sshd_config dosyası hakkında yardım dosyalarına erişmek için

man 5 sshd_config

Aşağıda sıkça değiştirilen veya güvenlik açısından önemli olan bazı seçenekler açıklanmıştır. Dosyadaki varsayılan değerler genellikle # ile yorum satırı halindedir; değiştirmek için # işaretini kaldırıp istediğiniz değeri yazmalısınız.

Port

SSH sunucusunun dinleyeceği port numarasını belirtir. Varsayılan değer 22'dir. Güvenlik amacıyla (otomatik saldırıları azaltmak için) bu portu standart olmayan bir porta (örn. 2222) değiştirmek yaygın bir pratiktir.

Port 2222 

Portu değiştirirseniz, istemciden bağlanırken -p seçeneği ile yeni portu belirtmeniz gerekir (ssh kullanici@sunucu -p 2222) ve sunucu güvenlik duvarında (firewall) bu porta izin vermelisiniz.

Protocol

Kullanılacak SSH protokol sürümünü belirtir. SSHv1 güvensizdir ve kesinlikle kullanılmamalıdır.

Protocol 2

Modern sistemlerde bu genellikle varsayılandır veya belirtilmese bile sadece v2 kullanılır.

Root Girişi (PermitRootLogin)

root kullanıcısının SSH üzerinden doğrudan bağlanıp bağlanamayacağını kontrol eder. Güvenlik açısından doğrudan root girişini engellemek şiddetle tavsiye edilir. Bunun yerine normal bir kullanıcı ile bağlanıp, sudo veya su komutları ile root yetkisi alınmalıdır.

# En güvenli seçenek: Root girişini tamamen engelle
PermitRootLogin no

# Sadece anahtar tabanlı root girişine izin ver, şifre ile girişi engelle
# PermitRootLogin prohibit-password 
# (veya eski sürümlerde: PermitRootLogin without-password)

# Hem şifre hem anahtarla root girişine izin ver (TAVSİYE EDİLMEZ!)
# PermitRootLogin yes 

Şifre ile Kimlik Doğrulama (PasswordAuthentication)

Şifre kullanarak SSH bağlantısına izin verilip verilmeyeceğini belirler. Anahtar tabanlı kimlik doğrulama (daha güvenli) kullanılıyorsa, şifre ile kimlik doğrulamayı kapatmak güvenliği artırır.

# Şifre ile girişi kapat (Anahtar kullanılmalı)
PasswordAuthentication no

# Şifre ile girişe izin ver (Anahtar yoksa veya tercih edilirse)
# PasswordAuthentication yes 

Not: Şifre ile girişi kapatmadan önce, en az bir kullanıcı için anahtar tabanlı girişin çalıştığından emin olun, aksi takdirde sunucuya erişiminizi kaybedebilirsiniz!

Boş Şifre Kullanımı (PermitEmptyPasswords)

Boş şifreye sahip kullanıcıların SSH ile bağlanıp bağlanamayacağını belirler. Güvenlik nedeniyle daima no olarak ayarlanmalıdır.

PermitEmptyPasswords no

Bağlantıyı Canlı Tutma (KeepAlive)

İstemci ile sunucu arasındaki bağlantı belirli süre sonra öldürülebilir. Bunun için sunucunuzda aşağıdaki parametreleri düzenleyebilirsiniz.

ClientAliveInterval 300
ClientAliveCountMax 0

Yukarıdaki sunucu ayarında istemciden 5 dakikada bir (300 saniye) alive sinyali beklenir. Eğer bu sinyali 0 defa göndermezse bağlantı kesilir.

Bu ayarlamaya sahip bir sunucuya bağlanırken ssh istemcinizde

ssh -o ServerAliveInterval=300 -o ServerAliveCountMax=0 sunucu-adi

şeklinde bir kullanıma ihtiyaç duyarsınız. Tabii bu ayarları /etc/ssh/ssh_config dosyanıza kaydedebilirsiniz de.

Bir diğer bağlantı canlılığı, şifre sorulduğu anda gerçekleşir. Şifre sorgu ekranının ne kadar süreyle aktif kalacağını LoginGraceTime değeriyle düzenleyebilirsiniz.

LoginGraceTime 60

Yukarıdaki ayar ile kullanıcı 1 dakika içerisinde giriş bilgilerini girmezse sunucudan bağlantısı kesilir. Sonsuza kadar bu süreyi uzatmak için 0 değeri girmek yeterlidir.

Dosya İzin Kontrolleri (StrictModes)

SSH sunucusunun, kullanıcının ev dizini, .ssh dizini ve authorized_keys dosyası gibi dosyaların izinlerini kontrol edip etmeyeceğini belirler. yes olarak ayarlanması (varsayılan), bu dosyaların izinleri güvensizse (örn. başkaları tarafından yazılabilirse) anahtar tabanlı kimlik doğrulamayı reddeder. Güvenlik için yes olarak kalması önerilir.

StrictModes yes

X11 Forwarding (X11Forwarding)

Uzak sunucudaki grafiksel uygulamaların (X11) arayüzünün, güvenli SSH tüneli üzerinden yerel makinenize yönlendirilip yönlendirilmeyeceğini belirler. Güvenlik riskleri oluşturabileceğinden, gerekmiyorsa no olarak ayarlanabilir.

X11Forwarding yes

İstemcide bağlanırken -X (güvenilir) veya -Y (daha az güvenli ama bazı uygulamalar için gerekli olabilir) parametresi kullanılır.

Diğer Önemli Ayarlar

  • PubkeyAuthentication yes: Açık anahtar ile kimlik doğrulamayı etkinleştirir (genellikle varsayılan).

  • AllowUsers / AllowGroups: Sadece belirtilen kullanıcıların veya grupların SSH ile bağlanmasına izin verir. Güvenliği artırmak için kullanılabilir (örn. AllowUsers kullanici1 admin).

  • DenyUsers / DenyGroups: Belirtilen kullanıcıların veya grupların SSH ile bağlanmasını engeller.

  • MaxAuthTries: Bir bağlantı için izin verilen maksimum kimlik doğrulama denemesi sayısını sınırlar (örn. 3). Brute-force saldırılarını yavaşlatır.

  • UsePAM yes: Kimlik doğrulama için PAM (Pluggable Authentication Modules) kullanımını etkinleştirir. Çoğu sistemde varsayılan ve gereklidir (örn. /etc/pam.d/sshd yapılandırmasını kullanır).

  • HostKey: Sunucunun kimliğini doğrulamak için kullanacağı özel anahtar dosyalarının yollarını belirtir (örn. /etc/ssh/ssh_host_ed25519_key).

  • HostKeyAlgorithms / PubkeyAcceptedKeyTypes / KexAlgorithms / Ciphers / MACs: Güvenlik politikalarına göre izin verilen anahtar türlerini, anahtar değişim algoritmalarını, şifreleme algoritmalarını ve mesaj doğrulama kodlarını kısıtlamak için kullanılabilir. Modern ve güvenli algoritmaları (örn. Ed25519, ChaCha20-Poly1305) tercih edip eskileri (örn. DSA, SHA1, CBC) devre dışı bırakmak önerilir.

Ayarları Uygulama

/etc/ssh/sshd_config dosyasında değişiklik yaptıktan sonra, yapılandırmanın geçerli olup olmadığını kontrol etmek ve servisi yeniden yüklemek/başlatmak gerekir:

# Yapılandırma dosyasının sözdizimini kontrol et
sudo sshd -t

# Eğer hata yoksa, sshd servisini yeniden yükle (genellikle yeterlidir)
sudo systemctl reload sshd
# veya yeniden başlat (gerekirse)
# sudo systemctl restart sshd 

Servis adı dağıtıma göre ssh veya sshd olabilir (systemctl status sshd veya systemctl status ssh ile kontrol edilebilir).

Last updated