Güvenlik

SSH erişimini güvenli hale getirme

Linux sunucunuzda SSH güvenliğini sağlamak için pratik rehber: port değişikliği, genel anahtar ile kimlik doğrulama, kullanıcı kısıtlamaları ve brute force saldırılarını önlemek için fail2ban kurulumu.

Güvenlik

SSH Güvenliği Neden Her Zamankinden Daha Önemli?

Bir Linux sunucunuz varsa, şu anda otomatik script'lerin SSH üzerinden sunucunuza girmeye çalıştığından neredeyse emin olabilirsiniz. Genellikle uzun kullanıcı adı ve parola listeleriyle yapılan bu brute force saldırıları, /var/log/auth.log veya /var/log/secure loglarında açıkça görülür. Ancak iyi haber şu ki, birkaç basit ve temel ayarla SSH güvenlik seviyesini önemli ölçüde artırabilir ve bu girişimleri etkisiz hale getirebilirsiniz.

Bu makalede, Linux sunucunuzda (Debian/Ubuntu ve RHEL/CentOS tabanlı dağıtımlar) SSH güvenliğini sağlamak için pratik ve adım adım bir yol sunuyoruz. Odağımız dört temel önlem üzerinde: varsayılan portu değiştirmek, parola yerine genel anahtar kullanmak, yetkili kullanıcıları sınırlamak ve fail2ban kurmak. Sonunda otomatik saldırılara karşı dayanıklı bir sunucuya sahip olmak için bu adımları sırasıyla uygulayın.

Adım 1: Varsayılan SSH Portunu Değiştirme

Port 22, SSH'nin standart portudur ve tüm tarayıcılar ile botlar önce bu porta bakar. Portu alışılmadık bir sayıya değiştirmek, otomatik saldırı hacmini büyük ölçüde azaltır. Bu, "belirsizlik yoluyla güvenlik" katmanıdır, ancak pratikte çok etkilidir çünkü kötü amaçlı script'lerin çoğu yalnızca port 22'yi kontrol eder.

Port Değiştirme Yöntemi

SSH yapılandırma dosyasını istediğiniz düzenleyiciyle açın:

sudo nano /etc/ssh/sshd_config

Aşağıdaki satırı bulun ve değerini değiştirin (örneğin port 2222):

Port 2222

Port satırı yoksa, dosyanın başına ekleyin. Ardından SSH servisini yeniden başlatın:

sudo systemctl restart sshd

Önemli: Mevcut oturumu kapatmadan önce, yeni port ile yeni bir oturum açın ve bağlanabildiğinizden emin olun. Bir güvenlik duvarınız (UFW veya firewalld gibi) varsa, yeni portu mutlaka açın:

sudo ufw allow 2222/tcp

Yaygın Hata: Güvenlik Duvarını Unutmak

Birçok kullanıcı portu değiştirdikten sonra yeni portu güvenlik duvarında açmaz ve pratikte sunucudan kilitlenir. Servisi yeniden başlatmadan önce her zaman güvenlik duvarı kuralını ekleyin ve değişiklikten sonra yeni bağlantıyı test edin. Kilitlenirseniz, ayarları geri almak için sağlayıcınızın web tabanlı konsolunu (VNC veya Serial Console gibi) kullanın.

Adım 2: Parola Yerine Genel Anahtar ile Kimlik Doğrulama

Parolalar, en güçlüleri bile, brute force saldırılarına ve sosyal mühendisliğe karşı savunmasızdır. SSH genel anahtarı, çok daha yüksek güvenlik sağlayan bir çift şifreleme anahtarıdır (genel ve özel). Özel anahtar sisteminizde kalır ve genel anahtar sunucuya yerleştirilir. Bu şekilde, parola olmadan ve 2048 veya 4096 bitlik bir anahtarla giriş yaparsınız.

Anahtar Oluşturma ve Sunucuya Aktarma

Yerel sisteminizde (dizüstü bilgisayar veya kişisel bilgisayar) aşağıdaki komutu çalıştırın:

ssh-keygen -t ed25519 -C "your_email@example.com"

