Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Bu rehberde bir Linux sunucuda SSH güvenliğini artıracaksınız: anahtar tabanlı girişe geçecek, parola ve root girişini kapatacak, izinli kullanıcıları sınırlayacak, isteğe bağlı olarak portu değiştirecek ve Fail2ban ile kaba kuvvet denemelerini engelleyeceksiniz. Açık internetteki her sunucu SSH’a yönelik sürekli deneme alır; bu adımlar riski belirgin biçimde azaltır.
Tahmini süre: 20-30 dakika. Önemli uyarı: SSH ayarını değiştirirken mevcut oturumu kapatmayın. Yeni oturumun çalıştığını ayrı bir pencerede doğrulamadan işlemi bitirmeyin; aksi halde sunucuya erişiminizi kaybedebilirsiniz.
Gereksinimler
- Debian/Ubuntu veya AlmaLinux/Rocky gibi bir sunucu ve sudo yetkili, root olmayan bir kullanıcı
- Kendi bilgisayarınızda ssh istemcisi (Linux, macOS veya Windows 10/11’de yerleşik OpenSSH)
- Konsol erişimi (bulut paneli veya IPMI) yedek kurtarma yolu olarak hazır olsun
- Yapılandırma dosyasının yedeği: sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.yedek
Adım adım SSH güvenliği
1. Kendi bilgisayarınızda anahtar çifti oluşturun
Ed25519 modern ve kısa anahtar türüdür. Özel anahtarı (id_ed25519) kimseyle paylaşmayın, oluştururken bir parola (passphrase) belirleyin.
ssh-keygen -t ed25519 -C 'yonetici@bilgisayarim'2. Açık anahtarı sunucuya kopyalayın
Parola ile girişin hâlâ açık olduğu bu aşamada anahtarı sunucuya yükleyin. Sunucu adresini ve kullanıcıyı kendinize göre değiştirin.
ssh-copy-id kullanici@sunucu-adresi
ssh kullanici@sunucu-adresiParola sormadan (yalnızca anahtar parolası ile) girebildiğinizi doğrulayın. ssh-copy-id yoksa açık anahtarı sunucuda ~/.ssh/authorized_keys dosyasına ekleyin ve izinleri ayarlayın.
mkdir -p ~/.ssh && chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys3. Güvenlik ayarlarını ayrı bir dosyaya yazın
Modern sistemlerde /etc/ssh/sshd_config.d/ dizinindeki dosyalar sıralı okunur ve ilk bulunan değer geçerlidir. Bulut imajlarındaki 50-cloud-init.conf gibi dosyalar parola girişini açabildiği için kendi dosyanızı daha düşük bir numarayla (01) oluşturun. AllowUsers satırındaki kullanıcı adını kendinize göre değiştirin; listede olmayan hiçbir kullanıcı (sizin hesabınız dahil) giriş yapamaz. KbdInteractiveAuthentication satırı, parolanın PAM üzerinden klavye etkileşimli yöntemle sorulmasını da kapatır.
sudo tee /etc/ssh/sshd_config.d/01-guvenlik.conf > /dev/null <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
PermitEmptyPasswords no
MaxAuthTries 3
LoginGraceTime 30
X11Forwarding no
AllowUsers kullanici
EOFDrop-in dosyalarının etkili olması, ana dosyadaki Include /etc/ssh/sshd_config.d/*.conf satırının dosyanın başında, diğer ayarlardan önce bulunmasına bağlıdır; Include satırından önce yazılmış bir değer drop-in dosyanızı geçersiz kılar. Eski sistemlerde sshd_config içinde Include satırı yoksa, aynı ayarları doğrudan /etc/ssh/sshd_config dosyasına yazmanız gerekir. Hangi değerin gerçekten geçerli olduğunu her zaman sshd -T ile kontrol edin.
4. Sözdizimini denetleyin ve uygulayın
Önce yapılandırmayı doğrulayın; hata varsa servisi yeniden yüklemeyin. Servis adı Debian/Ubuntu’da ssh, RHEL tabanlı sistemlerde sshd’dir. reload, açık oturumları kesmez.
sudo sshd -t
sudo systemctl reload ssh
# RHEL tabanlı sistemlerde:
# sudo systemctl reload sshd5. Yeni oturumla test edin
Mevcut pencereyi açık bırakın, yeni bir terminal açıp bağlanın. Çalışıyorsa devam edin. Çalışmıyorsa açık oturumdan yapılandırmayı düzeltin.
ssh kullanici@sunucu-adresi
ssh -o PubkeyAuthentication=no kullanici@sunucu-adresiİkinci komutun parola girişi reddetmesi (Permission denied) beklenen sonuçtur.
6. (İsteğe bağlı) SSH portunu değiştirin
Port değiştirmek güvenlik sağlamaz, yalnızca günlük gürültüsünü azaltır; anahtar girişi ve Fail2ban asıl korumadır. Yine de değiştirecekseniz önce güvenlik duvarında yeni portu açın. RHEL tabanlı sistemlerde SELinux için porta etiket de eklenmelidir. Geçiş süresince sshd’nin hem 22 hem 2222 portunu dinlemesi için iki Port satırını birlikte ekleyin; yeni portla giriş doğrulandıktan sonra Port 22 satırını silip yeniden yükleyin ve eski portu güvenlik duvarında kapatın.
sudo ufw allow 2222/tcp
# RHEL tabanlı sistemlerde:
# sudo firewall-cmd --permanent --add-port=2222/tcp && sudo firewall-cmd --reload
# sudo semanage port -a -t ssh_port_t -p tcp 2222
printf 'Port 22\nPort 2222\n' | sudo tee -a /etc/ssh/sshd_config.d/01-guvenlik.conf
sudo sshd -t && sudo systemctl reload ssh
ssh -p 2222 kullanici@sunucu-adresiUbuntu 22.10 ve sonrasında SSH varsayılan olarak soket etkinleştirmeyle (ssh.socket) çalışır; bu durumda port değişikliği reload ile uygulanmaz, sudo systemctl daemon-reload ve ardından sudo systemctl restart ssh.socket gerekir. Sisteminizde ssh.socket etkin mi, systemctl status ssh.socket ile kontrol edin.
7. Fail2ban ile kaba kuvveti sınırlayın
Fail2ban, başarısız girişlerin geldiği IP adreslerini geçici olarak engeller. Kurulumu ve ayarı için Fail2ban rehberine bakabilirsiniz; hızlı başlangıç için aşağıdaki yeterlidir. Komut mevcut bir jail.local dosyasının üzerine yazar; dosya varsa bloğu elle ekleyin. Port değiştirdiyseniz port = 2222 satırını da ekleyin. RHEL tabanlı sistemlerde paket EPEL deposundan dnf ile kurulur. /var/log/auth.log bulunmayan yeni Debian/Ubuntu sürümlerinde jail’e backend = systemd satırını ekleyin.
sudo apt install fail2ban
sudo tee /etc/fail2ban/jail.local > /dev/null <<'EOF'
[sshd]
enabled = true
maxretry = 4
findtime = 10m
bantime = 1h
EOF
sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshdDoğrulama
sudo sshd -T | grep -Ei 'permitrootlogin|passwordauthentication|kbdinteractiveauthentication|allowusers|maxauthtries'
sudo ss -tlnp | grep -E ':22 |:2222 '- permitrootlogin no ve passwordauthentication no görünmeli
- Anahtarla giriş çalışmalı, parola ile giriş reddedilmeli
- root olarak girmeyi denemek Permission denied vermeli
- fail2ban-client status sshd çıktısında jail etkin görünmeli
Sık karşılaşılan sorunlar
- Permission denied (publickey): ~/.ssh ve authorized_keys izinleri (700 ve 600) ya da dosya sahibi hatalıdır; anahtarın doğru kullanıcıya eklendiğini kontrol edin.
- Ayar uygulanmıyor, parola girişi hâlâ açık: Başka bir yapılandırma dosyası değeri daha önce tanımlıyordur; sshd -T çıktısını kontrol edin ve dosya sıralamasını gözden geçirin.
- Port değiştirdim, bağlanılamıyor: Güvenlik duvarında yeni port kapalıdır ya da SELinux etiketi eksiktir; konsol erişimiyle düzeltin.
- Kendiniz Fail2ban tarafından banlandınız: sudo fail2ban-client set sshd unbanip ADRES komutuyla kaldırın ve ignoreip listesine kendi adresinizi ekleyin.
- sshd -t hata veriyor: Satır numarasını okuyup yazım hatasını düzeltin; hata düzelmeden reload yapmayın.
Güvenlik ve bakım notları
- Özel anahtarı parola ile koruyun ve çalındığında sunucudaki authorized_keys satırını silin
- Kullanılmayan kullanıcıların anahtarlarını düzenli temizleyin
- Yönetim erişimini mümkünse VPN veya IP kısıtı ile sınırlayın
- OpenSSH’ı güncel tutun; güvenlik yamalarını geciktirmeyin
- Önemli sunucularda iki aşamalı doğrulama veya sertifika tabanlı giriş değerlendirilebilir
- Başarısız girişleri düzenli inceleyin; olağan dışı artış bir saldırı işareti olabilir
Sık sorulan sorular
Port değiştirmek gerçekten gerekli mi?
Gerekli değil. Yalnızca otomatik tarama gürültüsünü azaltır, kararlı bir koruma değildir. Asıl güvenlik anahtar girişi, parola girişinin kapatılması ve erişim kısıtlarından gelir.
Root girişini neden kapatmalıyım?
Root kullanıcı adı herkesçe bilindiği için saldırganın yalnızca parolayı bulması yeterli olur. Normal kullanıcı ve sudo kullanmak hem saldırı yüzeyini küçültür hem de işlemleri kullanıcıya göre kayıt altına alır.
Anahtarımı kaybedersem ne olur?
Konsol erişimiyle sunucuya girip yeni bir açık anahtar ekleyebilirsiniz. Bu yüzden bulut paneli veya IPMI konsolu gibi bağımsız bir kurtarma yolunu açık tutmak önemlidir.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Linux’ta disk doluluk sorunu giderme (df, du, inode, silinmiş-açık dosyalar)Linux’ta disk doluluk sorununu adım adım giderin: df ve du ile büyük dizinleri bulun, inode tükenmesini ve silinmiş ama açık dosyaları tespit edip güvenle alan açın.
- auditd ile denetim kaydı: kritik dosya ve komutları izlemeauditd ile Linux sunucuda denetim kaydı tutun: kritik dosya değişikliklerini ve komutları izleyen kurallar yazın, ausearch ve aureport ile kayıtları sorgulayın.
- systemd servis birimi yazma ve sertleştirme seçenekleriKendi uygulamanız için systemd servis birimi yazın: Unit, Service ve Install bölümleri, otomatik yeniden başlatma, ortam dosyası ve sertleştirme seçenekleri.
- LVM ile disk yönetimi: birim oluşturma, büyütme ve anlık görüntüLVM ile disk yönetimini öğrenin: fiziksel birim, birim grubu ve mantıksal birim oluşturma, çalışırken büyütme, yeni disk ekleme ve anlık görüntü (snapshot) alma.