Takip et

Giriş: SSH Daemon Yapılandırmasının Önemi

Giriş: SSH Daemon Yapılandırmasının Önemi Linux VPS (Sanal Özel Sunucu) yönetimi, modern BT altyapılarının temel taşlarından bir

Giriş: SSH Daemon Yapılandırmasının Önemi

Linux VPS (Sanal Özel Sunucu) yönetimi, modern BT altyapılarının temel taşlarından biridir. Bu sunuculara uzaktan güvenli bir şekilde erişmek için kullanılan standart protokol ise Güvenli Kabuk (SSH) protokolüdür. SSH, şifreli bir bağlantı sağlayarak veri transferini ve komut yürütmeyi güvenli hale getirir. Ancak, SSH daemon’ın (sshd) varsayılan yapılandırması her zaman en uygun veya en güvenli olmayabilir. Özellikle bir VPS ortamında, sunucunuzun güvenliği ve performansı doğrudan SSH yapılandırmanızla ilişkilidir.

Bu rehberde, SSH daemon yapılandırmanızı nasıl optimize edeceğinizi, hem güvenlik hem de performans açısından en iyi uygulamaları nasıl uygulayacağınızı adım adım inceleyeceğiz. Yanlış yapılandırılmış bir SSH servisi, sunucunuzu brute-force saldırılarına, yetkisiz erişime ve diğer siber tehditlere karşı savunmasız bırakabilir. Aynı zamanda, gereksiz özelliklerin açık kalması veya zayıf şifreleme algoritmalarının kullanılması performansı düşürebilir. Bu nedenle, sshd_config dosyasını doğru bir şekilde düzenlemek, her Linux VPS yöneticisinin bilmesi gereken kritik bir beceridir.

SSH Daemon Yapılandırmasına Genel Bakış ve Temel Ayarlar

sshd_config Dosyası ve Konumu

SSH daemon’ın tüm yapılandırma ayarları genellikle /etc/ssh/sshd_config dosyasında bulunur. Bu dosya, SSH sunucusunun nasıl davranacağını, hangi portu dinleyeceğini, hangi kimlik doğrulama yöntemlerini kabul edeceğini ve daha birçok kritik ayarı belirler. Bu dosyayı düzenlemeden önce daima bir yedek almanız şiddetle tavsiye edilir. Böylece, olası bir hatada kolayca geri dönebilirsiniz.

# Yapılandırma dosyasının yedeklenmesi
sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak

Yapılandırma dosyasını düzenlemek için bir metin düzenleyici açma (örneğin nano)

sudo nano /etc/ssh/sshd_config

Güvenliğin Temelleri: Port Değişimi ve Root Erişimi

SSH güvenliğinizin ilk adımı, varsayılan ayarları değiştirmektir. Özellikle iki ayar kritik öneme sahiptir:

  • Port Değişimi: SSH varsayılan olarak 22 numaralı portu kullanır. Bu durum, otomatik botların ve saldırganların ilk hedefi haline gelmenize neden olur. Portu standart olmayan yüksek numaralı bir porta (örneğin, 2222, 22001, 49152-65535 aralığından bir port) değiştirmek, otomatik taramaların ve basit brute-force saldırılarının büyük bir kısmını engeller.
  • Root Erişimi: Root kullanıcısı, Linux sistemlerinde en yüksek ayrıcalıklara sahip kullanıcıdır. Root olarak doğrudan SSH üzerinden giriş yapmak, bir saldırganın root parolasını ele geçirmesi durumunda sunucunuz üzerinde tam kontrole sahip olacağı anlamına gelir. Bu nedenle, root girişini devre dışı bırakmak ve normal bir kullanıcı hesabı üzerinden giriş yapıp gerektiğinde sudo kullanmak en güvenli yaklaşımdır.
# Port numarasını 22'den farklı bir porta değiştirin (örneğin 2222)
- #Port 22
+ Port 2222

Root kullanıcısının doğrudan SSH ile giriş yapmasını engelleyin

"prohibit-password" anahtar tabanlı kimlik doğrulamasına izin verir, parola tabanlıya izin vermez.

