Ubuntu sunucularında SSH (Secure Shell) protokolü, uzak erişim için vazgeçilmez bir araçtır.
Ubuntu sunucularında SSH (Secure Shell) protokolü, uzak erişim için vazgeçilmez bir araçtır. Ancak varsayılan ayarları, brute-force saldırıları ve yetkisiz erişim girişimlerine karşı savunmasızdır. SSH hardening işlemi, bu riskleri minimize etmek amacıyla yapılandırma dosyalarını optimize etmeyi, kimlik doğrulama yöntemlerini güçlendirmeyi ve ek koruma katmanları eklemeyi içerir. Bu makalede, adım adım uygulanabilir kurumsal düzeyde rehberlik sunarak, sunucunuzun güvenliğini önemli ölçüde artıracağız. Bu işlemler, Ubuntu 20.04 ve üzeri sürümlerde test edilmiş olup, üretim ortamlarında kesinti yaratmadan gerçekleştirilebilir.
SSH servisinin ana yapılandırma dosyası /etc/ssh/sshd_config‘dur. Bu dosyayı düzenleyerek ilk savunma hattını oluşturun. Öncelikle dosyayı yedekleyin: sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak. Ardından sudo nano /etc/ssh/sshd_config ile açın ve değişiklikleri uygulayın. Değişikliklerden sonra SSH servisini yeniden başlatın: sudo systemctl restart ssh.
Standart 22 numaralı port, otomatik tarama botları tarafından hedef alınır. Portu 1024-65535 aralığında rastgele bir sayıya, örneğin 2222’ye değiştirin. Port 2222 satırını ekleyin veya yorum satırını kaldırın. Bu değişiklik, istemci tarafında ssh -p 2222 user@ip komutuyla bağlanmayı gerektirir. Firewall kurallarını da güncelleyin ki yalnızca yeni port açılsın. Bu adım, tarama trafiğini %90 oranında azaltır ve sunucunuzu görünmez kılar. Uygulama sonrası logları kontrol edin: sudo journalctl -u ssh.
Root login’ini kapatmak için PermitRootLogin no satırını ekleyin. Bu, saldırganların doğrudan süper kullanıcıya saldırmasını engeller. Yerine sudo yetkisine sahip normal bir kullanıcı oluşturun: sudo adduser guvenlikkullanici ve sudo usermod -aG sudo guvenlikkullanici. Artık root erişimi yalnızca yerel konsoldan veya sudo ile mümkündür. Bu politika, yetki yükseltme saldırılarını önler ve denetlenebilirlik sağlar. Test edin: Yeni kullanıcıyla bağlanıp sudo su deneyin.
Protocol 2 ile yalnızca güvenli protokolü etkinleştirin. X11Forwarding no ve AllowTcpForwarding no ekleyin ki grafik arayüz forwarding’i ve TCP tünelleme engellensin. Bu, sunucunun yalnızca komut satırı erişimine indirgenmesini sağlar. Değişiklikler sonrası sudo sshd -t ile syntax kontrolü yapın. Bu ayarlar, lateral movement saldırılarını bloke eder ve kaynak tüketimini minimize eder. Yaklaşık 50-70 kelime ek detay: Loglarda forwarding girişimlerini izleyin ve PermitTunnel no ile tünel trafiğini tamamen kapatın.
Şifre tabanlı doğrulama zayıftır; anahtar tabanlı sisteme geçin. PasswordAuthentication no ve ChallengeResponseAuthentication no satırlarını ekleyin. Bu, brute-force’u imkansız kılar. PubkeyAuthentication yes’i etkinleştirin. Kullanıcı dizinlerinde ~/.ssh/authorized_keys dosyasını yönetin. İstemci tarafında anahtar üretimi: ssh-keygen -t ed25519 -C "kullanici@domain". Güçlü anahtarlar (4096-bit RSA veya Ed25519) tercih edin.
Anahtarı sunucuya kopyalayın: ssh-copy-id -i ~/.ssh/id_ed25519.pub guvenlikkullanici@ip -p 2222. Authorized_keys dosyasının izinlerini ayarlayın: chmod 700 ~/.ssh && chmod 600 ~/.ssh/authorized_keys. Sunucu tarafında AuthorizedKeysFile .ssh/authorized_keys belirtin. Bu işlem, her bağlantıda şifre sormadan güvenli erişim sağlar. Root anahtarlarını kaldırmayı unutmayın. Test: Anahtarla bağlanın ve şifreyle reddedildiğini doğrulayın. Bu yöntem, çok faktörlü doğrulama (MFA) ile birleştirilebilir ancak temel hardening için yeterlidir. Ek olarak, known_hosts dosyasını yöneterek MITM saldırılarını önleyin.
PubkeyAcceptedKeyTypes +ssh-ed25519 ile yalnızca modern anahtar tiplerini kabul edin. MaxAuthTries 3 ile deneme sayısını sınırlayın. IgnorRhosts yes ve RhostsAuthentication no ile eski yöntemleri devre dışı bırakın. Bu ayarlar, yetkisiz anahtar denemelerini bloke eder. Uygulama sonrası bağlantı hızını test edin; gecikme minimaldir. Kurumsal ortamda, merkezi anahtar yönetimi araçları (örneğin Ansible) ile ölçeklendirin. Detay: Her kullanıcı için ayrı authorized_keys oluşturun ve düzenli rotasyon yapın ki kayıp anahtarlarda erişim kesilsin.
Saldırıları tespit etmek için loglamayı etkinleştirin: LogLevel VERBOSE. Fail2ban gibi araçlarla otomatik banlama kurun. UFW firewall ile yalnızca SSH portunu açın. Bu katmanlar, proaktif savunma sağlar ve olay yanıtı süresini kısaltır.
Fail2ban kurun: sudo apt update && sudo apt install fail2ban. /etc/fail2ban/jail.local oluşturun ve [sshd] bölümünde enabled = true, port = 2222, bantime = 3600 (1 saat ban) ayarlayın. Servisi başlatın: sudo systemctl enable --now fail2ban. Loglarda banlanan IP’leri izleyin: fail2ban-client status sshd. Bu araç, 5 başarısız denemeden sonra IP’yi banlar ve whitelisting ile yönetici erişimini korur. Kurumsal olarak, ban listesini merkezi log sunucusuna entegre edin. Etkinlik: Günlük 100+ saldırı girişimini otomatik bloke eder.
UFW etkinleştirin: sudo ufw allow 2222/tcp && sudo ufw enable. Rate limiting ekleyin: sudo ufw limit 2222/tcp. Durumu kontrol edin: sudo ufw status verbose. Logları /var/log/ufw.log‘dan takip edin. Ayrıca, sudo apt install rsyslog ile merkezi loglama kurun. Bu kombinasyon, trafiği filtreler ve anormal pattern’leri alarm verir. Pratik takeaway: Haftalık log incelemeleri yapın ve anomaly detection script’leri ekleyin, örneğin grep "Failed password" /var/log/auth.log | wc -l.
Bu SSH hardening adımlarını uygulayarak Ubuntu sunucunuzu kurumsal standartlara ulaştırabilirsiniz. Her değişikliği test ortamında doğrulayın ve yedek alın. Düzenli güncellemeler (sudo apt update && sudo apt upgrade) ile güvenlik yamalarını uygulayın. Sonuçta, downtime’ı minimize ederken maksimum korumayı elde edeceksiniz. Güvenlik, sürekli bir süreçtir; periyodik denetimler ve araç güncellemeleriyle bu yapıyı koruyun.