Her Linux Sunucumda Uyguladığım 7 CIS Güvenlik Uygulaması

Linux sunucu güvenliği konusunda 15+ yıllık deneyimim boyunca öğrendiğim en önemli şey şu: Varsayılan konfigürasyonlar hiçbir zaman yeterli değildir. Her yeni Linux sunucu kurduğumda, sistemi üretime almadan önce mutlaka uyguladığım 7 temel CIS (Center for Internet Security) güvenlik pratiği var. Bu yazıda, bu uygulamaları neden kritik bulduğumu ve nasıl hayata geçirdiğimi anlatacağım.

CIS Benchmarks Nedir ve Neden Önemlidir?

CIS Benchmarks, dünyanın dört bir yanından siber güvenlik uzmanlarının consensus esaslı katkılarıyla geliştirilmiş, kapsamlı güvenlik konfigürasyon rehberleridir. CIS standardlarının bilinen güvenlik açıklarının %80-95’ini eliminate ettiği kanıtlanmıştır.

CIS Benchmarks’in Temel Prensipleri:

  • Consensus-driven: Uzmanların ortaklaşa görüşüyle geliştirilir
  • Vendor-neutral: Belirli bir üreticiye bağlı değildir
  • Level 1 ve Level 2: Temel ve ileri seviye güvenlik konfigürasyonları
  • Scored ve Not Scored: Zorunlu ve opsiyonel kontroller

1. SSH Sertleştirme: İlk Savunma Hattı

SSH, Linux sunuculara erişimin temel yöntemi olduğu için sertleştirme sürecimin en kritik parçasıdır.

Temel SSH Yapılandırması

# SSH konfigürasyon dosyasını düzenle
sudo nano /etc/ssh/sshd_config

# Kritik ayarlar:
Protocol 2                           # Sadece SSH v2 kullan
PermitRootLogin no                   # Root kullanıcısının SSH erişimini engelle
PasswordAuthentication no            # Parola tabanlı girişi devre dışı bırak
PubkeyAuthentication yes             # Public key authentication aktif et
Port 2222                           # Varsayılan port değiştir
MaxAuthTries 3                      # Maksimum deneme sayısını sınırla
MaxSessions 4                       # Eşzamanlı oturum sayısını sınırla
LoginGraceTime 30                   # Giriş süresi sınırı
AllowUsers your_username            # Sadece belirli kullanıcılara izin ver
ClientAliveInterval 300             # İnaktif bağlantıları sonlandır
ClientAliveCountMax 2               # Maksimum hayatta kalma kontrolü
HostBasedAuthentication no          # Host tabanlı kimlik doğrulamayı devre dışı bırak
IgnoreRhosts yes                    # .rhosts dosyalarını yoksay

Güçlü SSH Key Oluşturma

# RSA 4096 bit key oluştur
ssh-keygen -t rsa -b 4096 -C "your_email@example.com"

# ED25519 (önerilen - daha güvenli ve hızlı)
ssh-keygen -t ed25519 -C "your_email@example.com"

# SSH directory güvenliğini sağla
chmod 700 ~/.ssh
chmod 600 ~/.ssh/authorized_keys
chmod 600 ~/.ssh/id_rsa
chmod 644 ~/.ssh/id_rsa.pub

SSH Monitoring ve Fail2Ban

# Fail2Ban kurulumu
sudo apt install fail2ban -y

# SSH için jail konfigürasyonu
sudo nano /etc/fail2ban/jail.local

[sshd]
enabled = true
port = 2222
filter = sshd
logpath = /var/log/auth.log
maxretry = 3
bantime = 3600
findtime = 600

sudo systemctl enable fail2ban
sudo systemctl start fail2ban

2. Firewall Konfigürasyonu: Ağ Trafiği Kontrolü

CIS Controls, host-based firewall ile varsayılan-reddet kuralının uygulanmasını önermektedir.

UFW (Uncomplicated Firewall) Kurulumu

# UFW'yi aktif et
sudo ufw enable

# Varsayılan politikaları ayarla
sudo ufw default deny incoming
sudo ufw default allow outgoing

# Gerekli portları aç
sudo ufw allow 2222/tcp                    # SSH (özel port)
sudo ufw allow 80/tcp                      # HTTP
sudo ufw allow 443/tcp                     # HTTPS

# Belirli IP'den SSH erişimi (opsiyonel)
sudo ufw allow from 192.168.1.100 to any port 2222

# Rate limiting ile SSH brute force koruması
sudo ufw limit 2222/tcp

# UFW durumunu kontrol et
sudo ufw status verbose

İleri Seviye iptables Kuralları

# Temel iptables konfigürasyonu
#!/bin/bash

# Mevcut kuralları temizle
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X