"no" ise root girişini tamamen engeller.

- #PermitRootLogin yes + PermitRootLogin prohibit-password

Port değişikliği yaptıktan sonra, güvenlik duvarınızda (örneğin UFW veya firewalld) yeni portu açmayı unutmayın. Aksi takdirde sunucunuza erişemezsiniz.

Kimlik Doğrulama Yöntemleri: Parola ve Anahtar Tabanlı

SSH, kullanıcıların kimliğini doğrulamak için farklı yöntemler sunar. En yaygın olanları parola tabanlı ve anahtar tabanlı kimlik doğrulamadır:

  • Parola Tabanlı Kimlik Doğrulama: Kullanıcı adı ve parola ile giriş yapılır. Brute-force saldırılarına karşı savunmasızdır.
  • Anahtar Tabanlı Kimlik Doğrulama: Bir çift şifreleme anahtarı (bir genel, bir özel) kullanır. Genel anahtar sunucuda bulunur, özel anahtar ise istemcide tutulur. Bu yöntem, parolalara göre çok daha güvenlidir ve şiddetle tavsiye edilir.

Anahtar tabanlı kimlik doğrulamayı etkinleştirdikten ve düzgün çalıştığından emin olduktan sonra, parola tabanlı kimlik doğrulamayı devre dışı bırakmanız önerilir.

# Genel anahtar kimlik doğrulamayı etkinleştirin (varsayılan olarak etkindir)
+ PubkeyAuthentication yes

Parola tabanlı kimlik doğrulamayı devre dışı bırakın

- PasswordAuthentication yes + PasswordAuthentication no

Boş parolalara izin vermeyin (önerilir)

+ PermitEmptyPasswords no

SSH anahtarı oluşturma ve sunucuya kopyalama hakkında daha fazla bilgi için ssh-keygen ve ssh-copy-id komutlarını araştırmalısınız.

Ek Güvenlik Katmanları: AllowUsers, DenyUsers, AllowGroups, DenyGroups

SSH erişimini belirli kullanıcılar veya kullanıcı gruplarıyla sınırlayarak sunucunuzun güvenliğini artırabilirsiniz. Bu direktifler, yalnızca belirtilen kullanıcıların veya grupların SSH üzerinden giriş yapmasına izin verir veya bunları engeller.

  • AllowUsers: Sadece belirtilen kullanıcıların giriş yapmasına izin verir.
  • DenyUsers: Belirtilen kullanıcıların giriş yapmasını engeller.
  • AllowGroups: Sadece belirtilen grupların üyelerinin giriş yapmasına izin verir.
  • DenyGroups: Belirtilen grupların üyelerinin giriş yapmasını engeller.
# Sadece 'adminuser' ve 'devuser' kullanıcılarının SSH ile bağlanmasına izin verin
+ AllowUsers adminuser devuser

Veya sadece 'sshusers' grubunun üyelerinin SSH ile bağlanmasına izin verin

+ AllowGroups sshusers

Bu direktifleri kullanırken dikkatli olun; kendinizi sunucudan kilitlememek için erişiminizin olduğundan emin olun.

Performans ve Güvenilirlik İçin İleri Düzey SSH Ayarları

Oturum Yönetimi ve Zaman Aşımları

SSH oturumlarının nasıl yönetileceği ve ne kadar süre aktif kalacağı, hem güvenlik hem de kullanılabilirlik açısından önemlidir.

  • LoginGraceTime: Kimlik doğrulaması için tanınan süreyi belirler. Bu sürenin çok uzun olması, kimlik doğrulaması yapmayan bağlantıların sunucu kaynaklarını gereksiz yere meşgul etmesine neden olabilir.
  • ClientAliveInterval ve ClientAliveCountMax: İstemcinin hala bağlı olup olmadığını kontrol etmek için sunucunun gönderdiği “keep-alive” mesajlarını yapılandırır. Bu, boşta kalan oturumların otomatik olarak sonlandırılmasına yardımcı olur ve NAT cihazları arkasındaki bağlantıların kopmasını önler.
  • MaxAuthTries: Bir kullanıcı için izin verilen maksimum kimlik doğrulama denemesi sayısını sınırlar. Bu, brute-force saldırılarını yavaşlatmak için önemlidir.
  • MaxSessions: Bir ağ bağlantısı üzerinden izin verilen maksimum açık oturum sayısını belirler.
