İçeriğe geç

GüvenlikSunucu sıkılaştırma

SSH sıkılaştırma: Ubuntu ve Debian'da OpenSSH'yi kilitleyin

OpenSSH'yi temellerin ötesinde sıkılaştırın: ek yapılandırma, izinli kullanıcılar, giriş sınırları, boşta zaman aşımı, güvenli port değişikliği ve 2FA.

  • Orta
  • 20 dk okuma
  • Güncellendi

Denendiği sistemler: Ubuntu 24.04 LTS, Ubuntu 26.04 LTS, Debian 12, Debian 13

Bu sayfada
  1. Başlamadan önce
  2. 1. adım: Bir ek yapılandırma dosyası yazın
  3. 2. adım: Kontrol edin ve uygulayın
  4. 3. adım: Portu güvenle değiştirin (isteğe bağlı)
  5. 4. adım: Donanım destekli bir anahtar kullanın (isteğe bağlı)
  6. 5. adım: Tek kullanımlık kod ekleyin (isteğe bağlı)
  7. 6. adım: Kayıtları izleyin
  8. Sorun giderme
  9. Sonraki adımlar

Yeni bir sunucuyu güvenli hale getirmek root ve şifre girişlerini zaten kapatır. Bu rehber daha ileri gider: kimlerin giriş yapabileceğini, kaç deneme hakkı olduğunu, boştaki oturumların ne kadar yaşayacağını sınırlar, SSH'yi güvenle başka bir porta taşır ve isteğe bağlı iki aşamalı doğrulama ekler. Komutlar Ubuntu 24.04/26.04 ve Debian 12/13 içindir.

Başlamadan önce

  • sudo kullanıcınız için anahtarla giriş çalışıyor (SSH anahtarları).
  • Hizmet sayfanızda görünüyorsa web konsolu gibi ikinci bir giriş yolunuz var.
  • Boyunca bir SSH oturumunu açık tutun ve her değişikliği ikinci bir terminalde test edin.

1. adım: Bir ek yapılandırma dosyası yazın