# Varsayılan politikalar
iptables -P INPUT DROP
iptables -P FORWARD DROP
iptables -P OUTPUT ACCEPT

# Loopback trafiğine izin ver
iptables -A INPUT -i lo -j ACCEPT
iptables -A OUTPUT -o lo -j ACCEPT

# Established ve related bağlantılara izin ver
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT

# SSH erişimi (rate limiting ile)
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --set
iptables -A INPUT -p tcp --dport 2222 -m state --state NEW -m recent --update --seconds 60 --hitcount 4 -j DROP
iptables -A INPUT -p tcp --dport 2222 -j ACCEPT

# Web servisleri
iptables -A INPUT -p tcp --dport 80 -j ACCEPT
iptables -A INPUT -p tcp --dport 443 -j ACCEPT

# ICMP (ping) sınırlı izin
iptables -A INPUT -p icmp --icmp-type echo-request -m limit --limit 1/s -j ACCEPT

# Kuralları kaydet
iptables-save > /etc/iptables/rules.v4

3. Kullanıcı Hesap Yönetimi: Least Privilege Prensibi

Güçlü Parola Politikası

# PAM konfigürasyonu ile parola karmaşıklığı
sudo nano /etc/pam.d/common-password

# Şu satırı ekle:
password requisite pam_pwquality.so retry=3 minlen=12 dcredit=-1 ucredit=-1 ocredit=-1 lcredit=-1

# Parola geçmişi kontrolü
sudo nano /etc/pam.d/common-password
# Şu satırı ekle:
password required pam_pwhistory.so remember=5

# Hesap kilitleme politikası
sudo nano /etc/pam.d/common-auth
# Şu satırı ekle:
auth required pam_tally2.so deny=3 unlock_time=600 onerr=fail audit even_deny_root

Sudo Konfigürasyonu

# Sudo konfigürasyonunu düzenle
sudo visudo

# Kullanıcı için sudo izinleri
your_username ALL=(ALL:ALL) ALL

# Parola timeout ayarı
Defaults passwd_timeout=5

# Sudo session timeout
Defaults timestamp_timeout=15

# Sudo kullanımını logla
Defaults logfile="/var/log/sudo.log"
Defaults log_input,log_output

Gereksiz Kullanıcı Hesaplarını Temizleme

# Sistem kullanıcılarını kontrol et
cat /etc/passwd | grep -v "/usr/sbin/nologin\|/bin/false" | cut -d: -f1

# Gereksiz hesapları devre dışı bırak
sudo usermod -L username        # Hesabı kilitle
sudo usermod -s /bin/false username  # Shell erişimini engelle

# Son giriş tarihlerini kontrol et
sudo lastlog | grep -v "Never"

# Pasif hesapları tespit et
sudo last | head -20

4. Sistem Güncellemeleri ve Yamaları

Otomatik Güvenlik Güncellemeleri

# Unattended upgrades kurulumu
sudo apt install unattended-upgrades apt-listchanges -y

# Konfigürasyon
sudo dpkg-reconfigure -plow unattended-upgrades

# Manuel konfigürasyon
sudo nano /etc/apt/apt.conf.d/50unattended-upgrades

# İçerik:
Unattended-Upgrade::Allowed-Origins {
    "${distro_id}:${distro_codename}-security";
    "${distro_id}ESMApps:${distro_codename}-apps-security";
    "${distro_id}ESM:${distro_codename}-infra-security";
};

Unattended-Upgrade::AutoFixInterruptedDpkg "true";
Unattended-Upgrade::MinimalSteps "true";
Unattended-Upgrade::Remove-Unused-Dependencies "true";
Unattended-Upgrade::Automatic-Reboot "false";

# E-posta bildirimlerini aktif et
Unattended-Upgrade::Mail "admin@yourdomain.com";

Manuel Güncelleme Rutini

#!/bin/bash
# update_system.sh

echo "Sistem güncelleme başlıyor..."

# Paket listesini güncelle
apt update

# Güncellenebilir paketleri listele
apt list --upgradable

# Güvenlik güncellemelerini uygula
apt upgrade -y

# Sistem temizleme
apt autoremove -y
apt autoclean

# Kernel güncellemesi kontrolü
if [ -f /var/run/reboot-required ]; then
    echo "Sistem yeniden başlatma gerekiyor!"
    echo "Yeniden başlatma için: sudo reboot"
fi

echo "Güncelleme tamamlandı: $(date)"

5. Logging ve Monitoring: Güvenlik Olaylarını Yakalama

Rsyslog Konfigürasyonu

# Rsyslog konfigürasyonu
sudo nano /etc/rsyslog.conf

# Uzak log gönderimi için (opsiyonel)
*.* @@logserver.yourdomain.com:514

# Lokal log rotasyonu
sudo nano /etc/logrotate.d/rsyslog

