aslain.dev
0%
01 Hizmetler 02 Hakkımda 03 Projeler 04 Stack 05 Blog 06 İletişim
← Tüm makaleler Oyun Sunucusu

SSH Güvenliği: Anahtar Girişi ve fail2ban Rehberi

Bir oyun sunucusu, VPS ya da herhangi bir Linux makinesi internete bağlı olduğu andan itibaren SSH güvenliği en kritik savunma hattınızdır. Çünkü saldırganların ilk denediği şey, açık olan 22 numaralı porta otomatik araçlarla yüzlerce kullanıcı adı–parola kombinasyonu göndermektir. Bu yazıda anahtar tabanlı girişi kurmayı, parolayla girişi tamamen kapatmayı, portu değiştirmeyi ve fail2ban ile brute force saldırılarını otomatik engellemeyi adım adım anlatıyorum. Hepsi gerçek, çalışan komutlar.

Neden parola tek başına yetmez?

Parolalar tahmin edilebilir, sızdırılabilir ve sözlük saldırılarına açıktır. Sunucunuzun loglarına bakarsanız (sudo journalctl -u ssh veya /var/log/auth.log), tanımadığınız IP'lerden gelen yüzlerce başarısız giriş denemesi görürsünüz. SSH anahtarı ise pratikte tahmin edilemeyen, asimetrik bir kriptografi çiftidir: özel anahtar sizde kalır, açık anahtar sunucuya kopyalanır. Sunucu, yalnızca eşleşen özel anahtara sahip olan kişiyi içeri alır. Doğru kurulduğunda parola brute force tehdidi tamamen ortadan kalkar.

1. SSH anahtar çifti oluşturma

Kendi bilgisayarınızda (sunucuda değil) modern ve güvenli bir ed25519 anahtarı üretin:

ssh-keygen -t ed25519 -C "aslain@laptop"

Komut sizden bir dosya yolu ve isteğe bağlı bir passphrase ister. Passphrase, özel anahtarınızı diskte ek bir parolayla şifreler; dizüstü bilgisayarınız çalınırsa ikinci bir bariyer sağlar — atlamayın. Sonuçta iki dosya oluşur: özel anahtar ~/.ssh/id_ed25519 ve açık anahtar ~/.ssh/id_ed25519.pub. .pub uzantılı olan paylaşılabilir; uzantısız olanı kimseyle paylaşmayın.

2. Açık anahtarı sunucuya kopyalama

En kolay yöntem ssh-copy-id'dir. Bu komut açık anahtarınızı sunucudaki ~/.ssh/authorized_keys dosyasına doğru izinlerle ekler:

ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@sunucu_ip

ssh-copy-id yoksa anahtarı elle ekleyebilirsiniz. İzinlerin doğru olması şarttır, aksi halde SSH anahtarı görmezden gelir:

ssh kullanici@sunucu_ip "mkdir -p ~/.ssh && chmod 700 ~/.ssh && \
cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys" < ~/.ssh/id_ed25519.pub