# Kimlik doğrulama için tanınan süreyi 30 saniyeye düşürün
- #LoginGraceTime 2m
+ LoginGraceTime 30s

İstemcinin aktif olup olmadığını kontrol etmek için 60 saniyede bir mesaj gönderin

+ ClientAliveInterval 60

Eğer 3 kez yanıt alınamazsa bağlantıyı sonlandırın (toplamda 180 saniye boşta kalma)

+ ClientAliveCountMax 3

Maksimum kimlik doğrulama denemesi sayısını 3 ile sınırlayın

+ MaxAuthTries 3

Bir bağlantı üzerinden maksimum 10 oturuma izin verin

+ MaxSessions 10

Bağlantı Limitleri ve Oran Sınırlamaları

DDoS (Dağıtılmış Hizmet Engelleme) veya yoğun brute-force saldırılarına karşı sunucunuzu korumak için bağlantı limitleri ayarlayabilirsiniz.

  • MaxStartups: Kimlik doğrulaması yapılmamış eşzamanlı bağlantıların maksimum sayısını belirler. Bu limit aşıldığında, yeni bağlantılar reddedilir. Bu, sunucunuzun kaynaklarını tüketen bağlantı saldırılarına karşı koruma sağlar. Genellikle 10’dan fazla olmaması önerilir.
  • MaxConnections: Bir SSH daemon örneği tarafından izin verilen maksimum eşzamanlı bağlantı sayısını belirler. Bu, sunucunun aşırı yüklenmesini önlemeye yardımcı olur.
# Eşzamanlı kimlik doğrulaması yapılmamış bağlantıların maksimum sayısını sınırlayın.

Örneğin, 10 eşzamanlı bağlantıya izin ver, ardından %30 ihtimalle reddetmeye başla

ve 20 bağlantıdan sonra tüm yeni bağlantıları reddet.

- #MaxStartups 10:30:60 + MaxStartups 10:30:20

Maksimum eşzamanlı bağlantı sayısını 100 ile sınırlayın

+ MaxConnections 100

Şifreleme Algoritmaları ve Anahtar Değişimi

SSH bağlantısının güvenliği, kullanılan şifreleme algoritmalarına bağlıdır. Eski veya zayıf algoritmalar güvenlik açıklarına yol açabilir. Sadece modern ve güçlü algoritmaları kullanmak, bağlantılarınızın şifrelenmesini ve bütünlüğünü sağlar.

  • Ciphers: Veri şifrelemesi için kullanılan algoritmaları belirtir.
  • MACs (Message Authentication Codes): Mesajların bütünlüğünü sağlamak için kullanılan algoritmaları belirtir.
  • KexAlgorithms (Key Exchange Algorithms): Anahtar değişimi için kullanılan algoritmaları belirtir.

Bu ayarları yapılandırırken, istemcinizin de bu algoritmaları desteklediğinden emin olmalısınız. En güvenli ve güncel algoritmaları tercih edin.

# Önerilen modern ve güvenli şifreleme algoritmaları
+ Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com,aes128-gcm@openssh.com,aes256-ctr,aes192-ctr,aes128-ctr

Önerilen modern ve güvenli MAC algoritmaları

+ MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com,umac-128-etm@openssh.com

Önerilen modern ve güvenli Anahtar Değişim algoritmaları

+ KexAlgorithms curve25519-sha256@libssh.org,diffie-hellman-group16-sha512,diffie-hellman-group18-sha512,diffie-hellman-group14-sha256

Eski ve zayıf algoritmaları (örneğin 3des-cbc, blowfish-cbc, hmac-md5) listeden çıkararak veya hiç eklemeyerek devre dışı bırakabilirsiniz.

