Linux Sunucu Güvenlik İhlali Sonrası Yeniden Kurulum

Kimse sunucusunun hacklenmesini düşünmek istemez. Ancak şüpheli trafik, değiştirilmiş dosyalar veya bilinmeyen kullanıcılar görürseniz, tahmin yürütmektense sistemi yeniden kurmak daha güvenlidir. Bu rehberde, bir güvenlik ihlali şüphesi durumunda Linux sunucunuzu nasıl güvenli bir şekilde yeniden kuracağınızı, saldırının nedenini nasıl araştıracağınızı ve yeni sistemi bir savaş alanına girmişçesine nasıl sertleştireceğinizi anlatacağım.

🚨 İlk Fark Etme: Sunucunuz Gerçekten Compromise Edildi mi?

Şüpheli Belirtiler

Bir Linux sunucunun güvenliğinin ihlal edildiğini gösteren ana belirtiler şunlardır:

Performans Anomalileri:

  • Açıklanamayan yüksek CPU veya memory kullanımı
  • Bilinmeyen süreçlerin çalışması
  • Anormal network trafiği

Sistem Değişiklikleri:

  • Yetkilendirilmemiş kullanıcı hesapları
  • Değiştirilmiş sistem dosyaları
  • Web sayfalarının “Hacked” mesajlarıyla değiştirilmesi
  • Beklenmeyen cronjob’lar veya startup script’leri

Güvenlik İhlali İşaretleri:

  • Logların silinmesi veya manipüle edilmesi
  • Bilinen malware imzaları
  • Şüpheli SSH bağlantıları
  • Rootkit belirtileri

Hızlı Değerlendirme Komutları

# Çalışan süreçleri kontrol et
ps aux | head -20
ps -elf | grep -v "^\[" | head -20

# Ağ bağlantılarını incele
netstat -tulpn | grep LISTEN
ss -tulpn

# Son giriş yapan kullanıcıları kontrol et
last | head -20
lastlog

# Sistem dosyalarında değişiklikleri kontrol et
find /etc -type f -mtime -7 -ls
find /bin /sbin /usr/bin /usr/sbin -type f -mtime -7 -ls

# Şüpheli dosyaları ara
find / -name "*.php" -type f -mtime -7 2>/dev/null
find /tmp /var/tmp -type f -executable 2>/dev/null

🔒 Acil Müdahale: İlk 15 Dakika

1. Panik Yapmayın, Sakin Kalın

Sistem gerçekten tehlikeye girdiğini doğruladığınızda, ilk adım: panik yapmayın. Ne yaparsanız yapın, sakin ve odaklı kalın.

2. Ağ Bağlantısını Kesin (Güç DEĞİL!)

# Ağ arayüzlerini devre dışı bırak
sudo ip link set eth0 down
sudo ip link set wlan0 down

# Alternatif olarak iptables ile tüm trafiği blokla
sudo iptables -P INPUT DROP
sudo iptables -P FORWARD DROP
sudo iptables -P OUTPUT DROP

⚠️ UYARI: Sunucuyu kapatmamalısınız, çünkü adli tıp araştırması yapmak zorunda kalabilirsiniz ve kanıtları korumalısınız (bellekteki veriler sistem kapatılırsa silinebilir)

3. Durum Tespiti ve Dokümantasyon

# Sistem durumunu kaydet
date > /tmp/incident_log.txt
uptime >> /tmp/incident_log.txt
ps aux >> /tmp/incident_log.txt
netstat -tulpn >> /tmp/incident_log.txt
who >> /tmp/incident_log.txt

# Memory dump al (opsiyonel)
sudo dd if=/dev/mem of=/tmp/memory_dump.bin bs=1M

📋 Olay Müdahale Planı

PICERL Framework’ü

Linux sistemlerde olay müdahalesi için PICERL iyi bir framework’tür:

  1. Preparation (Hazırlık)
  2. Identification (Tanımlama)
  3. Containment (Sınırlandırma)
  4. Eradication (Yok Etme)
  5. Recovery (Kurtarma)
  6. Lessons Learned (Çıkarılan Dersler)

Ekip Koordinasyonu

Bilgilendirilmesi Gerekenler:

  • IT güvenlik ekibi
  • Sistem yöneticileri
  • Management
  • Hukuk departmanı (gerekirse)
  • Müşteriler (hizmet etkileniyorsa)