ed25519 algoritması hızlı, güvenli ve moderndir. Sunucunuz bunu desteklemiyorsa (çok eskiyse), rsa -b 4096 kullanın. Oluşturduktan sonra genel anahtarı sunucuya aktarın:

ssh-copy-id -p 2222 user@your_server_ip

Bu komut, genel anahtarınızı sunucudaki ~/.ssh/authorized_keys dosyasına ekler. Şimdi aşağıdaki komutla giriş yapın ve parola olmadan çalıştığından emin olun:

ssh -p 2222 user@your_server_ip

Parola ile Girişi Devre Dışı Bırakma

Anahtarın çalıştığından emin olduktan sonra, parola ile girişi devre dışı bırakın. sshd_config dosyasında aşağıdaki satırları ayarlayın:

PasswordAuthentication no
ChallengeResponseAuthentication no
UsePAM no

UsePAM no ayarını yalnızca anahtarınızın çalıştığından emin olduğunuzda yapın; aksi takdirde kilitlenebilirsiniz. Değişikliklerden sonra servisi yeniden başlatın:

sudo systemctl restart sshd

Yaygın Hata: Anahtarı Test Etmeden Kapıyı Kapatmak

PasswordAuthentication no ayarını asla genel anahtarı tam olarak test etmeden uygulamayın. Açık bir SSH oturumu tutun, başka bir terminalden anahtarla giriş yapın ve ardından değişikliği uygulayın. Anahtarınız bozuksa veya dosya yolu yanlışsa, sunucudan kilitlenirsiniz.

Adım 3: Yetkili Kullanıcıları Sınırlama

Genel anahtar kullansanız bile, SSH erişimini belirli kullanıcılarla sınırlamak daha iyidir. Bu, saldırı yüzeyini küçültür ve sistemdeki bir kullanıcı tehlikeye girerse, saldırgan aynı kimlik bilgileriyle giriş yapamaz.

AllowUsers ve AllowGroups Kullanımı

sshd_config dosyasında yetkili kullanıcı veya grup listesini belirleyebilirsiniz:

AllowUsers admin developer
AllowGroups sshusers

Grup kullanıyorsanız, önce grubu oluşturun ve kullanıcıyı ekleyin:

sudo groupadd sshusers
sudo usermod -aG sshusers admin

Hem AllowUsers hem de AllowGroups satırlarını koyarsanız, kullanıcının her iki koşulu da sağlaması gerektiğini unutmayın. Genellikle yalnızca birini kullanmak daha iyidir.

Kök (Root) Erişimini Sınırlama

SSH üzerinden doğrudan root kullanıcısıyla giriş yapmak yüksek risk taşır. Bunu devre dışı bırakmak ve normal bir kullanıcıyla giriş yapıp ardından sudo ile yönetim komutlarını çalıştırmak daha iyidir. Yapılandırma dosyasında:

PermitRootLogin no

Herhangi bir nedenle root girişine ihtiyacınız varsa, en azından genel anahtarla sınırlayın:

PermitRootLogin prohibit-password

Yaygın Hata: Servis Kullanıcılarını Unutmak

Sistemde www-data veya mysql gibi kullanıcılar varsa, bunların AllowUsers listesinde olmadığından emin olun. Bu kullanıcılar genellikle devre dışı kabuğa sahiptir ve SSH girişine izin verilmemelidir. Aşağıdaki komutla kullanıcıların kabuğunu kontrol edebilirsiniz:

grep -E "www-data|mysql" /etc/passwd

Adım 4: fail2ban Kurulumu ve Yapılandırması

fail2ban, sistem loglarını izleyen ve birkaç başarısız denemeden sonra saldırganın IP adresini belirli bir süre engelleyen güçlü bir araçtır. Bu araç, SSH üzerindeki brute force saldırılarıyla mücadelede çok etkilidir.

fail2ban Kurulumu

Debian/Ubuntu'da:

sudo apt update
sudo apt install fail2ban -y

RHEL/CentOS'ta:

sudo yum install epel-release -y
sudo yum install fail2ban -y

SSH için Yapılandırma

Yerel yapılandırma dosyasını oluşturun:

sudo nano /etc/fail2ban/jail.local

Aşağıdaki içeriği ekleyin:

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