SSH Tünelleme ve Port Yönlendirme Kontrolü

SSH, güvenli tünelleme ve port yönlendirme yetenekleri sunar. Bu özellikler güçlü olsa da, dikkatli kullanılmadığında güvenlik riskleri oluşturabilir.

  • AllowTcpForwarding: TCP port yönlendirmeye (tünelleme) izin verilip verilmeyeceğini belirler. Genellikle gerekli değilse kapatılması önerilir.
  • PermitTunnel: Katman 2/3 tünellemesine (VPN benzeri) izin verilip verilmeyeceğini belirler. Çoğu durumda devre dışı bırakılabilir.
  • X11Forwarding: X11 (grafik arayüz) yönlendirmeye izin verilip verilmeyeceğini belirler. Sunucunuzda grafik arayüze ihtiyacınız yoksa kapatın.
  • PermitUserEnvironment: Kullanıcı ortam değişkenlerinin sunucuya aktarılmasına izin verilip verilmeyeceğini belirler. Güvenlik riski oluşturabilir, genellikle kapatılması önerilir.
# TCP port yönlendirmeyi devre dışı bırakın (gerekliyse etkin bırakın)
- #AllowTcpForwarding yes
+ AllowTcpForwarding no

Katman 2/3 tünellemesini devre dışı bırakın

- #PermitTunnel no + PermitTunnel no

X11 yönlendirmeyi devre dışı bırakın (grafik arayüze ihtiyacınız yoksa)

- #X11Forwarding yes + X11Forwarding no

Kullanıcı ortam değişkenlerinin aktarılmasına izin vermeyin

- #PermitUserEnvironment no + PermitUserEnvironment no

Değişiklikleri Uygulama ve Sorun Giderme

sshd_config dosyasında yaptığınız değişikliklerin etkili olabilmesi için SSH daemon servisinin yeniden başlatılması gerekir. Ancak, bu adımı atmadan önce yapılandırma dosyanızın sözdizimini kontrol etmek kritik öneme sahiptir.

Yapılandırma Dosyasını Kontrol Etme

SSH daemon, yapılandırma dosyasını yeniden yüklemeden önce sözdizimini kontrol etmek için bir test modu sunar. Bu, hatalı bir yapılandırmanın sunucunuza erişimi tamamen kesmesini önler.

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

Eğer komut herhangi bir çıktı vermezse, yapılandırma dosyanızda sözdizimi hatası yoktur. Herhangi bir hata mesajı alırsanız, ilgili satırı kontrol edip düzeltmelisiniz.

SSH Servisini Yeniden Başlatma

Sözdizimi kontrolü başarılı olduktan sonra, SSH servisini yeniden başlatabilirsiniz. Bu, yeni yapılandırma ayarlarının etkinleşmesini sağlar.

# systemd tabanlı sistemlerde (çoğu modern Linux dağıtımı)
sudo systemctl restart sshd

SysVinit tabanlı sistemlerde (eski dağıtımlar)

sudo service ssh restart

Önemli Uyarı: SSH servisini yeniden başlatmadan önce, mevcut SSH bağlantınızı açık tutmanız ve başka bir terminalden yeni bir bağlantı açmayı denemeniz şiddetle tavsiye edilir. Eğer yeni bağlantı başarılı olursa, mevcut bağlantınızı kapatabilirsiniz. Bu, yanlış bir yapılandırma nedeniyle kendinizi sunucudan kilitlemenizi engeller.

Yaygın Hatalar ve Çözümleri

  • Sunucuya Erişememe:
    • Çözüm: Güvenlik duvarınızın (UFW, firewalld) yeni SSH portunuza izin verdiğinden emin olun. SSH servisi yeniden başlatılırken bir hata oluşmuş olabilir, sunucu konsoluna erişiminiz varsa logları kontrol edin (journalctl -u sshd.service).
  • “Permission denied (publickey)” Hatası:
    • Çözüm: SSH anahtarlarınızın doğru ayarlandığından ve dosya/dizin izinlerinin doğru olduğundan emin olun. ~/.ssh dizini 700, ~/.ssh/authorized_keys dosyası 600 izinlerine sahip olmalıdır. Ayrıca, anahtarın doğru kullanıcıya ait olduğundan emin olun.
  • Servis Başlamıyor:
    • Çözüm: sshd -t komutuyla sözdizimi hatası olup olmadığını kontrol edin. Servis loglarını inceleyin (sudo journalctl -u sshd.service veya sudo tail -f /var/log/auth.log) hata mesajlarını bulun.

