SSH (Secure Shell) Güvenliği için Sıkılaştırma (Hardening)

Serverlar, routerlar ve switchler gibi uzak cihazlara erişim söz konusu olduğunda SSH (Secure Shell) protokolü, trafiği şifreleme ve bağlantılarınızı dinlemeye çalışan herkesi engelleme yeteneği nedeniyle şiddetle tavsiye edilir. Her ne kadar tavsiye edilse bile varsayılan yapılandırma ayarları yeteri kadar güvenli değildir. Bu yazımda OpenSSH’ı daha güvenli hale getirmek için bir dizi sıkılaştırma (hardening) işlemi yapıyor olacağım.

 

 

SSH Hardening Sıkılaştırma

SSH Hardening Sıkılaştırma

1. Şifresiz Kimlik Doğrulamayı Ayarlayın

Varsayılan olarak SSH erişimlerinde, kullanıcılar oturum açarken şifrelerini doğrulamaları gerekmektedir. Ancak hackerlar birtakım araçlar kullanarak şifreleri tahmin edebilir ve hatta brute force saldırısı gerçekleştirebilir günün sonunda da sisteminize erişim sağlayabilir. Güvenli tarafta olmak için, SSH şifresiz kimlik doğrulamasının kullanılması şiddetle tavsiye edilir.

İlk adım, public key ve private key kullanarak SSH anahtar çifti oluşturmaktır. Private key, ana bilgisayar sisteminizde bulunurken, public key uzak sunucuya kopyalanır.

 

 

Ortak anahtar başarıyla kopyalandıktan sonra, artık bir parola girmenize gerek kalmadan uzak sunucuya sorunsuz bir şekilde SSH protokolünden bağlanabilirsiniz.

Sonraki adım ise parola kimlik doğrulamasını devre dışı bırakmaktır. Bunu için SSH yapılandırma dosyasını değiştirmeniz gerekir.

# sudo nano /etc/ssh/sshd_config

 

Uyarı!
Public ve Private Key çifti oluşturmadan ve gerekli yapılandırmaları yapmadan aşağıdaki parametreyi aktif etmeniz halinde sunucuya SSH üzerinden erişiminiz kapanacaktır.

Yapılandırma dosyasının içinde,  #PasswordAuthentication no  parametresini bulun ve aktif olması için başındaki # (diyez) işaretini kaldırın.

PasswordAuthentication no

 

Ayarların geçerli olması için SSH deamon’u yeniden başlatılmalıdır.

# sudo systemctl restart sshd

 

Artık bu noktadan sonra uzak sunucuya yalnızca SSH anahtarı kimlik doğrulamasını kullanarak erişebilirsiniz.

 

2. SSH Şifresi Tanımlanmamış Kullanıcıların Bağlantı Taleplerini Devre Dışı Bırakın

Sunucunuzun güvenliğini sağlamanın bir diğer önerilen yolu ise şifresi olmayan kullanıcılar için  SSH oturumlarını devre dışı bırakmaktır. Bu biraz garip gelebilir, ancak bazen sistem yöneticileri kullanıcı hesapları oluştururken ilgili kullanıcı için parola atamayı unutabilir.

Şifresi olmayan kullanıcılardan gelen istekleri reddetmek için,  /etc/ssh/sshd_config  yolunda bulunan yapılandırma dosyasına gidin ve aşağıdaki yönergeye sahip olduğunuzdan ve parametrenin önünde # işareti olmadığından emin olun:

PermitEmptyPasswords no

 

Ayarların geçerli olması için SSH deamon’u yeniden başlatılmalıdır.

# sudo systemctl restart sshd

 

3. Root ile SSH Bağlantılarını Devre Dışı Bırakın

Bir saldırgan, root şifrenizi brute force saldırısı ile ele geçirdiğinde sunucunuz üzerinde tam yetki ile erişime sahip olacaktır. Uzaktan root girişine izin vermek, sisteminizin güvenliğini tehlikeye atabilecek kötü bir fikirdir.

Bu nedenle, SSH ile uzaktan root oturumunu devre dışı bırakmanız ve bunun yerine root haklarına sahip olmayan standart bir kullanıcıyla SSH bağlantısı önerilir. Bir kez daha, yapılandırma dosyasına gidin ve bu satırı gösterildiği gibi değiştirin.

PermitRootLogin no

 

İşiniz bittiğinde, değişikliğin geçerli olması için SSH servisini yeniden başlatın.

# sudo systemctl restart sshd

 

4. Protokolü 2’yi kullanın

SSH’nin iki versiyonu vardır: SSH protokolü 1 ve SSH protokol 2. SSH protokolü 2, 2006 yılında tanıtılmıştır ve güçlü kriptografik kontrolleri, toplu şifreleme ve sağlam algoritmaları sayesinde protokol 1’den daha güvenlidir.

Varsayılan olarak, SSH protokol 1’i kullanır. Bunu daha güvenli Protokol 2’ye değiştirmek için aşağıdaki satırı yapılandırma dosyasına ekleyin:

Protocol 2

 

Yine değişikliklerin geçerli olması için ilgili servisi yeniden başlatın:

# sudo systemctl restart sshd

 

5. Timeout Idle Değerini Ayarlayın

Boşta bırakılan bir SSH bağlantısı aktifken bilgisayarınızı uzun süre gözetimsiz bırakmak bir güvenlik riski oluşturabilir. Birisi kolayca SSH oturumunuzu devralabilir ve ne isterse yapabilir. Bu yüzden dolayı sorunu çözmek için SSH oturumunun otomatik olarak kapatılacağı idle timeout ayarlamak akıllıca olacaktır.

Bir kez daha, SSH yapılandırma dosyanızı açın ve  ClientAliveInterval  yönergesini bulun. Makul bir değer atayın, örneğin ben 120 saniye olarak ayarladım.

ClientAliveInterval 120

Bu, 120 saniyeye eşdeğer olan 2 dakika sonunda hiçbir aktivite kaydedilmezse SSH oturumunun kesileceği anlamına gelir.

 

Değişikliklerin geçerli olması için ilgili servisi yeniden başlatın:

# sudo systemctl restart sshd

 

6. SSH Erişimini Belirli Kullanıcılarla Sınırlandırın

Ek bir güvenlik katmanı için, SSH protokolüne ihtiyaç duyan kullanıcıları sistemde oturum açabilmesi ve uzaktan görevler gerçekleştirebilmesi için tanımlayabilirsiniz. Bu yapılandırma, sizin onayınız olmadan sisteminize girmeye çalışan diğer kullanıcıları uzak tutar.

Her zaman olduğu gibi, yapılandırma dosyasını açın  “AllowUsers”  parametresini ve ardından izin vermek istediğiniz kullanıcıların adlarını ekleyin. Aşağıdaki örnekte, ‘serdar’ ve ‘ahmet’ kullanıcılarının SSH aracılığıyla sisteme uzaktan erişmesine izin verdim. Uzaktan erişim sağlamaya çalışan diğer tüm kullanıcılar engellenecektir.

Not: Birden fazla kullanıcıya izin verirken aralarında bir boşluk olmalıdır.

AllowUsers serdar ahmet

 

Değişikliklerin geçerli olması için ilgili servisi yeniden başlatın:

# sudo systemctl restart sshd

 

7. Şifre Denemeleri için Bir Limit Belirleyin

Bir güvenlik katmanı eklemenin başka bir yolu, SSH oturum açma girişimlerinin sayısını, birkaç başarısız denemeden sonra bağlantı kesilecek şekilde sınırlandırmaktır. Bir kez daha yapılandırma dosyasına gidin ve “MaxAuthTries” parametresini bulun ve maksimum deneme sayısı için bir değer tanımlayın.

Bu örnekte, limit gösterildiği gibi 3 deneme olarak ayarlanmıştır.

MaxAuthTries 3

 

Ve son olarak, önceki senaryolarda olduğu gibi SSH servisini yeniden başlatın.

# sudo systemctl restart sshd

 

8. Varsayılan 22 Portunu Değiştirin

Varsayılan 22 SSH portunun farklı bir port ile değiştirilmesi güvenlik tarafında ek bir katman daha oluşturacaktır. Ben aşağıdaki örnekte görüneceği üzere 2251 olarak değiştirdim ve artık SSH bağlantılarımı bu port üzerinden yapmaya başladım:

Port 2251

 

9. X11 Forwarding’i devre dışı bırakın

X11 veya X görüntü sunucusu, bir grafiksel ortam için temel bir frameworktür. X11 forwarding, SSH aracılığıyla bir GUI uygulamasını kullanmanıza olanak tanır.

Temel olarak istemci, GUI uygulamasını sunucu üzerinde çalıştırır ancak X11 forwarding sayesinde makineler arasında bir kanal açılır ve istemci makinede GUI uygulamaları görüntülenir.

X11 protokolü güvenlik odaklı değildir. İhtiyacınız yoksa, SSH’de X11 forwarding’i devre dışı bırakmalısınız.

X11Forwarding no

 

10. SSH ile İki Faktörlü Kimlik Doğrulama

SSH güvenliğini bir sonraki seviyeye taşımak için, iki faktörlü kimlik doğrulamayı da etkinleştirebilirsiniz. Bu yaklaşımda, cep telefonunuza, e-postanıza veya üçüncü taraf bir kimlik doğrulama uygulaması aracılığıyla tek seferlik bir şifre alırsınız.

İki Faktörlü Kimlik Doğrulama (2FA) ile SSH Güvenliği yazımda madde 10 için detaylı yapılandırma ayarlarını bulabilirsiniz.

 

Not: Geçerli sshd_config dosyanızın çıktısını aşağıdaki komutu çalıştırarak görüntüleyebilirsiniz:

# sudo sshd -T

 

Şimdilik yazıma burada son verirken dilerseniz daha önceden yazmış olduğum Fail2Ban yapılandırması adımlarını uygulayarak SSH ve diğer uygulamalar için ek güvenlik metotları uygulayabilirsiniz.

 

SSH


Abone ol
Bildir
guest
0 Yorum
Satır İçi Geri Bildirimler
Tüm yorumları görüntüle