SSH Varsayılan Portunu Değiştirdikten Sonra Anahtarla Giriş Hatasının Giderilmesi
SSH (Secure Shell) varsayılan portu olan 22’yi güvenlik amacıyla değiştirmek yaygın bir uygulamadır. Ancak bu değişiklik, özellikle anahtar tabanlı kimlik doğrulama kullanılıyorsa, sunucuya erişim sorunlarına yol açabilir. Bu makale, SSH varsayılan portunu değiştirdikten sonra anahtarla giriş yapılamaması sorununu detaylı bir şekilde inceleyecek, olası nedenleri açıklayacak ve adım adım çözüm yolları sunacaktır. Amacımız, hem deneyimli sistem yöneticileri hem de yeni başlayanlar için kapsamlı bir rehber sağlamaktır.
Neden SSH Varsayılan Portunu Değiştiririz?
SSH varsayılan portunu değiştirmek, sunucu güvenliğini artırmaya yönelik proaktif bir adımdır. Bu uygulama, özellikle botlar ve otomatik tarayıcılar tarafından gerçekleştirilen kaba kuvvet saldırılarına karşı birincil savunma hattı oluşturur.
Güvenlik Avantajları
Varsayılan portun değiştirilmesi, otomatik tarayıcıların ve botların sunucunuzu kolayca bulmasını engeller. Bu, SSH portunu doğrudan hedefleyen kaba kuvvet saldırılarının sayısını önemli ölçüde azaltır. Saldırganlar, rastgele bir port üzerinde SSH servisi aramak yerine, genellikle bilinen portlara odaklanır. Port değişikliği, sunucunuzu “güvenlik duvarı tarafından gizlenmiş” hale getirmez, ancak ilk saldırı dalgasından korunmanıza yardımcı olur.
Yaygın Uygulama Alanları
Özellikle internete açık sunucular, VPS’ler (Sanal Özel Sunucular) ve bulut tabanlı sistemlerde bu yöntem sıkça kullanılır. Şirket içi ağlarda veya belirli IP kısıtlamaları olan ortamlarda daha az kritik olabilirken, genel erişime açık her sistem için önerilen bir güvenlik adımıdır.
Anahtarla Kimlik Doğrulama Nedir ve Nasıl Çalışır?
Anahtar tabanlı kimlik doğrulama, SSH bağlantılarında parola kullanımına göre çok daha güvenli bir yöntemdir. Bu yöntem, kriptografik anahtar çiftleri üzerine kuruludur.
Genel Bakış: Public/Private Anahtar Çiftleri
SSH anahtar çifti, biri herkese açık (public key) diğeri gizli (private key) olmak üzere iki anahtardan oluşur. Genel anahtar, sunucuya yerleştirilir ve herkesle paylaşılabilir. Özel anahtar ise istemci tarafında, kullanıcının bilgisayarında güvenli bir şekilde saklanır ve asla kimseyle paylaşılmamalıdır. Bu iki anahtar matematiksel olarak birbirine bağlıdır.
Kimlik Doğrulama Süreci
İstemci bir SSH bağlantısı kurmaya çalıştığında, sunucu istemcinin kimliğini doğrulamak için genel anahtarını kullanır. İstemci, özel anahtarını kullanarak bir meydan okumaya (challenge) yanıt verir. Eğer yanıt doğruysa, sunucu istemcinin kimliğini doğrular ve bağlantıya izin verir. Bu süreç, parolaların ağ üzerinden gönderilmesini gerektirmediği için kaba kuvvet saldırılarına karşı çok daha dirençlidir.
Port Değişikliğinin Anahtarla Kimlik Doğrulamaya Etkisi
SSH portunu değiştirmek, anahtar tabanlı kimlik doğrulamayı doğrudan etkilemez, ancak istemcinin ve sunucunun doğru portta iletişim kurmasını gerektirir. Sorunlar genellikle yanlış yapılandırmadan veya güvenlik duvarı engellerinden kaynaklanır.
SSH İstemci Yapılandırması
Varsayılan olarak, SSH istemcisi port 22 üzerinden bağlantı kurmaya çalışır. Eğer sunucu portu değiştirildiyse, istemcinin de yeni portu bilmesi ve bu port üzerinden bağlantı kurması gerekir. Aksi takdirde, bağlantı reddedilir veya zaman aşımına uğrar.
SSH Sunucu Yapılandırması
Sunucu tarafında, sshd_config dosyasında belirtilen Port değeri, SSH daemon’ının hangi portu dinleyeceğini belirler. Bu değerin doğru ayarlanmaması veya SSH servisinin yeniden başlatılmaması, sunucunun yeni portu dinlememesine neden olabilir.
Güvenlik Duvarı Engelleri
Yeni SSH portunun güvenlik duvarı (firewall) üzerinde açılmaması, bağlantı hatasının en yaygın nedenlerinden biridir. Güvenlik duvarı, belirtilen port üzerindeki tüm gelen bağlantıları engelleyerek, istemcinin sunucuya ulaşmasını engeller.
Sorunun Belirtileri ve İlk Kontroller
Port değişikliği sonrası anahtar ile giriş yapılamaması durumunda karşılaşacağınız belirtiler ve yapmanız gereken ilk kontroller şunlardır:
Hata Mesajları ve Anlamları
Genellikle alacağınız hata mesajları şunlara benzer olabilir:
* ssh: connect to host your_server_ip port 22: Connection refused (Eğer istemci hala varsayılan portu deniyorsa)
* ssh: connect to host your_server_ip port new_port: Connection timed out (Eğer güvenlik duvarı engelliyorsa veya servis dinlemiyorsa)
* Permission denied (publickey). (Bu mesaj genellikle anahtarın kendisiyle ilgili bir sorun olduğunda veya sunucuda anahtarın doğru yapılandırılmadığında görülür, ancak port hatasıyla da karışabilir.)
Temel Bağlantı Testleri (telnet, nc)
Sunucunun yeni portu dinleyip dinlemediğini ve güvenlik duvarının engellemediğini kontrol etmek için telnet veya netcat (nc) kullanabilirsiniz:
telnet your_server_ip new_port
# veya
nc -vz your_server_ip new_port
Eğer bağlantı başarılı olursa, "Connected" veya benzeri bir mesaj görürsünüz. Başarısız olursa, "Connection refused" veya "Connection timed out" gibi bir mesaj alırsınız, bu da genellikle güvenlik duvarı veya servis dinleme sorununa işaret eder.
Sunucu Tarafı Log Kayıtları
Sunucu tarafındaki SSH loglarını kontrol etmek, sorunun kaynağını anlamak için kritik öneme sahiptir.
* Debian/Ubuntu tabanlı sistemlerde: /var/log/auth.log
* CentOS/RHEL tabanlı sistemlerde: /var/log/secure
Bu dosyalarda, başarısız bağlantı denemeleri, kimlik doğrulama hataları veya SSH servisinin başlatılmasıyla ilgili sorunlar hakkında ipuçları bulabilirsiniz.
Adım Adım Sorun Giderme ve Çözüm Yolları
Sorunu çözmek için hem sunucu hem de istemci tarafında yapılması gereken kontroller ve düzeltmeler bulunmaktadır.
Sunucu Tarafı Kontrolleri
Sunucuya fiziksel veya konsol erişiminiz (cloud sağlayıcı paneli üzerinden) olması bu adımlar için gereklidir.
sshd_config Dosyasını Doğrulama
SSH daemon yapılandırma dosyası olan /etc/ssh/sshd_config dosyasını kontrol edin. Port yönergesinin yeni port numaranızı içerdiğinden emin olun.
sudo nano /etc/ssh/sshd_config
Aşağıdaki satırı bulun veya ekleyin:
Port YourNewPortNumber
YourNewPortNumber yerine belirlediğiniz port numarasını yazın. Ayrıca, anahtar tabanlı kimlik doğrulamanın etkin olduğundan emin olun:
PubkeyAuthentication yes
Dosyayı kaydedip kapatın.
SSH Servisini Yeniden Başlatma
Yapılandırma dosyasında yaptığınız değişikliklerin etkili olması için SSH servisini yeniden başlatmanız gerekir:
sudo systemctl restart sshd
# veya eski sistemlerde
sudo service sshd restart
Servisin durumunu kontrol etmek için:
sudo systemctl status sshd
Herhangi bir hata mesajı olup olmadığını kontrol edin.
Güvenlik Duvarı Kurallarını Güncelleme
Güvenlik duvarınızın yeni SSH portuna gelen bağlantılara izin verdiğinden emin olun.
* UFW (Ubuntu/Debian):
sudo ufw allow YourNewPortNumber/tcp
sudo ufw reload
sudo ufw status
* Firewalld (CentOS/RHEL):
sudo firewall-cmd --permanent --add-port=YourNewPortNumber/tcp
sudo firewall-cmd --reload
sudo firewall-cmd --list-all
* IPTables (Genel Linux):
sudo iptables -A INPUT -p tcp --dport YourNewPortNumber -j ACCEPT
sudo iptables -A OUTPUT -p tcp --sport YourNewPortNumber -j ACCEPT
# Kuralları kaydetmeyi unutmayın, dağıtıma göre değişir.
# Örneğin, Debian/Ubuntu'da sudo apt install iptables-persistent ve sudo netfilter-persistent save
# CentOS/RHEL'de sudo service iptables save veya sudo iptables-save > /etc/sysconfig/iptables
Önemli: Güvenlik duvarı kurallarını düzenlerken çok dikkatli olun. Yanlış bir kural, tüm erişimi kaybetmenize neden olabilir.
SELinux/AppArmor Politikalarını Kontrol Etme
Bazı sistemlerde (özellikle CentOS/RHEL'de SELinux, Ubuntu'da AppArmor), varsayılan SSH portu dışındaki portların kullanılması ek yapılandırma gerektirebilir.
* SELinux için:
sudo semanage port -a -t ssh_port_t -p tcp YourNewPortNumber
Bu komut, SELinux'a yeni portun SSH için kullanılmasına izin verildiğini söyler.
İstemci Tarafı Kontrolleri
Sunucu tarafındaki tüm ayarların doğru olduğundan eminseniz, sorun istemci tarafında olabilir.
ssh Komutuna Port Belirtme
En basit çözüm, ssh komutunu kullanırken -p bayrağı ile yeni port numarasını belirtmektir:
ssh -i ~/.ssh/your_private_key -p YourNewPortNumber user@your_server_ip
your_private_key yerine özel anahtar dosyanızın adını, user yerine sunucudaki kullanıcı adınızı ve your_server_ip yerine sunucunuzun IP adresini veya alan adını yazın.
~/.ssh/config Dosyasını Yapılandırma
Her seferinde port numarasını belirtmek yerine, SSH yapılandırma dosyanızı (~/.ssh/config) düzenleyerek bu işlemi otomatikleştirebilirsiniz:
nano ~/.ssh/config
Aşağıdaki gibi bir giriş ekleyin:
Host myserver
HostName your_server_ip_or_domain
User your_username
Port YourNewPortNumber
IdentityFile ~/.ssh/your_private_key
Artık sunucuya sadece ssh myserver komutuyla bağlanabilirsiniz.
Anahtar İzinlerini Kontrol Etme (chmod)
Özel anahtar dosyanızın doğru izinlere sahip olduğundan emin olun. SSH, özel anahtar dosyasının çok açık izinlere sahip olması durumunda bağlantıyı reddeder.
chmod 600 ~/.ssh/your_private_key
Bu komut, sadece dosya sahibinin okuma ve yazma iznine sahip olmasını sağlar.
ssh-agent Kullanımı
Birden fazla anahtar kullanıyorsanız veya anahtarınızın parolası varsa, ssh-agent ve ssh-add kullanarak anahtarınızı belleğe yükleyebilirsiniz:
eval "$(ssh-agent -s)"
ssh-add ~/.ssh/your_private_key
Bu, her bağlantı denemesinde anahtar yolunu veya parolasını tekrar girmek zorunda kalmanızı önler.
Geçici Çözümler ve Kurtarma Yöntemleri
Eğer SSH erişiminiz tamamen kesildiyse, aşağıdaki yöntemlerle sunucunuza tekrar erişim sağlayabilirsiniz.
Konsol Erişimi ile Düzeltme
Fiziksel bir sunucuya veya bir sanallaştırma platformu (VMware, Proxmox vb.) üzerinden sanal makineye erişiminiz varsa, doğrudan konsol üzerinden giriş yaparak yukarıdaki sunucu tarafı kontrollerini yapabilirsiniz. Bu en güvenli ve doğrudan yöntemdir.
Cloud Sağlayıcı Panelleri Üzerinden Kurtarma
AWS, Azure, Google Cloud, DigitalOcean gibi bulut sağlayıcıları genellikle web tabanlı konsol erişimi (örneğin, AWS EC2 Instance Connect, DigitalOcean Console) sunar. Bu konsol aracılığıyla sunucunuza erişebilir, sshd_config dosyasını düzeltebilir, güvenlik duvarı ayarlarını yapabilir ve SSH servisini yeniden başlatabilirsiniz.
Ek Güvenlik Önlemleri ve En İyi Uygulamalar
SSH güvenliğini daha da artırmak için aşağıdaki ek önlemleri düşünebilirsiniz:
Parola ile Girişi Devre Dışı Bırakma
Anahtar tabanlı kimlik doğrulamanın güvenliğinden tam olarak yararlanmak için parola ile girişi tamamen devre dışı bırakın. /etc/ssh/sshd_config dosyasında:
PasswordAuthentication no
Root ile Girişi Engelleme
Doğrudan root kullanıcısıyla SSH üzerinden giriş yapılmasını engellemek, güvenlik açısından önemlidir. Bunun yerine, normal bir kullanıcıyla giriş yapıp sudo kullanarak yetkili komutları çalıştırın.
PermitRootLogin no
Fail2ban Kullanımı
Fail2ban, başarısız giriş denemelerini izleyen ve belirli bir sayıda başarısız denemeden sonra IP adreslerini otomatik olarak engelleyen bir araçtır. Kaba kuvvet saldırılarına karşı ek bir koruma katmanı sağlar.
Anahtar Yönetimi
Özel anahtarlarınızı her zaman güvende tutun. Güçlü bir parola ile şifreleyin ve asla kimseyle paylaşmayın. Kullanmadığınız eski anahtarları düzenli olarak silin.
Sonuç
SSH varsayılan portunu değiştirmek, sunucu güvenliğini artırmak için etkili bir yöntemdir, ancak yanlış yapılandırıldığında anahtar tabanlı kimlik doğrulama sorunlarına yol açabilir. Bu makalede ele alınan adım adım sorun giderme ve çözüm yöntemleri sayesinde, bu tür sorunları kolayca teşhis edip çözebilirsiniz. Unutmayın, doğru yapılandırma ve güvenlik duvarı kuralları, sorunsuz bir SSH deneyimi için kritik öneme sahiptir. Her zaman sunucu yapılandırmalarınızı dikkatli bir şekilde kontrol edin ve değişikliklerden sonra SSH servisini yeniden başlatmayı unutmayın.
SSS (Sık Sorulan Sorular)
SSH portunu değiştirmek neden anahtar tabanlı girişi etkiler?
SSH portunu değiştirmek, anahtar tabanlı girişi doğrudan etkilemez. Ancak, istemcinin sunucuya bağlanmaya çalıştığı port ile sunucunun dinlediği portun eşleşmemesi durumunda bağlantı hatası oluşur. Anahtar tabanlı kimlik doğrulama süreci, bağlantı kurulduktan sonra başlar.
SSH anahtarımı kaybettim, ne yapmalıyım?
Özel anahtarınızı kaybettiyseniz ve sunucuya başka bir yolla (konsol erişimi, parola ile giriş vb.) erişemiyorsanız, sunucuya erişiminizi kaybetmiş olabilirsiniz. Bulut sağlayıcı kullanıyorsanız, genellikle yeni bir anahtar çifti oluşturup sunucuya ekleme veya sunucuyu sıfırlama seçenekleri sunulur. Fiziksel sunucularda ise işletim sistemi kurtarma moduna geçerek anahtarınızı yeniden yapılandırmanız gerekebilir.
Güvenlik duvarı ayarlarını nasıl kontrol edebilirim?
Güvenlik duvarı ayarlarını kontrol etmek için kullandığınız Linux dağıtımına göre değişen komutları kullanabilirsiniz:
* UFW: sudo ufw status
* Firewalld: sudo firewall-cmd --list-all
* IPTables: sudo iptables -L -n -v
sshd_config dosyasını yanlış düzenlersem ne olur?
sshd_config dosyasını yanlış düzenlerseniz ve SSH servisini yeniden başlatırsanız, SSH erişiminiz tamamen kesilebilir. Bu durumda, sunucuya konsol erişimi (fiziksel sunucularda veya bulut sağlayıcı panelleri üzerinden) ile bağlanarak hatayı düzeltmeniz gerekir. Her zaman değişiklik yapmadan önce sshd_config dosyasının bir yedeğini almanızı öneririz.
Birden fazla SSH anahtarı kullanabilir miyim?
Evet, birden fazla SSH anahtarı kullanabilirsiniz. ~/.ssh/config dosyasında farklı Host girişleri için farklı IdentityFile yolları belirterek her sunucu için ayrı bir anahtar kullanabilirsiniz. Ayrıca, ssh-add komutuyla birden fazla anahtarı ssh-agent'a ekleyebilirsiniz.