Sonuç ve Sıkça Sorulan Sorular (SSS)

SSH daemon yapılandırmanızı optimize etmek, Linux VPS’inizin güvenliği ve performansı için atabileceğiniz en önemli adımlardan biridir. Bu rehberde ele aldığımız temel ve ileri düzey ayarlar, sunucunuzu potansiyel tehditlere karşı daha dirençli hale getirirken, aynı zamanda daha verimli bir çalışma ortamı sağlar. Unutmayın ki güvenlik sürekli bir süreçtir; bu ayarları düzenli olarak gözden geçirmek ve güncel güvenlik uygulamalarını takip etmek önemlidir. Güçlü parolalar kullanmak, anahtar tabanlı kimlik doğrulamayı tercih etmek, root erişimini kısıtlamak ve gereksiz özellikleri kapatmak, sunucunuzun güvenliğini önemli ölçüde artıracaktır.

SSS

Neden SSH portunu değiştirmeliyim?
Varsayılan 22 numaralı port, otomatik tarayıcılar ve botlar tarafından sürekli hedeflenir. Portu değiştirmek, sunucunuzu bu yaygın ve gürültülü saldırılardan korumak için ilk ve basit bir adımdır.
Root ile giriş yapmak neden önerilmez?
Root kullanıcısı sistem üzerinde tam yetkiye sahiptir. Root parolasının ele geçirilmesi durumunda saldırgan sunucunuzu tamamen ele geçirebilir. Normal bir kullanıcı ile giriş yapıp gerektiğinde sudo kullanmak daha güvenlidir.
Parola ile mi yoksa anahtar ile mi kimlik doğrulamalıyım?
Anahtar tabanlı kimlik doğrulama, parolalara göre çok daha güvenlidir. Özel anahtarınızın güvenliği sağlandığı sürece, brute-force saldırılarına karşı neredeyse tamamen dayanıklıdır. Şiddetle anahtar tabanlı kimlik doğrulamayı kullanmanız ve parola tabanlıyı devre dışı bırakmanız önerilir.
sshd_config dosyasını düzenledikten sonra ne yapmalıyım?
Öncelikle sudo sshd -t komutuyla sözdizimi hatası olup olmadığını kontrol edin. Ardından, mevcut SSH oturumunuzu açık bırakarak yeni bir terminalden sunucunuza bağlanmayı deneyin. Yeni bağlantı başarılı olursa, sudo systemctl restart sshd komutuyla SSH servisini yeniden başlatın.
Yanlış bir yapılandırma yaparsam ne olur?
Yanlış yapılandırma, SSH servisini başlatamayabilir veya kendinizi sunucunuzdan kilitleyebilir. Bu nedenle, bir yedek almak, sshd -t ile kontrol etmek ve servis yeniden başlatılırken mevcut bir oturumu açık tutmak hayati öneme sahiptir. Eğer kendinizi kilitlerseniz, VPS sağlayıcınızın kontrol panelinden konsol erişimini kullanarak sorunu düzeltmeniz gerekebilir.
Hangi şifreleme algoritmalarını kullanmalıyım?
Her zaman en güncel ve güçlü şifreleme (Ciphers), MAC (Message Authentication Codes) ve Anahtar Değişim (KexAlgorithms) algoritmalarını tercih etmelisiniz. Genellikle chacha20-poly1305@openssh.com, aes256-gcm@openssh.com gibi modern algoritmalar ve curve25519-sha256@libssh.org gibi anahtar değişim algoritmaları önerilir. Eski ve zayıf algoritmaları devre dışı bırakmak önemlidir.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Mobil sürümden çık