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.
Yorumlar 0
Henüz yorum yok — ilk siz olun!