Parametrelerin açıklaması:

  • maxretry: Engellenmeden önceki başarısız deneme sayısı (burada 3).
  • bantime: Engelleme süresi saniye cinsinden (burada 1 saat).
  • findtime: Denemelerin sayıldığı zaman aralığı (burada 10 dakika).
  • logpath: Log yolu. RHEL/CentOS'ta genellikle /var/log/secure şeklindedir.

Servisi yeniden başlatın:

sudo systemctl restart fail2ban
sudo systemctl enable fail2ban

Durumu Kontrol Etme ve Engelleri Yönetme

Jail durumunu ve engellenen IP'leri görmek için:

sudo fail2ban-client status sshd

Bir IP'yi engel listesinden manuel olarak kaldırmak için:

sudo fail2ban-client set sshd unbanip 192.168.1.100

Yaygın Hata: Yanlış Log Yolu

fail2ban çalışmıyorsa, kontrol etmeniz gereken ilk şey logpath yoludur. systemd tabanlı dağıtımlarda, SSH logu /var/log/auth.log (Debian/Ubuntu) veya /var/log/secure (RHEL/CentOS) içinde olabilir. Aşağıdaki komutla tam yolu bulun:

sudo grep "sshd" /var/log/auth.log | tail -5

Log boşsa, SSH servisi muhtemelen journald kullanıyordur ve logpath değerini /var/log/journal olarak değiştirmeniz veya journalctl kullanmanız gerekir.

SSH Güvenliği için Ek Önlemler

Yukarıdaki dört adım SSH güvenliğinin temelini oluşturur, ancak birkaç ek önlem güvenliğinizi daha da artırabilir:

Boşta Kalma Zaman Aşımı Ayarı

Uzun süre boş kalan SSH oturumlarını otomatik olarak sonlandırın. sshd_config içinde:

ClientAliveInterval 300
ClientAliveCountMax 2

Bu ayarlar, 5 dakikalık boşluktan sonra bir canlılık isteği gönderir ve 2 kez yanıt alınamazsa bağlantıyı keser.

Standart Olmayan Portları Dikkatli Kullanma

Portu 2222 gibi bir sayıya değiştirmek iyidir, ancak 443 veya 80 gibi bilinen portları kullanırsanız diğer servislerle çakışabilirsiniz. Daha az kullanılan 1024 ile 65535 arasında bir port seçin.

Düzenli Log İzleme

Anormal desenleri erken tespit etmek için SSH loglarını periyodik olarak kontrol edin:

sudo grep "Failed password" /var/log/auth.log | tail -20

Bir IP'den çok sayıda başarısız deneme görüyorsanız, fail2ban düzgün çalışmıyor veya ayarlarını yanlış yapmış olabilirsiniz.

Özet

SSH güvenliği çok katmanlı bir süreçtir ve hiçbir önlem tek başına yeterli değildir. Port değişikliği, genel anahtar kullanımı, kullanıcı kısıtlamaları ve fail2ban kurulumu, bu makalede pratik olarak incelediğimiz bu güvenliğin dört temel direğidir. Bu değişiklikleri sırasıyla ve dikkatlice uygulayın ve mevcut oturumu kapatmadan önce her zaman yeni bağlantıyı test edin.

Hizmetlerinizi barındırmak için güvenli ve yönetilen bir altyapı arıyorsanız, ServerNet, güvenle güvenebileceğiniz çeşitli bulut ve hosting hizmetleri sunar. Ancak unutmayın ki güvenlik ortak bir sorumluluktur; en iyi altyapıda bile SSH ayarlarınızı ciddiye almalısınız.

Bu adımları uygulayarak sunucunuz otomatik ve brute force saldırılarına karşı dayanıklı hale gelir ve ana işinize daha güvenle odaklanabilirsiniz.

ServerNet Destek

ServerNet mühendislik ve yayın ekibi — altyapı, ağ ve web barındırma uzmanları.

Güvenlik Hizmetleri
Paylaş:

Yorumlar 0

Henüz yorum yok — ilk siz olun!

Yorum bırakın

İlgili hizmet

Güvenlik Hizmetleri

OSCP sertifikalı uzmanlarla sızma testi, altyapı sıkılaştırma ve 7/24 güvenlik izleme.