/var/log/syslog {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 0640 syslog adm
    postrotate
        /usr/lib/rsyslog/rsyslog-rotate
    endscript
}

Auditd Kurulumu ve Konfigürasyonu

# Auditd kurulumu
sudo apt install auditd audispd-plugins -y

# Auditd kuralları
sudo nano /etc/audit/rules.d/audit.rules

# Kritik dosya değişikliklerini izle
-w /etc/passwd -p wa -k passwd_changes
-w /etc/shadow -p wa -k shadow_changes
-w /etc/group -p wa -k group_changes
-w /etc/sudoers -p wa -k sudoers_changes
-w /etc/ssh/sshd_config -p wa -k ssh_config_changes

# Sistem çağrılarını izle
-a always,exit -F arch=b64 -S adjtimex -S settimeofday -k time_change
-a always,exit -F arch=b32 -S adjtimex -S settimeofday -S stime -k time_change

# Network konfigürasyon değişikliklerini izle
-w /etc/issue -p wa -k system_locale
-w /etc/issue.net -p wa -k system_locale
-w /etc/hosts -p wa -k system_locale
-w /etc/network/ -p wa -k system_locale

# Auditd'yi yeniden başlat
sudo systemctl restart auditd
sudo systemctl enable auditd

Log Analizi Araçları

# Logwatch kurulumu
sudo apt install logwatch -y

# Günlük rapor konfigürasyonu
sudo nano /etc/logwatch/conf/logwatch.conf

Detail = High
MailTo = admin@yourdomain.com
MailFrom = logwatch@yourdomain.com
Format = html
Range = today

# Manuel logwatch raporu
sudo logwatch --detail high --mailto admin@yourdomain.com --format html --range today

6. Servis Sertleştirme: Saldırı Yüzeyini Minimize Etme

Gereksiz Servislerin Tespiti ve Devre Dışı Bırakılması

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

# Açık portları kontrol et
sudo netstat -tulpn
sudo ss -tulpn

# Gereksiz servisleri devre dışı bırak
sudo systemctl disable telnet
sudo systemctl disable ftp
sudo systemctl disable rsh
sudo systemctl disable rlogin
sudo systemctl disable tftp
sudo systemctl disable xinetd
sudo systemctl disable sendmail    # Eğer mail server değilse

# Servis durumlarını kontrol et
sudo systemctl is-enabled service_name
sudo systemctl is-active service_name

Web Server Sertleştirme (Apache/Nginx)

Apache Sertleştirme

# Apache güvenlik modülü
sudo a2enmod security2
sudo a2enmod headers
sudo a2enmod ssl

# Güvenlik konfigürasyonu
sudo nano /etc/apache2/conf-available/security.conf

# İçerik:
ServerTokens Prod
ServerSignature Off
TraceEnable Off

# Güvenlik başlıkları
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options DENY
Header always set X-XSS-Protection "1; mode=block"
Header always set Strict-Transport-Security "max-age=63072000; includeSubDomains; preload"
Header always set Content-Security-Policy "default-src 'self'"

# Konfigürasyonu aktif et
sudo a2enconf security
sudo systemctl restart apache2

Nginx Sertleştirme

# Nginx güvenlik konfigürasyonu
sudo nano /etc/nginx/nginx.conf

# İçerik:
server_tokens off;

# SSL konfigürasyonu
ssl_protocols TLSv1.2 TLSv1.3;
ssl_ciphers ECDHE-RSA-AES256-GCM-SHA512:DHE-RSA-AES256-GCM-SHA512:ECDHE-RSA-AES256-GCM-SHA384;
ssl_prefer_server_ciphers off;

# Rate limiting
limit_req_zone $binary_remote_addr zone=login:10m rate=10r/m;

# Güvenlik başlıkları
add_header X-Frame-Options "SAMEORIGIN" always;
add_header X-XSS-Protection "1; mode=block" always;
add_header X-Content-Type-Options "nosniff" always;
add_header Referrer-Policy "no-referrer-when-downgrade" always;
add_header Content-Security-Policy "default-src 'self' http: https: data: blob: 'unsafe-inline'" always;

7. Dosya Sistemi Güvenliği ve İzinler

Kritik Dosya İzinlerinin Ayarlanması

# Sistem dosya izinlerini kontrol et ve düzelt
sudo chmod 644 /etc/passwd
sudo chmod 600 /etc/shadow
sudo chmod 644 /etc/group
sudo chmod 600 /etc/gshadow
sudo chmod 600 /etc/ssh/sshd_config
sudo chmod 755 /etc/ssh

# World-writable dosyaları bul ve düzelt
find / -type f -perm -002 -exec ls -la {} \; 2>/dev/null
find / -type d -perm -002 -exec ls -ld {} \; 2>/dev/null

