SSH Güvenliği: Anahtar Tabanlı Giriş, Port Değiştirme ve Bastion
SSH güvenliğini artırın: anahtar tabanlı kimlik doğrulama, port değiştirme, Fail2Ban ve bastion/jump host yapılandırması.
SSH Güvenliği Neden Önemlidir?
SSH (Secure Shell), Linux sunuculara uzaktan erişimin temel protokolüdür. Ancak varsayılan yapılandırmasıyla çalışan bir SSH sunucusu, İnternet'e açık olduğunda sürekli kaba kuvvet (brute force) saldırılarına maruz kalır. Tipik bir VPS, port 22'de dakikada yüzlerce başarısız giriş denemesine sahiptir. Bu nedenle SSH güvenliğini sıkılaştırmak, sunucu güvenliğinin birinci adımı olmalıdır.
Temel SSH Güvenlik Prensipleri
- Şifre ile girişi devre dışı bırakın, anahtar kullanın
- Root girişini doğrudan engelleyin
- Varsayılan port 22'yi değiştirin
- Erişime izin verilecek kullanıcıları kısıtlayın
- Başarısız giriş denemelerini izleyin ve engelleyin (Fail2Ban)
- İki faktörlü kimlik doğrulama (2FA) ekleyin
Anahtar Oluşturma
ED25519 Anahtar Çifti (Önerilen)
ED25519, RSA'ya göre daha kısa ama en az o kadar güvenli modern bir anahtar algoritmasıdır. Yeni kurulumlar için ED25519 kullanmanız önerilir:
# Yerel makinenizde (istemci) çalıştırın
ssh-keygen -t ed25519 -C "isim@sirket.com"
# Dosya konumu sorulduğunda Enter'a basın (varsayılan: ~/.ssh/id_ed25519)
# Parola (passphrase) girin - boş bırakılabilir ama önerilmez
# Oluşturulan dosyalar:
# ~/.ssh/id_ed25519 (özel anahtar - kesinlikle paylaşmayın!)
# ~/.ssh/id_ed25519.pub (public anahtar - sunucuya kopyalanır)
RSA Anahtar Çifti (Eski sistemler için)
ssh-keygen -t rsa -b 4096 -C "isim@sirket.com"
Public Anahtarı Sunucuya Kopyalama
# Otomatik yöntem
ssh-copy-id -i ~/.ssh/id_ed25519.pub kullanici@SUNUCU_IP
# Manuel yöntem (ssh-copy-id yoksa)
cat ~/.ssh/id_ed25519.pub | ssh kullanici@SUNUCU_IP \
"mkdir -p ~/.ssh && chmod 700 ~/.ssh && cat >> ~/.ssh/authorized_keys && chmod 600 ~/.ssh/authorized_keys"
# Doğrulama: anahtar ile giriş deneyin
ssh -i ~/.ssh/id_ed25519 kullanici@SUNUCU_IP
sshd_config Sıkılaştırma
cp /etc/ssh/sshd_config /etc/ssh/sshd_config.bak
nano /etc/ssh/sshd_config
# Varsayılan port değiştir (örnek: 2222)
Port 2222
# Root girişini engelle
PermitRootLogin no
# Şifre ile girişi kapat (anahtar kurulduktan SONRA kapatın!)
PasswordAuthentication no
ChallengeResponseAuthentication no
# Yalnızca belirtilen kullanıcılara izin ver
AllowUsers yonetici deploy
# Güvenli şifreleme algoritmaları
Ciphers chacha20-poly1305@openssh.com,aes256-gcm@openssh.com
MACs hmac-sha2-512-etm@openssh.com,hmac-sha2-256-etm@openssh.com
KexAlgorithms curve25519-sha256,diffie-hellman-group16-sha512
# Bağlantı zaman aşımı
LoginGraceTime 30
MaxAuthTries 3
ClientAliveInterval 120
ClientAliveCountMax 3
# Yapılandırmayı doğrula ve uygula
sshd -t
systemctl restart sshd
# Güvenlik duvarında yeni portu açmayı unutmayın!
ufw allow 2222/tcp
Fail2Ban ile Kaba Kuvvet Koruması
apt install -y fail2ban
cat > /etc/fail2ban/jail.local << 'EOF'
[DEFAULT]
bantime = 3600
findtime = 600
maxretry = 3
banaction = iptables-multiport
[sshd]
enabled = true
port = 2222
logpath = %(sshd_log)s
maxretry = 3
EOF
systemctl enable --now fail2ban
fail2ban-client status sshd
Bastion / Jump Host Yapılandırması
Bastion host, iç ağdaki sunuculara erişim için tek giriş noktası görevi gören güçlendirilmiş bir sunucudur. Tüm SSH bağlantıları bu sunucu üzerinden geçer.
~/.ssh/config ile Jump Host Tanımlama
# ~/.ssh/config (yerel makinenizde)
Host bastion
HostName 203.0.113.1
User yonetici
Port 2222
IdentityFile ~/.ssh/id_ed25519
Host ic-sunucu-1
HostName 192.168.1.10
User deploy
ProxyJump bastion
IdentityFile ~/.ssh/id_ed25519
Host ic-sunucu-2
HostName 192.168.1.20
User deploy
ProxyJump bastion
# Artık doğrudan iç sunucuya bağlanabilirsiniz:
ssh ic-sunucu-1 # Otomatik olarak bastion üzerinden geçer
Sık Karşılaşılan Sorunlar
- Anahtar sonrası giriş yapılamıyor:
ssh -v kullanici@SUNUCUile hata ayrıntısını görün. ~/.ssh/authorized_keys dosyasının izni600olmalıdır. - PasswordAuthentication no sonrası kilitlendi: VPS konsoluna (KVM/IPMI) bağlanarak sshd_config'i düzeltin.
- Fail2Ban yanlış IP'leri banlıyor:
/etc/fail2ban/jail.localdosyasınaignoreip = 127.0.0.1/8 KENDİ_IP_ADRESİNİZekleyin.
İlgili Makaleler
- SSH Permission Denied (publickey) Hatası Nasıl Çözülür?
- Linux Firewall: firewalld ve UFW ile HTTP, HTTPS ve SSH Kuralları
- UFW Firewall Nasıl Kurulur? Ubuntu ve Debian Güvenlik Duvarı Rehberi
- Ubuntu Server 22.04 LTS Kurulumu ve Güvenli Yapılandırma Rehberi
- AlmaLinux 9 Kurulumu ve İlk Yapılandırma Rehberi
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!