🕵️ Forensik Analiz: Ne Oldu?

Volatil Veri Toplama

# Çalışan süreçler ve bağlantılar
ps aux > /tmp/processes.txt
lsof -i > /tmp/network_connections.txt
netstat -rn > /tmp/routing_table.txt

# Açık dosyalar ve ağ bağlantıları
lsof +L1 > /tmp/deleted_files.txt
lsof -p [suspicious_pid] > /tmp/suspicious_process_files.txt

# Memory bilgileri
cat /proc/meminfo > /tmp/meminfo.txt
cat /proc/version > /tmp/kernel_version.txt

Log Analizi

# Son sistem loglarını incele
tail -n 1000 /var/log/syslog > /tmp/recent_syslog.txt
tail -n 1000 /var/log/auth.log > /tmp/recent_auth.txt
tail -n 1000 /var/log/apache2/access.log > /tmp/recent_web_access.txt

# Şüpheli girişleri ara
grep "Failed password" /var/log/auth.log | tail -50
grep "Accepted password" /var/log/auth.log | tail -20
grep "sudo:" /var/log/auth.log | tail -20

# Son değiştirilen dosyaları bul
find / -type f -mtime -1 -ls 2>/dev/null | head -100

Rootkit Taraması

# Chkrootkit ile tarama
sudo chkrootkit > /tmp/chkrootkit_results.txt

# Rkhunter ile tarama
sudo rkhunter -c --sk > /tmp/rkhunter_results.txt

# AIDE ile dosya bütünlüğü kontrolü
sudo aide --check > /tmp/aide_results.txt

🔥 Nuclear Option: Tamamen Yeniden Kurulum

1. Yedek Alma (Temiz Veriler İçin)

# Sadece gerekli kullanıcı verilerini yedekle
mkdir /tmp/backup_user_data
cp -r /home/username/important_data /tmp/backup_user_data/
cp -r /var/www/html/uploaded_files /tmp/backup_user_data/

