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
sudokullanmak 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.ClientAliveIntervalveClientAliveCountMax: İ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).
- Çö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 (
- “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.
~/.sshdizini 700,~/.ssh/authorized_keysdosyası 600 izinlerine sahip olmalıdır. Ayrıca, anahtarın doğru kullanıcıya ait olduğundan emin olun.
- Çözüm: SSH anahtarlarınızın doğru ayarlandığından ve dosya/dizin izinlerinin doğru olduğundan emin olun.
- Servis Başlamıyor:
- Çözüm:
sshd -tkomutuyla sözdizimi hatası olup olmadığını kontrol edin. Servis loglarını inceleyin (sudo journalctl -u sshd.serviceveyasudo tail -f /var/log/auth.log) hata mesajlarını bulun.
- Çözüm:
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
sudokullanmak 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_configdosyasını düzenledikten sonra ne yapmalıyım?- Öncelikle
sudo sshd -tkomutuyla 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 sshdkomutuyla 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 -tile 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.comgibi modern algoritmalar vecurve25519-sha256@libssh.orggibi anahtar değişim algoritmaları önerilir. Eski ve zayıf algoritmaları devre dışı bırakmak önemlidir.