# SUID/SGID dosyalarını kontrol et
find / -type f \( -perm -4000 -o -perm -2000 \) -exec ls -la {} \; 2>/dev/null

# Sahibi olmayan dosyaları bul
find / -nouser -o -nogroup 2>/dev/null

Disk Şifreleme ve Mount Güvenliği

# Fstab güvenlik ayarları
sudo nano /etc/fstab

# Örnek güvenli mount opsisonları:
/dev/sda1 /tmp ext4 defaults,nodev,nosuid,noexec 0 2
tmpfs /dev/shm tmpfs defaults,nodev,nosuid,noexec 0 0

# Dosya sistemi bütünlük kontrolü (AIDE)
sudo apt install aide -y

# AIDE veritabanını başlat
sudo aide --init
sudo mv /var/lib/aide/aide.db.new /var/lib/aide/aide.db

# Günlük bütünlük kontrolü için cron job
echo "0 5 * * * root /usr/bin/aide --check | mail -s 'AIDE Integrity Check' admin@yourdomain.com" >> /etc/crontab

Otomatik CIS Compliance Kontrolleri

CIS-CAT Lite ile Automated Assessment

#!/bin/bash
# cis_assessment.sh

# CIS-CAT Lite indir (ücretsiz versiyon)
wget https://learn.cisecurity.org/cis-cat-lite

# Unzip ve çalıştır
unzip cis-cat-lite.zip
cd CIS-CAT-Lite/

# Ubuntu 20.04 için assessment çalıştır
./CIS-CAT.sh -i -a -x -r /opt/cis-reports/

# Raporu analiz et
echo "CIS Assessment tamamlandı. Rapor: /opt/cis-reports/"

Lynis ile Security Auditing

# Lynis kurulumu
sudo apt install lynis -y

# Tam güvenlik denetimi
sudo lynis audit system

# Raporu incele
sudo lynis show report

# Öneriler için:
sudo lynis show suggestions

Sürekli İyileştirme ve Monitoring

Haftalık Güvenlik Kontrolü Scripti

#!/bin/bash
# weekly_security_check.sh

echo "=== Haftalık Güvenlik Kontrolü ==="
echo "Tarih: $(date)"

# 1. Sistem güncellemelerini kontrol et
echo "--- Mevcut Güncellemeler ---"
apt list --upgradable

# 2. Son giriş yapan kullanıcıları kontrol et
echo "--- Son Kullanıcı Girişleri ---"
last | head -10

# 3. Başarısız SSH girişlerini kontrol et
echo "--- Başarısız SSH Girişleri ---"
grep "Failed password" /var/log/auth.log | tail -10

# 4. Açık portları kontrol et
echo "--- Açık Portlar ---"
ss -tulpn

# 5. Disk kullanımını kontrol et
echo "--- Disk Kullanımı ---"
df -h

# 6. Yüksek CPU/Memory kullanımını kontrol et
echo "--- Sistem Kaynakları ---"
top -bn1 | head -20

# 7. Fail2Ban durumunu kontrol et
echo "--- Fail2Ban Durumu ---"
fail2ban-client status

echo "=== Kontrol Tamamlandı ==="

Sonuç ve Tavsiyeler

Bu 7 CIS güvenlik pratiği, Linux sunucularınızın güvenlik seviyesini önemli ölçüde artıracaktır. Ancak güvenlik bir hedef değil, sürekli bir süreçtir.

Hatırlanması Gerekenler:

  1. Test Ortamında Deneyin: Üretim sunucularında değişiklik yapmadan önce mutlaka test edin
  2. Dokümante Edin: Her değişikliği kayıt altına alın
  3. Düzenli Kontrol: Güvenlik ayarlarını düzenli olarak gözden geçirin
  4. Güncel Kalın: CIS Benchmarks düzenli güncellenir, takip edin
  5. Yedekleme: Kritik değişiklikler öncesi sistem yedeği alın

Sonraki Adımlar:

  • IDS/IPS sistemi kurulumu
  • WAF (Web Application Firewall) implementasyonu
  • Vulnerability scanning otomasyonu
  • SIEM entegrasyonu
  • Incident response planı geliştirme

Linux güvenliği karmaşık görünse de, bu temel CIS pratiklerini sistematik olarak uygulayarak sunucularınızı siber tehditlere karşı önemli ölçüde koruyabilirsiniz. Güvenlik katmanları prensibi gereği, hiçbir tek önlem %100 koruma sağlamaz, ancak bu 7 uygulamanın kombinasyonu saldırganlar için yeterince yüksek bir engel oluşturacaktır.

Her sunucu kurulumunda bu listeyi kontrol ederek, güvenli bir temel üzerine inşa etmeye devam edin. Unutmayın: En iyi savunma, proaktif önlemlerdir.

Yorum Yazın