Şimdi yeni bir terminalde parolasız (yalnızca passphrase'le) girip giremediğinizi test edin:

ssh kullanici@sunucu_ip

Mevcut oturumunuzu kapatmadan bunu doğrulayın; anahtar çalışmıyorsa parola devredeyken hatayı düzeltebilirsiniz.

3. Parola girişini ve root girişini kapatma

Anahtar girişi çalıştığını doğruladıktan sonra parolayla girişi kapatın. Yapılandırma /etc/ssh/sshd_config dosyasında. Düzenlemeden önce bir yedek alın:

sudo cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
sudo nano /etc/ssh/sshd_config

Şu satırları bulun (yoksa ekleyin) ve değerlerini ayarlayın:

PasswordAuthentication no
PubkeyAuthentication yes
PermitRootLogin prohibit-password
ChallengeResponseAuthentication no

PermitRootLogin prohibit-password, root'un yalnızca anahtarla girmesine izin verir; tamamen kapatmak için no yazıp normal kullanıcı + sudo ile çalışmak daha güvenlidir. Bazı sistemlerde ayarlar /etc/ssh/sshd_config.d/ altındaki dosyalarda override edilebilir; oraya da bakın. Değişikliği uygulamadan önce sözdizimini test edin, sonra servisi yeniden başlatın:

sudo sshd -t
sudo systemctl restart ssh

Bazı dağıtımlarda servis adı sshd'dir (systemctl restart sshd). Yeniden başlattıktan sonra mevcut oturumu kapatmadan yeni bir bağlantı açıp anahtarla girişi tekrar doğrulayın.

4. Portu değiştirmek: gürültüyü azaltır, çözüm değildir

SSH'ı standart 22'den başka bir porta taşımak (örneğin 2222 veya 49222), otomatik tarama botlarının çoğunu loglarınızdan uzak tutar. Bu bir güvenlik önlemi değil, gürültü azaltma önlemidir — gerçek koruma anahtar ve fail2ban'dır. Yine de logları temiz tutmak değerlidir:

Port 49222

Eğer sunucuda bir güvenlik duvarı (UFW gibi) çalışıyorsa, servisi yeniden başlatmadan önce yeni portu açın, yoksa kendinizi dışarıda bırakırsınız:

sudo ufw allow 49222/tcp
sudo systemctl restart ssh

Artık bağlanırken portu belirtmeniz gerekir: ssh -p 49222 kullanici@sunucu_ip. Tekrar tekrar yazmamak için yerel ~/.ssh/config dosyanıza bir kısayol ekleyin:

Host sunucum
    HostName sunucu_ip
    User kullanici
    Port 49222
    IdentityFile ~/.ssh/id_ed25519

Bundan sonra sadece ssh sunucum yeterli olur.

5. fail2ban ile brute force korumasını otomatikleştirin

Parolayı kapatsanız bile botlar bağlantı denemeye devam eder. fail2ban, logları izleyip belirli sürede çok fazla başarısız deneme yapan IP'leri güvenlik duvarı üzerinden geçici olarak yasaklar. Debian/Ubuntu'da kurulumu:

sudo apt update && sudo apt install fail2ban -y

Yapılandırmayı doğrudan jail.conf üzerinde değil, override için jail.local dosyasında yapın (paket güncellemeleri ayarlarınızı ezmesin):

sudo nano /etc/fail2ban/jail.local

İçine SSH için bir jail tanımlayın. Portu değiştirdiyseniz port satırına onu yazın:

[sshd]
enabled = true
port = 49222
maxretry = 4
findtime = 10m
bantime = 1h

Bu ayar, 10 dakika içinde 4 başarısız denemeden sonra IP'yi 1 saat yasaklar. Tekrar eden saldırganları daha uzun cezalandırmak için bantime.increment = true de ekleyebilirsiniz. Servisi başlatıp durumu kontrol edin:

sudo systemctl enable --now fail2ban
sudo fail2ban-client status sshd

Çıktıda yasaklanmış IP sayısını ve listesini görürsünüz. Bir IP'yi yanlışlıkla yasakladıysanız (örneğin kendinizi) elle çözebilirsiniz:

sudo fail2ban-client set sshd unbanip 203.0.113.10

6. Birkaç ekstra sağlamlaştırma adımı

  • Kendinizi kilitlemeye karşı: kritik değişikliklerden sonra her zaman ikinci bir oturum açık tutun ve yeni bağlantıyı test edin.
  • Güvenlik duvarı: UFW ile yalnızca gerekli portları açın (sudo ufw default deny incoming), oyun sunucusu portları dışında her şeyi kapatın.
  • Güncel kalın: sudo apt update && sudo apt upgrade düzenli çalıştırın; SSH açıkları çoğunlukla güncel olmayan sistemlerde sömürülür.
  • Boşta zaman aşımı: ClientAliveInterval 300 ile atıl oturumları kapatın.

Sık Sorulan Sorular

Özel anahtarımı kaybedersem sunucuya nasıl girerim?

Parola girişini kapattıysanız ve tek anahtarınızı kaybettiyseniz SSH ile giremezsiniz. Bu yüzden ya birden fazla anahtarı authorized_keys'e ekleyin, ya da sağlayıcınızın konsol/kurtarma erişimini (VPS panelindeki web konsolu) hazır tutun. Yeni bir anahtar oluşturup oradan ekleyebilirsiniz.

Port değiştirmek tek başına yeterli güvenlik sağlar mı?

Hayır. Port değiştirmek yalnızca otomatik tarama gürültüsünü azaltır; hedefli bir saldırgan portunuzu kolayca tarar. Asıl güvenlik, parolayı kapatıp anahtar kullanmak ve fail2ban gibi bir kademeli savunma eklemektir.

fail2ban beni neden ara sıra yasaklıyor?

Genellikle yanlış passphrase, yanlış kullanıcı adı ya da eski bir anahtarla art arda denemeler yüzünden olur. fail2ban-client status sshd ile kontrol edip unbanip ile kendinizi çıkarın; ayrıca ignoreip satırına kendi sabit IP'nizi ekleyebilirsiniz.

Sunucunuzu kurşun geçirmez yapmak mı istiyorsunuz? Oyun sunucusu, VPS ya da web barındırma kurulumunuzun SSH ve güvenlik duvarı sağlamlaştırmasını birlikte yapalım. Benimle iletişime geçin ve altyapınızı baştan sona güvenli hale getirelim.

Bu kategorideki tüm yazılar →

Devamı için