Her Linux Sunucumda Uyguladığım 7 CIS Güvenlik Uygulaması
Linux sunucu güvenliği konusunda 15+ yıllık deneyimim boyunca öğrendiğim ...
# Ç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 # 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 # 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 # 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! # 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 # 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 # 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 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 # 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 # 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 # 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 # 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 # 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 # Logwatch kurulumu sudo apt install logwatch -y # Fail2Ban notification konfigürasyonu sudo nano /etc/fail2ban/jail.local # action = %(action_mwl)s # mta = sendmail # 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 # 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 # 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: # 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ı ===" #!/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/ # 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