Kimse sunucusunun hacklenmesini düşünmek istemez. Ancak şüpheli trafik, değiştirilmiş dosyalar veya bilinmeyen kullanıcılar görürseniz,...
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
- 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
- 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 "^\ > /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: - Etkilenen Sistem: - Saldırı Türü: - Etki Düzeyi: ## Keşif - İlk fark eden: - Keşif yöntemi: - İlk gözlemler: ## Analiz - Saldırı vektörü: - Kullanılan araçlar: - Zarar verilen dosyalar: - Çalınan veriler: ## Müdahale - Alınan önlemler: - Kullanılan araçlar: - Temizlik adımları: ## Kurtarma - Restore işlemleri: - Servis durumu: - Performans testi: ## Lessons Learned - Saldırının nedeni: - Alınacak önlemler: - Policy değişiklikleri: 🎯 Ö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
- 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
- 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.
- Prevention > Reaction: Düzenli güncellemeler, güçlü kimlik doğrulama ve monitoring ile saldırıları önlemek, müdahale etmekten çok daha etkilidir.
- 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