Linux Sunucu Güvenliği: SSH'yi Hacklenemez Hale Getirme Rehberi
2023'te bir müşterimizin sunucusuna giriş denemesi yapıldı: 48 saat içinde 12,400 başarısız SSH girişi. Ama hiçbiri başarılı olmadı. Neden? Çünkü SSH güvenliğini doğru yapılandırmıştık. Bu yazıda, bir Linux sunucusunu nasıl sağlamlaştıracağınızı, hangi SSH ayarlarını yapmanız gerektiğini ve hangi araçları kullanacağınızı anlatacağız. Spoiler: Root login kapatmak yeterli değil.
Neden SSH Güvenliği Bu Kadar Önemli?
SSH (Secure Shell), Linux sunucularına uzaktan bağlanmanın standart yöntemi. Ama varsayılan ayarlarla çalışan bir SSH servisi, saldırganlar için açık kapı demek.
Gerçek İstatistik: SistemDC veri merkezimizde günlük ortalama 8,500 SSH brute-force saldırısı tespit ediyoruz. Korumasız bir sunucu, ilk 24 saat içinde hedef olur.
10 Adımda SSH Sağlamlaştırma
Adım 1: Root Login'i Devre Dışı Bırakın
Root kullanıcısıyla doğrudan SSH bağlantısına izin vermek, en büyük güvenlik açığı. Önce sudo yetkili bir kullanıcı oluşturun:
# Yeni kullanıcı oluştur
adduser sistemadmin
# Sudo yetkisi ver
usermod -aG sudo sistemadmin
# SSH config düzenle
nano /etc/ssh/sshd_config
# Bu satırı bulup değiştir:
PermitRootLogin no
# SSH'yi yeniden başlat
systemctl restart sshd
Adım 2: SSH Portunu Değiştirin
Varsayılan port 22, botların ilk hedefi. Farklı bir port kullanmak, %95 otomatik saldırıyı engeller.
# /etc/ssh/sshd_config
Port 49222
# Firewall'da yeni portu aç
ufw allow 49222/tcp
ufw delete allow 22/tcp
# SSH yeniden başlat
systemctl restart sshd
Önemli: Yeni porta bağlanabildiğinizden emin olmadan mevcut bağlantıyı kapatmayın! Test için yeni bir terminal açın.
Adım 3: SSH Key Authentication (Şifresiz Giriş)
Şifre yerine SSH key kullanmak, brute-force saldırılarını %100 etkisiz hale getirir.
# Yerel bilgisayarınızda (Mac/Linux)
ssh-keygen -t ed25519 -C "
[email protected]"
# Public key'i sunucuya kopyala
ssh-copy-id -i ~/.ssh/id_ed25519.pub sistemadmin@sunucu_ip -p 49222
# Sunucuda şifre girişini kapat
# /etc/ssh/sshd_config
PasswordAuthentication no
PubkeyAuthentication yes
systemctl restart sshd
Adım 4: Fail2Ban Kurulumu
Fail2Ban, başarısız giriş denemelerini izler ve saldırganı otomatik engeller.
# Kurulum
apt install fail2ban
# Yapılandırma
nano /etc/fail2ban/jail.local
[sshd]
enabled = true
port = 49222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600
# Başlat
systemctl enable fail2ban
systemctl start fail2ban
# Banlanan IP'leri görmek için
fail2ban-client status sshd
Anlamı: 10 dakika (600 saniye) içinde 3 başarısız deneme = 1 saat ban.
Adım 5: Two-Factor Authentication (2FA)
SSH key'e ek olarak Google Authenticator ile 2FA ekleyin.
# Google Authenticator PAM modülü kur
apt install libpam-google-authenticator
# Kullanıcı olarak çalıştır (root değil!)
su - sistemadmin
google-authenticator
# Sorulara cevaplar:
# - Time-based tokens? y
# - Update .google_authenticator? y
# - Disallow multiple uses? y
# - Increase time skew? n
# - Rate limiting? y
# PAM ayarı
nano /etc/pam.d/sshd
# Ekle:
auth required pam_google_authenticator.so
# SSH config
nano /etc/ssh/sshd_config
ChallengeResponseAuthentication yes
AuthenticationMethods publickey,keyboard-interactive
systemctl restart sshd
Adım 6: IP Whitelist (Sadece Belirli IP'ler)
Eğer statik IP'niz varsa, sadece o IP'den SSH bağlantısına izin verin.
# UFW ile IP kısıtlama
ufw allow from 85.34.12.45 to any port 49222 proto tcp
# Tüm diğer bağlantıları reddet
ufw deny 49222/tcp
# Alternatif: /etc/ssh/sshd_config
AllowUsers
[email protected]
Adım 7: SSH Banner ve Timeout Ayarları
# /etc/ssh/sshd_config
# Banner göster (uyarı mesajı)
Banner /etc/ssh/banner.txt
# Boş bağlantı timeout (5 dakika)
ClientAliveInterval 300
ClientAliveCountMax 2
# Login timeout (1 dakika)
LoginGraceTime 60
# Maksimum auth denemesi
MaxAuthTries 3
# Maksimum eşzamanlı bağlantı
MaxSessions 2
Adım 8: SSH Protocol ve Şifreleme
Adım 9: Log Monitoring
SSH bağlantılarını sürekli izleyin.
# Son SSH girişlerini görüntüle
last -a | head -20
# Başarısız giriş denemeleri
grep "Failed password" /var/log/auth.log | tail -50
# Canlı log takibi
tail -f /var/log/auth.log
# Logwatch kurarak günlük rapor al
apt install logwatch
logwatch --detail High --mailto
[email protected] --service sshd
Adım 10: Port Knocking (İleri Seviye)
SSH portunu varsayılan olarak kapalı tutun, bağlanmadan önce "gizli kapıyı" çalın.
# knockd kurulumu
apt install knockd
# Yapılandırma: /etc/knockd.conf
[options]
logfile = /var/log/knockd.log
[openSSH]
sequence = 7000,8000,9000
seq_timeout = 5
command = /sbin/iptables -I INPUT -s %IP% -p tcp --dport 49222 -j ACCEPT
tcpflags = syn
[closeSSH]
sequence = 9000,8000,7000
seq_timeout = 5
command = /sbin/iptables -D INPUT -s %IP% -p tcp --dport 49222 -j ACCEPT
tcpflags = syn
# Kullanım (yerel bilgisayardan)
knock sunucu_ip 7000 8000 9000
ssh sistemadmin@sunucu_ip -p 49222
Güvenlik Testi: Kendinizi Saldırın
Yapılandırmanızı test etmek için kendi sunucunuza saldırı simüle edin:
# SSH audit aracı kur
pip3 install ssh-audit
# Sunucuyu tara
ssh-audit sunucu_ip:49222
# Nmap ile port tarama
nmap -p 1-65535 sunucu_ip
# Lynis güvenlik audit
apt install lynis
lynis audit system
SistemDC'de Varsayılan Güvenlik
SistemDC sunucularında, ilk kurulumdan itibaren temel güvenlik önlemleri aktiftir:
- Root login kapalı (sudo kullanıcısı ile teslim)
- Fail2Ban ön kurulu ve yapılandırılmış
- UFW firewall aktif
- Günlük güvenlik güncellemeleri (unattended-upgrades)
- SSH port değişikliği (isteğe bağlı)
- DDoS koruması (network seviyesinde)
Ek Hizmet: Managed Security paketi ile 7/24 güvenlik monitoring, log analizi ve acil müdahale hizmeti sunuyoruz. Aylık 500 TL'den başlayan fiyatlarla.
Yedekleme ve Disaster Recovery
Güvenlik önlemleri %100 koruma sağlamaz. Yedekleme şart:
# Otomatik yedekleme scripti
nano /usr/local/bin/backup.sh
#!/bin/bash
BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR
# Veritabanı yedekleme
mysqldump --all-databases > $BACKUP_DIR/databases.sql
# Web dosyaları
tar -czf $BACKUP_DIR/web.tar.gz /var/www
# SSH config
cp -r /etc/ssh $BACKUP_DIR/
# 7 günden eski yedekleri sil
find /backup -type d -mtime +7 -exec rm -rf {} \;
# Cron ile günlük çalıştır
crontab -e
0 2 * * * /usr/local/bin/backup.sh
Sunucu Güvenlik Analizi İster misiniz?
Mevcut sunucunuzun güvenlik durumunu ücretsiz analiz edelim. Açıkları tespit edip raporlayalım.
İletişim:
[email protected]
Kurumsal Whatsapp: 0224 334 02 42
Sonuç: Güvenlik Katmanları
SSH güvenliği tek bir ayar değil, katmanlı bir yaklaşım gerektirir:
- Root login kapalı
- SSH key authentication
- Port değişikliği
- Fail2Ban
- 2FA (Two-factor)
- IP whitelist (mümkünse)
- Log monitoring
- Düzenli güvenlik güncellemeleri
Bu 10 adımı uygulayan bir sunucu, brute-force saldırılarına karşı %99.9 korumalıdır. 14 yıllık deneyimimizde, düzgün yapılandırılmış hiçbir sunucumuz SSH üzerinden hack'lenmedi.
Not: Bu yazıdaki komutlar Ubuntu 24.04, Debian 12 ve türevleri için test edilmiştir. Üretim sunucusunda değişiklik yapmadan önce mutlaka yedek alın. Güvenlik yapılandırması sistem ve kullanım senaryosuna göre özelleştirilmelidir.