🔒 SSH Servisini OOM Killer'dan Koruma Rehberi
📑 İçerik
🎯 Giriş
Bu rehber, SSH servisinin sistem belleği tükendiğinde bile çalışır durumda kalmasını sağlar. RHEL/CentOS 7/8/9/10 ve Debian/Ubuntu sistemleri için geçerlidir.
💡 Bu rehber şunlara yönelik:
• Başlangıç seviye Linux sistem yöneticileri
• Deneyimli sistem yöneticileri
• SSH erişimi kritik olan sunucu yöneticileri
• Başlangıç seviye Linux sistem yöneticileri
• Deneyimli sistem yöneticileri
• SSH erişimi kritik olan sunucu yöneticileri
🧠 OOM Killer Nedir?
OOM Killer (Out of Memory Killer), sistem belleği tükendiğinde devreye giren Linux mekanizmasıdır. Sistem kaynaklarını kurtarmak için işlemleri öldürür.
🔄 Nasıl Çalışır?
- Sistem RAM'i tükendiğinde otomatik devreye girer
- Her işlem için "OOM Score" hesaplar
- En yüksek skora sahip işlemleri öldürür
- Kritik işlemleri korumak için özel parametreler kullanılır
⚠️ Dikkat: OOM Killer SSH bağlantınızı öldürebilir ve sunucuya erişiminizi kaybedebilirsiniz!
🔗 SSH ve OOM Killer İlişkisi
📋 Mevcut Durumu Kontrol
SSH işlemlerinin OOM ayarlarını kontrol edin:
# SSH işlem ID'lerini bul ve OOM ayarlarını kontrol et pgrep sshd | while read PID; do echo "PID: $PID" cat /proc/$PID/oom_adj 2>/dev/null || cat /proc/$PID/oom_score_adj 2>/dev/null echo "---" done
Tipik çıktı:
PID: 1244 -17 --- PID: 6425 0 ---
📊 Sonuç Analizi
İşlem Türü | OOM Score | Durum |
---|---|---|
Ana SSHD işlemi | -17 | ✅ Korumalı |
Kullanıcı SSH bağlantıları | 0 | ❌ Korumasız |
🚨 Problem: SSH servisi çalışsa bile aktif bağlantılarınız kesilerek erişiminizi kaybedebilirsiniz!
🛡️ Çözüm: SSH Servisini Tamamen Koruma
🔴 RHEL/CentOS 7/8/9/10 İçin
Adım 1: Servis Dosyasını Hazırlama
# Systemd servis dosyasını kopyala sudo cp /lib/systemd/system/sshd.service /etc/systemd/system/sshd.service # Veya override dosyası oluştur sudo systemctl edit sshd
Adım 2: Servis Dosyasını Düzenleme
/etc/systemd/system/sshd.service
dosyasına:
[Unit] Description=OpenSSH server daemon Documentation=man:sshd(8) man:sshd_config(5) After=network.target sshd-keygen.target Wants=sshd-keygen.target [Service] Type=notify ExecStart=/usr/sbin/sshd -D $OPTIONS ExecReload=/bin/kill -HUP $MAINPID KillMode=process Restart=on-failure RestartSec=42s # OOM Killer'dan koruma ayarları OOMPolicy=continue OOMScoreAdjust=-1000 DefaultLimitNICE=-19 [Install] WantedBy=multi-user.target
🟢 Debian/Ubuntu İçin
Adım 1: Override Dizini Oluşturma
# Override dizini oluştur sudo mkdir -p /etc/systemd/system/ssh.service.d # Override dosyası oluştur sudo nano /etc/systemd/system/ssh.service.d/oom-protect.conf
Adım 2: Override Dosyası
/etc/systemd/system/ssh.service.d/oom-protect.conf
dosyasına:
[Service] # OOM Killer'dan koruma ayarları OOMPolicy=continue OOMScoreAdjust=-1000 DefaultLimitNICE=-19
⚙️ Ortak Adımlar (Tüm Dağıtımlar)
Adım 3: Systemd Yenileme
# Systemd daemon'unu yeniden yükle sudo systemctl daemon-reload # SSH servisini yeniden başlat sudo systemctl restart sshd # RHEL/CentOS için # veya sudo systemctl restart ssh # Debian/Ubuntu için
Adım 4: Doğrulama
# SSH işlemlerini kontrol et pgrep sshd | while read PID; do echo "PID: $PID" cat /proc/$PID/oom_score_adj 2>/dev/null echo "---" done
✅ Beklenen çıktı:
PID: 8409
-1000
---
PID: 8454
-1000
📋 Parametrelerin Açıklaması
Parametre | Değer | Açıklama |
---|---|---|
OOMPolicy |
continue | SSH servisi OOM durumunda çalışmaya devam eder |
OOMScoreAdjust |
-1000 | SSH işlemlerinin OOM score'unu düşürür |
DefaultLimitNICE |
-19 | SSH işlemlerinin CPU önceliğini artırır |
💡 OOMScoreAdjust değerleri:
• -1000: Maksimum koruma (asla öldürülmez)
• 0: Varsayılan (normal öncelik)
• +1000: İlk öldürülecek işlem
• -1000: Maksimum koruma (asla öldürülmez)
• 0: Varsayılan (normal öncelik)
• +1000: İlk öldürülecek işlem
🔐 Güvenlik Önerileri
1️⃣ SSH Bağlantı Sınırları
/etc/ssh/sshd_config
dosyasında:
# Maksimum eş zamanlı bağlantı sayısı MaxSessions 10 # Kimlik doğrulama denemeleri MaxAuthTries 3 # Bağlantı zaman aşımı ClientAliveInterval 300 ClientAliveCountMax 2
2️⃣ İzleme Scripti
SSH bağlantılarını izlemek için:
#!/bin/bash # /usr/local/bin/ssh_monitor.sh SSH_COUNT=$(who | wc -l) MEMORY_USAGE=$(free | grep Mem | awk '{printf "%.0f", $3/$2 * 100}') if [ $SSH_COUNT -gt 5 ] && [ $MEMORY_USAGE -gt 80 ]; then logger "UYARI: Yüksek SSH sayısı ($SSH_COUNT) ve bellek (%$MEMORY_USAGE)" fi
🔧 Sorun Giderme
❌ SSH Servisi Başlamıyor
# Servis durumunu kontrol et sudo systemctl status sshd # Detaylı log kayıtları sudo journalctl -u sshd -f # Konfigürasyon test et sudo sshd -t
🆘 Acil Durum
⚠️ SSH erişimi kesilirse:
1. Fiziksel konsol veya IPMI kullanın
2. Single user mode ile başlatın
3. Değişiklikleri geri alın
1. Fiziksel konsol veya IPMI kullanın
2. Single user mode ile başlatın
3. Değişiklikleri geri alın
# Systemd servisini varsayılana döndür sudo systemctl revert sshd sudo systemctl daemon-reload sudo systemctl restart sshd
✅ Özet
🎉 Bu konfigürasyon ile elde edecekleriniz:
- ✅ SSH servisi RAM tükense bile çalışır
- ✅ Aktif SSH bağlantıları korunur
- ✅ Sistem yükü altında SSH erişimi garanti edilir
- ✅ Güvenlik sınırları uygulanır
🔥 Önemli Uyarılar:
• Production öncesi test ortamında deneyin
• Sistem kaynaklarınızı düzenli izleyin
• Backup ve acil erişim planınızı hazır bulundurun
• SSH değişikliği yaparken mevcut oturumu açık tutun
• Production öncesi test ortamında deneyin
• Sistem kaynaklarınızı düzenli izleyin
• Backup ve acil erişim planınızı hazır bulundurun
• SSH değişikliği yaparken mevcut oturumu açık tutun
📝 Bu rehber, Linux sistem yöneticilerinin SSH servislerini güvenli ve erişilebilir tutmasına yardımcı olmak için hazırlanmıştır.