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.

Büyük hacimli diskleri niye 512 sector ile kullanalım 4096 byte lık sector kullanabilirken !

 Günümüzde güncel linux dağıtımlarının hepsi 4096byte sector ile sorunsuz çalışmaktadır.  Yukarıda görüldüğü gibi diskler 512/4096 byte şekl...