# Konfigürasyon dosyalarını güvenlik kontrolü ile yedekle
cp /etc/apache2/sites-available/* /tmp/backup_configs/
cp /etc/mysql/mysql.conf.d/* /tmp/backup_configs/

⚠️ UYARI: Sadece temiz olduğundan emin olduğunuz dosyaları yedekleyin!

2. Forensik İmaj Alma

# Diskin forensik kopyasını al
sudo dd if=/dev/sda of=/external/disk_image.img bs=4M status=progress
sudo sha256sum /external/disk_image.img > /external/disk_image.sha256

3. Tamamen Yeni Kurulum

Sistemi yeniden inşa etmek, sisteminiz üzerinde kontrole sahip olduğunuzdan emin olmanın tek yoludur

Fiziksel Sunucu İçin:

# UEFI firmware'i güncelle
# BIOS ayarlarını sıfırla
# Temiz işletim sistemi kur

Sanal Makine İçin:

# Eski diski ayır
# Yeni disk ekle
# İşletim sistemini sıfırdan kur

🛡️ Yeni Sistem Sertleştirme

Temel Güvenlik Yapılandırması

# Sistemi güncelle
sudo apt update && sudo apt upgrade -y

# Gereksiz servisleri kapat
sudo systemctl disable telnet
sudo systemctl disable ftp
sudo systemctl disable rsh

# Firewall konfigürasyonu
sudo ufw enable
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https

SSH Sertleştirme

# SSH konfigürasyonunu düzenle
sudo nano /etc/ssh/sshd_config

# Yapılacak değişiklikler:
# PermitRootLogin no
# PasswordAuthentication no
# PubkeyAuthentication yes
# Port 2222 (default port değiştir)
# MaxAuthTries 3
# LoginGraceTime 30
# AllowUsers your_username

sudo systemctl restart ssh

Otomatik Güvenlik Araçları

# Fail2Ban kurulumu
sudo apt install fail2ban -y

# Fail2Ban konfigürasyonu
sudo cp /etc/fail2ban/jail.conf /etc/fail2ban/jail.local
sudo nano /etc/fail2ban/jail.local

# ClamAV antivirus kurulumu
sudo apt install clamav clamav-daemon -y
sudo freshclam
sudo systemctl enable clamav-freshclam

# AIDE dosya bütünlük izleme
sudo apt install aide -y
sudo aide --init
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

Log İzleme ve SIEM

# Rsyslog konfigürasyonu
sudo nano /etc/rsyslog.conf
# Logları merkezi sunucuya gönder

# Auditd kurulumu
sudo apt install auditd -y
sudo systemctl enable auditd

# Önemli dosyaları izleme altına al
sudo auditctl -w /etc/passwd -p wa -k passwd_changes
sudo auditctl -w /etc/shadow -p wa -k shadow_changes
sudo auditctl -w /etc/sudoers -p wa -k sudoers_changes

🔍 Vulnerability Patching

Sistem Güncellemeleri

# Unattended upgrades kurulumu
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades

# Manual güvenlik güncellemeleri
sudo apt list --upgradable
sudo apt upgrade -y

Uygulama Güvenliği

# Web server sertleştirme (Apache)
sudo nano /etc/apache2/conf-available/security.conf
# ServerTokens Prod
# ServerSignature Off

# PHP sertleştirme
sudo nano /etc/php/7.4/apache2/php.ini
# expose_php = Off
# allow_url_fopen = Off
# allow_url_include = Off

# MySQL sertleştirme
sudo mysql_secure_installation

📊 İzleme ve Alerting

Sistem İzleme

# Netdata kurulumu (gerçek zamanlı izleme)
bash <(curl -Ss https://my-netdata.io/kickstart.sh)

# OSSEC HIDS kurulumu
wget -q -O - https://updates.atomicorp.com/installers/atomic | sudo bash
sudo yum install ossec-hids ossec-hids-server

Log Analizi

# Logwatch kurulumu
sudo apt install logwatch -y

# Fail2Ban notification konfigürasyonu
sudo nano /etc/fail2ban/jail.local
# action = %(action_mwl)s
# mta = sendmail

🚀 Recovery ve Restore

Veri Geri Yükleme

# Temiz verileri geri yükle
sudo rsync -av /backup/clean_data/ /var/www/html/
sudo chown -R www-data:www-data /var/www/html/

# Veritabanını geri yükle
mysql -u root -p database_name < /backup/clean_database.sql

Servis Restorasyonu

# Web servisi başlat
sudo systemctl enable apache2
sudo systemctl start apache2

# Veritabanı servisi
sudo systemctl enable mysql
sudo systemctl start mysql

# SSL sertifikalarını yenile
sudo certbot renew --force-renewal

📝 Incident Response Dokümantasyonu

Olay Raporu Şablonu

# Güvenlik Olayı Raporu

## Olay Özeti
- Tarih/Saat: [YYYY-MM-DD HH:MM]
- Etkilenen Sistem: [Sistem bilgileri]
- Saldırı Türü: [Rootkit/Malware/Web Shell/vb.]
- Etki Düzeyi: [Düşük/Orta/Yüksek/Kritik]

## Keşif
- İlk fark eden: [Kişi/Sistem]
- Keşif yöntemi: [İzleme/Manuel kontrol/vb.]
- İlk gözlemler: [Şüpheli aktiviteler]

## Analiz
- Saldırı vektörü: [SSH brute force/Web exploit/vb.]
- Kullanılan araçlar: [Rootkit/backdoor/vb.]
- Zarar verilen dosyalar: [Liste]
- Çalınan veriler: [Var/Yok - Detaylar]

## Müdahale
- Alınan önlemler: [Network izolasyonu/vb.]
- Kullanılan araçlar: [Forensik araçlar]
- Temizlik adımları: [Tam yeniden kurulum]

## Kurtarma
- Restore işlemleri: [Yedekten dönüş]
- Servis durumu: [Online/Offline]
- Performans testi: [Başarılı/Başarısız]

## Lessons Learned
- Saldırının nedeni: [Patch eksikliği/zayıf şifre/vb.]
- Alınacak önlemler: [WAF/IDS/monitoring/vb.]
- Policy değişiklikleri: [Yeni güvenlik kuralları]

🎯 Önleyici Tedbirler

Düzenli Güvenlik Değerlendirmesi

# Haftalık güvenlik taraması scripti
#!/bin/bash
# security_scan.sh

echo "=== Güvenlik Taraması Başlıyor ==="
date

# Port taraması
nmap -sS localhost

# Rootkit kontrolü
rkhunter -c --sk

# Log analizi
grep "Failed password" /var/log/auth.log | tail -10

# Disk kullanımı
df -h

# Çalışan servisler
systemctl list-units --type=service --state=running

echo "=== Tarama Tamamlandı ==="

Yedekleme Stratejisi

#!/bin/bash
# backup_script.sh

BACKUP_DIR="/backup/$(date +%Y%m%d)"
mkdir -p $BACKUP_DIR

# Sistem konfigürasyonları
tar -czf $BACKUP_DIR/etc_backup.tar.gz /etc/

# Kullanıcı verileri
tar -czf $BACKUP_DIR/home_backup.tar.gz /home/

# Veritabanı yedekleme
mysqldump --all-databases > $BACKUP_DIR/all_databases.sql

# Web dosyaları
tar -czf $BACKUP_DIR/web_backup.tar.gz /var/www/

# Yedekleri uzak sunucuya gönder
rsync -av $BACKUP_DIR/ backup_server:/backups/

🔧 Otomasyonla İyileştirme

Ansible Playbook ile Otomatik Sertleştirme

# security_hardening.yml
---
- hosts: all
  become: yes
  tasks:
    - name: Update system packages
      apt:
        update_cache: yes
        upgrade: dist

    - name: Install security tools
      apt:
        name:
          - fail2ban
          - rkhunter
          - aide
          - clamav
        state: present

    - name: Configure SSH
      lineinfile:
        path: /etc/ssh/sshd_config
        regexp: "{{ item.regexp }}"
        line: "{{ item.line }}"
      with_items:
        - { regexp: '^PermitRootLogin', line: 'PermitRootLogin no' }
        - { regexp: '^PasswordAuthentication', line: 'PasswordAuthentication no' }
      notify: restart ssh

    - name: Configure firewall
      ufw:
        rule: "{{ item.rule }}"
        port: "{{ item.port }}"
        proto: "{{ item.proto }}"
      with_items:
        - { rule: 'allow', port: '22', proto: 'tcp' }
        - { rule: 'allow', port: '80', proto: 'tcp' }
        - { rule: 'allow', port: '443', proto: 'tcp' }

  handlers:
    - name: restart ssh
      service:
        name: ssh
        state: restarted

🎓 Sonuç ve Tavsiyeler

Ana Çıkarımlar

  1. Hızlı Müdahale Kritiktir: Bir hacker sisteme girdiğinde, sistemde ne yaptığı hakkında hiçbir fikriniz olmaz – yeni SSH portları, yeni hesaplar, yeni paylaşımlar, Apache kurallarında ince değişiklikler ekleyebilir
  2. Tam Yeniden Kurulum En Güvenli Seçenektir: Sistemin tamamen temizlenmesi ve yeniden kurulması, kontrolün size ait olduğundan emin olmanın tek yoludur.
  3. Prevention > Reaction: Düzenli güncellemeler, güçlü kimlik doğrulama ve monitoring ile saldırıları önlemek, müdahale etmekten çok daha etkilidir.
  4. Dokümantasyon Vazgeçilmezdir: Her adımı belgeleyin, gelecekteki olaylardan ders çıkarın.

Son Kontrol Listesi

  • [ ] Ağ trafiği izleme aktif
  • [ ] Otomatik yedekleme çalışıyor
  • [ ] Güvenlik güncellemeleri otomatik
  • [ ] IDS/IPS sistemleri aktif
  • [ ] Log analizi yapılıyor
  • [ ] planı güncel
  • [ ] Takım eğitimi tamamlandı
  • [ ] Forensik araçlar hazır

Unutmayın: Güvenlik ihlali sadece teknik bir sorun değildir, tüm şirketi etkileyebilir ve aldığınız aksiyonlar maliyetli olabilir. Bu yüzden doğru planlanmış, sistematik bir yaklaşım benimseyin ve asla tek başınıza hareket etmeyin.

Linux sunucu güvenliği sürekli bir süreçtir. Bu rehberi temel alarak kendi incident response planınızı geliştirin ve düzenli olarak test edin. Çünkü saldırı “eğer” değil “ne zaman” sorusudur.

Yorum Yazın