OpenSSH her seçenek için okuduğu ilk değeri kullanır ve Ubuntu ile Debian, /etc/ssh/sshd_config.d/*.conf dosyalarını ana dosyanın geri kalanından önce okur. Tüm ayarlarınızı alfabede önce gelen tek bir dosyaya koyun:

Bash
sudo nano /etc/ssh/sshd_config.d/00-hardening.conf
Text
# Kimler, nasıl giriş yapabilir
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
PubkeyAuthentication yes
AllowUsers alex

# Daha az deneme, daha kısa bekleme
MaxAuthTries 3
LoginGraceTime 30

# Boştaki veya kopmuş oturumları kapat
ClientAliveInterval 300
ClientAliveCountMax 2

# Çoğu sunucunun ihtiyaç duymadığı özellikler
X11Forwarding no
AllowAgentForwarding no

AllowUsers, giriş yapabilecek hesapları listeler; birden fazlasını boşlukla ayırın ya da sshusers gibi bir grupla AllowGroups kullanın. Agent yönlendirmeyi bilerek kullanıyorsanız AllowAgentForwarding no satırını eklemeyin.

2. adım: Kontrol edin ve uygulayın

Bash
sudo sshd -t
sudo sshd -T | grep -E 'permitrootlogin|passwordauthentication|allowusers|maxauthtries'
sudo systemctl restart ssh

sshd -t hiçbir şey yazdırmamalıdır. sshd -T geçerli değerleri gösterir; biri yazdığınız gibi değilse başka bir dosya onu önce ayarlıyordur.

Doğrulama: alex olarak yeni bir giriş çalışır; başka herhangi bir kullanıcıyla giriş Permission denied ile reddedilir.

3. adım: Portu güvenle değiştirin (isteğe bağlı)

Farklı bir port yalnızca kayıt gürültüsünü azaltır; yine de istiyorsanız bu sırayla yapın. SSH taşınmadan önce yeni porta güvenlik duvarında izin verin:

Bash
sudo ufw allow 2222/tcp

Portu ek dosyanıza ekleyin:

Text
Port 2222

Uygulayın:

Ubuntu

Ubuntu'da SSH soket üzerinden etkinleştirilir: bir oluşturucu (generator) Port değerini yapılandırmadan okur ve ssh.socket'i ayarlar. Yeniden yükleyin ve soketi yeniden başlatın:

Bash
sudo sshd -t
sudo systemctl daemon-reload
sudo systemctl restart ssh.socket

Debian

Bash
sudo sshd -t
sudo systemctl restart ssh

Doğrulama: sudo ss -tlnp | grep 2222 dinleyiciyi gösterir ve yeni bir terminalden ssh -p 2222 [email protected] çalışır. Ancak bundan sonra eski kuralı kaldırın: sudo ufw delete allow OpenSSH.

4. adım: Donanım destekli bir anahtar kullanın (isteğe bağlı)

Bir FIDO2 güvenlik anahtarıyla, cihazı ve dokunmayı, verify-required ile de PIN'ini gerektiren bir anahtar oluşturun:

Bash
ssh-keygen -t ed25519-sk -O verify-required

Açık anahtarı her zamanki gibi authorized_keys dosyasına ekleyin. Cihaz kaybolursa diye ikinci bir anahtar veya bir konsol bulundurun.

5. adım: Tek kullanımlık kod ekleyin (isteğe bağlı)

Zamana dayalı kodlar anahtarın üzerine ikinci bir faktör ekler. PAM modülünü kurun ve kendi kullanıcınızla (root değil) ayarlayın:

Bash
sudo apt install libpam-google-authenticator
google-authenticator

Soruları yanıtlayın, QR kodu doğrulama uygulamanızla okutun ve acil durum kodlarını güvenle saklayın. Ardından /etc/pam.d/sshd dosyasına şu satırı ekleyin:

Text
auth required pam_google_authenticator.so

Ek dosyanızda KbdInteractiveAuthentication no değerini yes yapın ve iki faktörü birden zorunlu kılın:

Text
KbdInteractiveAuthentication yes
AuthenticationMethods publickey,keyboard-interactive

SSH'nin hesap şifresini değil yalnızca kodu sormasını istiyorsanız /etc/pam.d/sshd içindeki @include common-auth satırını yorum satırı yapın. sudo sshd -t ile kontrol edin ve SSH'yi yeniden başlatın.

Doğrulama: yeni bir giriş önce anahtar parolasını, ardından bir Verification code sorar. Diğer oturumunuzu kapatmadan önce test edin.

6. adım: Kayıtları izleyin

Bash
sudo journalctl -u ssh --since today | grep -E 'Accepted|Failed|Invalid'

Accepted publickey for alex satırları sizin girişlerinizdir; her kaynak adresi tanıdığınızı kontrol edin. Rastgele adreslerden gelen çok sayıda Invalid user satırı olağan arka plan taramasıdır ve bu ayarlarla zararsızdır. Tekrarlayan denemeleri otomatik engellemek için Fail2ban ve CrowdSec rehberine bakın.

Sorun giderme

2. adımdan sonra kendi kullanıcınıza Permission denied. AllowUsers içindeki ad eşleşmiyor ya da kullanıcı farklı bir adla giriş yapıyor. Dosyayı açık oturumunuzdan düzeltin.

Yeni port Ubuntu'da yanıt vermiyor. Oluşturucuyu ve soketi yeniden yüklemek yerine ssh'yi yeniden başlattınız. sudo systemctl daemon-reload ve sudo systemctl restart ssh.socket çalıştırın.

İki aşamalı doğrulama istemi hiç görünmüyor. KbdInteractiveAuthentication önceki bir dosyada hâlâ no ya da UsePAM kapalı. sudo sshd -T | grep -E 'kbdinteractive|usepam|authenticationmethods' ile kontrol edin.

Erişiminiz kesildi. Konsolu kullanın ve güvenlik duvarı değişikliğinden sonra erişimi kaybetmek rehberini izleyin.

Sonraki adımlar

Sık sorulan sorular

SSH portunu değiştirmeye değer mi?

Otomatik taramaların kayıtlarınızdaki gürültüsünü azaltır, ama tek başına koruma değildir. Daha sessiz kayıtlar istiyorsanız yeni porta güvenlik duvarında izin verdikten sonra yapın ve asıl savunma olarak yalnızca anahtarla girişi koruyun.

Ayarları neden sshd_config yerine sshd_config.d içine koymalıyım?

Paket güncellemeleri ana dosyayı değiştirebilir veya değişiklikleri birleştirmenizi isteyebilir. Ek dosya güncellemelerden etkilenmez ve OpenSSH okuduğu ilk değeri kullandığı için 00 ile başlayan bir dosya sonraki varsayılanların önüne geçer.

SSH için iki aşamalı doğrulama anahtarların yerini alır mı?

Hayır, onlara eklenir. AuthenticationMethods publickey,keyboard-interactive ile bir giriş hem anahtarı hem de bir kodu gerektirir. Açmadan önce web konsolu gibi test edilmiş bir yedek giriş yolu bulundurun.

Gerçekten geçerli olan ayarları nasıl görürüm?

sudo sshd -T çalıştırın. Tüm dosyalar okunduktan sonra her seçeneğin son değerini yazdırır; böylece önceki bir dosyanın sizinkinin önüne geçip geçmediğini görürsünüz.

Donanım destekli SSH anahtarı nedir?

ed25519-sk türündeki bir anahtar bir FIDO2 güvenlik anahtarında durur ve yalnızca cihaz takılıyken ve dokunulduğunda çalışır. Bilgisayarınız ele geçirilse bile anahtar kopyalanamaz.

Kaynaklar

Şifre Oluştur

Lütfen onaylayın