ssh sshd openssh oom oom_kileri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
ssh sshd openssh oom oom_kileri etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

23 Temmuz 2021 Cuma

SSH Servisini OOM Killer'dan Koruma Rehberi

🔒 SSH Servisini OOM Killer'dan Koruma Rehberi

🎯 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

🧠 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

🔐 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
# 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
📝 Bu rehber, Linux sistem yöneticilerinin SSH servislerini güvenli ve erişilebilir tutmasına yardımcı olmak için hazırlanmıştır.

Uygulamanın Desteklediği Linux Dağıtımı ve Çekirdek Sertifikasyon Aralığı

Çekirdek Sertifikasyon Aralığı Linux Sistem Yönetimi “Asgarinin üzerindeyiz, sorun olmaz” Çekirdek sertifikasyonu ...