Kaynak Sınırlama (Resource Limits) 📉
Bir saldırgan sunucuya sızdığında (RCE), genellikle ilk işi sunucuyu Crypto Mining (Kripto Madenciliği) veya DDoS Saldırısı için kullanmaktır. Bu durum CPU'yu %100'e kilitler ve sunucuyu sizin için kullanılmaz hale getirir.
Bu rehberde, bir servis hacklense bile sistemin tamamını kilitlemesini (Resource Exhaustion) nasıl engelleyeceğimizi anlatıyoruz.
1. Systemd ile Servisleri Kısıtlama (En Etkili Yöntem) 🛡️
Linux'ta servisler genellikle systemd ile yönetilir. Systemd, her servisin ne kadar CPU ve RAM kullanacağını çok hassas bir şekilde sınırlayabilir.
Örnek Senaryo: Web Uygulaması
Diyelim ki myapp.service adında bir uygulamanız var.
Dosyayı açın:
[Service] bloğunun altına şu sınırları ekleyin:
[Service]
# ... diğer ayarlar ...
# CPU Kısıtlama: %80 (Tek çekirdeğin %80'i)
# Eğer 2 çekirdekli sunucuda max 1 çekirdek kullansın derseniz %100,
# toplamın yarısı olsun derseniz %100 (200 üzerinden) ayarı değişir.
# En garantisi tek çekirdek %80 limiti koymaktır.
CPUQuota=80%
# RAM Kısıtlama: 1GB'a ulaşırsa süreç OOM Killer tarafından öldürülür.
MemoryMax=1G
# RAM dolmaya yaklaşınca swap kullanmasın, direkt engellesin (Opsiyonel)
MemorySwapMax=0
# Fork Bomb Koruması: Aynı anda max 100 alt işlem açabilsin.
TasksMax=100
Ayarları uygulayın:
Mantık: Saldırgan içeri girip Mining başlatsa bile, CPU kullanımı %80'i (veya belirlediğiniz sınırı) geçemez. Sunucu nefes almaya devam eder, SSH ile bağlanıp müdahale edebilirsiniz.
2. Limits.conf (Kullanıcı Bazlı Sınırlar) 👤
Systemd kullanmayan scriptler veya kullanıcı oturumları için /etc/security/limits.conf dosyası kullanılır.
Dosyayı açın:
En alta şu satırları ekleyerek bir kullanıcının veya grubun sunucuyu kilitlemesini önleyebilirsiniz:
# <domain> <type> <item> <value>
# 'deploy' kullanıcısı max 2GB RAM kullanabilsin
deploy hard as 2000000
# 'deploy' kullanıcısı max 50 işlem açabilsin (Fork Bomb önleme)
deploy hard nproc 50
# Açık dosya sayısı limiti (Too many open files hatası önlemi)
deploy soft nofile 4096
deploy hard nofile 8192
Not: Bu ayarlar kullanıcı yeniden giriş yaptığında (Login) aktif olur.
3. Acil Durumda CPU Frenleme (cpulimit) 🚑
Eğer halihazırda çalışan ve kontrolden çıkmış bir süreç varsa, onu öldürmeden yavaşlatmak için cpulimit aracı kullanılabilir.
Kurulum:
Kullanım (PID ile):
Kullanım (İsim ile):
4. Giden Trafik (Egress) Kısıtlaması 🚧
Saldırganın sunucunuz üzerinden başkalarına DDoS yapmasını engellemek için Firewall Çıkış Kuralları şarttır.
Bu konuyu Firewall Rehberi içerisinde detaylandırdık.
Mutlaka ufw default deny outgoing politikasını uygulayın!
Kıssadan Hisse:
- Systemd ile CPUQuota koyun (Mining engeller).
- UFW ile Outgoing Deny yapın (DDoS engeller).
/tmpnoexec yapın (Script indirmeyi zorlaştırır).- Otomatik Güncellemeleri açın (RCE açığını kapatır).
5. Sistem Geneli Radikal Önlem (Cgroups) ⚡
Eğer "Hangi kullanıcı ne yapıyor umurumda değil, kimse CPU'yu sömüremezsin" diyorsanız, tüm kullanıcı oturumlarına (User Slice) global limit koyabilirsiniz.
Dosyayı oluşturun:
sudo mkdir -p /etc/systemd/system/user-.slice.d/
sudo nano /etc/systemd/system/user-.slice.d/50-limit.conf
İçerik:
[Slice]
# Hiçbir kullanıcı (root dahil SSH oturumları) CPU'nun %80'inden fazlasını kullanamaz
CPUQuota=80%
# RAM'in %80'inden fazlasını kullanamaz
MemoryMax=80%
Uygula:
6. Docker Konteyner Limitleri 🐳
Mining virüsleri en kolay Docker konteynerlerine bulaşır. Eğer limit koymazsanız tüm sunucuyu kilitlerler.
Docker Run ile
docker run -d \
--cpus="0.5" \ # Yarım çekirdek
--memory="512m" \ # 512MB RAM
--pids-limit=100 \ # Fork bomb koruması
my-app
Docker Compose ile (Önerilen)
services:
app:
image: my-app
deploy:
resources:
limits:
cpus: "0.50"
memory: 512M
reservations:
cpus: "0.25"
memory: 256M
7. Özet: Saldırı Zincirini Kırma 🔗
Yaşadığınız RCE (Remote Code Execution) saldırısını durdurmak için zincirin halkalarını şöyle kırdık:
| Saldırı Adımı | Bizim Önlemimiz | Sonuç |
|---|---|---|
| 1. Giriş (React RCE) | Otomatik Güncelleme | Açık kapanır, giremez. |
| 2. Yayılma (Container Root) | User NS / Non-Root | (Sonraki adımda Docker güvenliğinde işleyeceğiz). |
| 3. Kaynak Tüketimi (Mining) | Resource Limits | CPU %100 olamaz, sunucu kilitlenmez. |
| 4. Dışarı Saldırı (DDoS) | UFW Outbound Deny | Dışarı veri/paket gönderemez. |
| 5. Gizlenme | Monitoring Scripts | cpu_alert ile anında yakalarız. |
📋 Acil Yapılacaklar Listesi
Saldırı altındaysanız veya hemen önlem almak istiyorsanız:
# 1. Hemen ve şimdi güncelle!
sudo apt update && sudo apt upgrade -y
# 2. Otomatik güncellemeleri aç (Unattended)
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
# 3. Egress Firewall'ı aktifleştir (Dikkatli ol, SSH kopmasın!)
sudo ufw default deny outgoing
sudo ufw allow out 80/tcp
sudo ufw allow out 443/tcp
sudo ufw allow out 53
# 4. Mevcut sistemi tara (Saldırgan izi var mı?)
sudo lynis audit system