Linux Sunucu Güvenliği: Hardening Rehberi
Giriş
Linux sunucu güvenliği modern altyapı yönetiminin temel taşlarından biridir. Sadece veri koruma değil, iş sürekliliği, uyumluluk ve itibar için kritik öneme sahiptir. İnternete bağlı her sunucu sürekli saldırı tehdidi altındadır ve hedef alınma ihtimali vardır. Güvenlik bir süreç değil, sürekli geliştirilmesi gereken bir durumdur. Linux sunucu güvenliği, sistemin saldırı yüzeyini azaltmayı, yetkisiz erişimi engellemeyi, veri bütünlüğünü sağlamayı ve olay tespiti ile müdahale yeteneğini güçlendirmeyi kapsar. Bu rehber, sunucuları sertleştirmek için adım adım, uygulanabilir ve sürekli iyileştirme odaklı yaklaşımlar sunar.
Saldırı Yüzeyini Azaltma
Saldırı yüzeyi, bir saldırganın potansiyel olarak yararlanabileceği tüm giriş noktaları, hizmetler, konfigürasyonlar ve zayıflıkların toplamıdır. Saldırı yüzeyini azaltmak, sunucuyu hedef alan vektörleri sınırlamak demektir. Bu, gereksiz servisleri kapatmak, varsayılan portları değiştirmek, sadece gerekli kullanıcı hesaplarını tutmak ve güncel güvenlik yamalarını uygulamak gibi önlemleri içerir. Her açık port, her çalışan servis ve her yetkili kullanıcı olası bir giriş noktasıdır. Bu yüzden en güvenli sunucu, sadece işletmesi için kesinlikle gerekli servisleri çalıştıran sunucudur.
Denetim ve İzleme
Sunucu sertleştirmesi sadece önleyici tedbirlerle sınırlı değildir. Etkili bir güvenlik stratejisi, olay tespiti ve yanıt yeteneğini de içermelidir. Denetim ve izleme, oturum açma girişimlerini, komut çalıştırmalarını, dosya değişikliklerini ve sistem olaylarını kaydederek, şüpheli faaliyetleri erkenden fark etmeye olanak tanır. Log analizi, otomatik uyarılar ve düzenli güvenlik raporları, saldırıları başlangıç aşamasında durdurmak için kritik öneme sahiptir.
Temel Kavramlar
Linux sunucu güvenliğinin temel kavramlarını anlamak, sertleştirme adımlarının neden gerekli olduğunu ve nasıl etkili çalıştığını kavramaya yardımcı olur. Bu bölümde en önemli güvenlik kavramlarını ve bunların pratik uygulamalarını ele alacağız.
En Az Ayrıcalık İlkesi
En az ayrıcalık ilkesi, kullanıcı ve süreçlerin görevlerini yerine getirmek için kesinlikle gerekli olan en düşük yetki seviyesine sahip olması gerektiğini belirtir. Bu ilke, bir saldırganın bir hesabı veya süreci ele geçirdiğinde sistemin geri kalanına yayılmasını zorlaştırır. Örneğin, veritabanı sunucusu root olarak çalıştırılmamalı, ayrıcalıksız bir kullanıcı olarak çalıştırılmalı ve sadece gerekli izinlere sahip olmalıdır. Aynı şekilde, web sunucu süreçleri de ayrıcalıksız kullanıcı hesapları ile çalıştırılmalıdır. Bu ilke, yetki yükseltme saldırılarının etkisini sınırlar.
Defans Derinliği
Defans derinliği, çok katmanlı bir güvenlik yaklaşımıdır. Tek bir güvenlik katmanı başarısız olsa bile, diğer katmanlar sistemi korumaya devam eder. Örneğin, sunucu güvenliği için firewall, Fail2ban, şifre politikaları, dosya izinleri ve SELinux gibi birden çok koruma katmanı kullanılabilir. Saldırganın bir katmanı aşması durumunda diğer katmanlar durdurur. Bu yaklaşım, güvenliği daha dayanıklı ve esnek hale getirir.
Sıfır Güven (Zero Trust)
Sıfır güven modeli, ağ içindeki hiçbir bağlantının varsayılan olarak güvenli olmadığını varsayar. Her istek, kimlik doğrulama ve yetkilendirme gerektirir. Bu model, geleneksel perimeter güvenliği yaklaşımına göre daha güvenlidir. Linux sunucularında sıfır güven, her servisin kendi izolasyonu ve doğrulama mekanizmaları ile çalıştırılmasını gerektirir. Örneğin, konteyner tabanlı mimariler, servisleri birbirinden izole ederek sıfır güven yaklaşımını destekler.
Kimlik ve Erişim Yönetimi
Kimlik ve erişim yönetimi, doğru kişilerin doğru kaynaklara doğru zamanda erişmesini sağlamak için kritik önem taşır. Linux sunucularında bu, SSH key tabanlı kimlik doğrulama, sudo yetki devri ve kullanıcı gruplarını içerir. Şifre tabanlı kimlik doğrulama yerine key tabanlı doğrulama kullanmak, brute force saldırılarına karşı daha dayanıklıdır. Sudo kullanımı, root hesabını doğrudan kullanmaktan daha güvenli bir yöntemdir çünkü tüm komutlar loglanır.
Kurulum ve Yapılandırma
Linux sunucu güvenliği için kritik araçların kurulumu ve yapılandırması, sertleştirme sürecinin ilk adımlarıdır. Bu bölümde gerekli paketlerin kurulumu ve konfigürasyon adımlarını detaylıca ele alacağız.
SSH Sertleştirme
SSH, uzaktan sunucu yönetimi için en yaygın protokoldür ve doğru yapılandırılmazsa saldırılara açık hale gelir. SSH sertleştirmesi için önce SSH anahtar çifti oluşturulmalı ve şifre tabanlı giriş devre dışı bırakılmalıdır. Ardından root doğrudan girişi kapatılmalı ve SSH portu değiştirilmelidir.
sudo apt install openssh-server -y
ssh-keygen -t ed25519 -a 100 -f ~/.ssh/id_ed25519
sudo systemctl enable ssh
sudo systemctl start ssh
SSH konfigürasyon dosyası /etc/ssh/sshd_config düzenlenmelidir. Şifre tabanlı girişi kapatmak için PasswordAuthentication no ayarı, root girişini kapatmak için PermitRootLogin no ayarı ve portu değiştirmek için Port 2222 gibi özel bir port numarası eklenmelidir. Değişikliklerden sonra SSH servisi yeniden başlatılmalıdır: sudo systemctl restart ssh.
Fail2ban Kurulumu
Fail2ban, brute force saldırılarına karşı otomatik IP engelleme sağlar. SSH ve diğer servisleri izleyerek, başarısız giriş girişimlerini sayar ve belirli bir eşiği aşan IP adreslerini engeller.
sudo apt install fail2ban -y
sudo systemctl enable fail2ban
sudo systemctl start fail2ban
Fail2ban konfigürasyonu için /etc/fail2ban/jail.local dosyası oluşturulmalıdır. SSH jail'i için temel konfigürasyon aşağıdaki gibidir:
[sshd]
enabled = true
port = 2222
maxretry = 3
bantime = 3600
findtime = 600
Bu konfigürasyonda SSH portu 2222 olarak ayarlanmış, 3 başarısız girişten sonra IP 1 saat boyunca engellenir. 10 dakika içinde 3 deneme yapılmış olması gerekir. Fail2ban servisi yeniden başlatıldıktan sonra aktif hale gelir: sudo systemctl restart fail2ban.
Firewall Yapılandırması
Firewall, gelen ve giden trafiği filtrelemek için temel bir güvenlik katmanıdır. UFW (Uncomplicated Firewall), Debian ve Ubuntu sistemlerinde kullanımı kolay bir firewall aracıdır.
sudo apt install ufw -y
sudo ufw default deny incoming
sudo ufw default allow outgoing
sudo ufw allow 2222/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
Bu komutlar, varsayılan olarak gelen trafiği reddeder, giden trafiğe izin verir, SSH portunu (2222), HTTP (80) ve HTTPS (443) portlarına izin verir. Firewall etkinleştirilmeden önce SSH portuna izin verildiğinden emin olunmalıdır, aksi halde sunucuya erişim kaybedilebilir.
Dosya İzinleri ve Sahiplik
Yanlış dosya izinleri ve sahiplik, yetki yükseltme saldırılarına ve yetkisiz erişime yol açabilir. Web dosyaları için doğru izin şeması, dizinler için 755, dosyalar için 644'dir. Upload klasörleri gibi yazması gereken dizinler için 775 kullanılmalı ve grup sahipliği doğru ayarlanmalıdır.
sudo chown -R www-data:www-data /var/www/myapp
find /var/www/myapp -type d -exec chmod 755 {} \;
find /var/www/myapp -type f -exec chmod 644 {} \;
SSH anahtarları için 600, .ssh dizini için 700 izni kullanılmalıdır. 777 izni asla verilmemelidir çünkü herkes dosyaya okuma, yazma ve çalıştırma iznine sahip olur.
Kernel Sertleştirme
Linux kernel parametreleri, sistem güvenliğini etkileyen önemli ayarları içerir. /etc/sysctl.conf dosyası düzenlenerek IP spoofing, source routing ve SYN flood gibi saldırılara karşı kernel parametreleri sertleştirilebilir.
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 1
net.ipv4.conf.default.secure_redirects = 1
Bu parametreler, IP forwarding'i devre dışı bırakır, source routing'i reddeder ve güvenli olmayan yönlendirmeleri engeller. Değişiklikleri uygulamak için sudo sysctl -p komutu çalıştırılmalıdır.
SELinux veya AppArmor
SELinux ve AppArmor, zorunlu erişim kontrolü (Mandatory Access Control) sağlayan güvenlik modülleridir. Bu modüller, servisleri ve dosyaları izole ederek, yetki yükseltme saldırılarını zorlaştırır. SELinux, Red Hat tabanlı sistemlerde varsayılan olarak gelir, AppArmor ise Debian ve Ubuntu sistemlerinde kullanılır.
sudo apt install apparmor apparmor-utils -y
sudo systemctl enable apparmor
sudo systemctl start apparmor
AppArmor profilini belirli bir uygulama için oluşturmak ve etkinleştirmek için aa-genprof ve aa-enforce komutları kullanılır. SELinux için getenforce komutu ile durumu kontrol edilebilir ve setenforce 1 ile enforcing moduna geçilebilir.
Pratik Örnekler ve İpuçları
Gerçek dünya senaryolarında sertleştirme adımlarının nasıl uygulanacağını gösteren pratik örnekler ve ipuçları, güvenlik stratejisini daha etkili hale getirir.
SSH Erişim Kısıtlama
SSH erişimi belirli IP adresleri veya ağlar ile kısıtlanabilir. Bu, brute force saldırılarını daha da zorlaştırır. Firewall kuralları ile sadece güvenilir IP adreslerinden gelen SSH bağlantılarına izin verilebilir.
sudo ufw allow from 192.168.1.0/24 to any port 2222
Bu komut, sadece 192.168.1.0/24 ağından gelen SSH bağlantılarına izin verir. Ayrıca, SSH konfigürasyon dosyasında AllowUsers veya AllowGroups ile belirli kullanıcılara veya gruplara erişim kısıtlanabilir.
Otomatik Güvenlik Güncellemeleri
Sistem güncellemeleri, güvenlik açıklarını kapatmak için kritik öneme sahiptir. Unattended-upgrades paketi ile güvenlik güncellemeleri otomatik olarak kurulabilir.
sudo apt install unattended-upgrades -y
sudo dpkg-reconfigure -plow unattended-upgrades
Yapılandırma dosyası /etc/apt/apt.conf.d/50unattended-upgrades düzenlenerek hangi paketlerin otomatik güncelleneceği belirlenebilir. Sadece güvenlik güncellemeleri için gerekli satırlar açıklama satırı olmaktan çıkarılabilir.
Log Yönetimi
Loglar, olay tespiti ve analiz için kritik öneme sahiptir. Logrotate, log dosyalarının otomatik olarak döndürülmesini ve disk dolmasını engeller. Journalctl, systemd loglarını yönetmek için kullanılır.
sudo apt install logrotate -y
sudo systemctl enable logrotate
sudo systemctl start logrotate
Logrotate konfigürasyonu /etc/logrotate.conf ve /etc/logrotate.d/ dizinindeki dosyalarda yapılır. Döngü sıklığı, dosya boyutu ve saklama süresi gibi parametreler burada ayarlanabilir.
Zafiyet Taraması
Lynis ve RKHunter gibi araçlar, sunucudaki zafiyetleri tespit etmek için kullanılır. Lynis, sertleştirme adımlarını puanlayarak eksikleri gösterir. RKHunter, rootkit ve kötü amaçlı yazılımları tespit eder.
sudo apt install lynis rkhunter -y
sudo lynis audit system
sudo rkhunter --update
sudo rkhunter --check --skip-keypress
Lynis raporu, eksik sertleştirme adımlarını detaylı şekilde listeler. RKHunter, sistem dosyalarının bütünlüğünü kontrol eder ve şüpheli dosyaları raporlar.
Ağ İzolasyonu
Servislerin farklı ağlara izole edilmesi, saldırı yüzeyini azaltır. Konteynerler, sanal makineler veya VLAN'lar ile ağ segmentasyonu uygulanabilir. Örneğin, veritabanı sunucusu doğrudan internete açık olmamalı, sadece uygulama sunucusundan erişilebilir olmalıdır.
sudo ufw allow from 10.0.0.2 to any port 3306
Bu komut, sadece 10.0.0.2 IP adresinden gelen MySQL bağlantılarına izin verir. Ayrıca, veritabanı konfigürasyonunda bind-address 127.0.0.1 ile sadece localhost'tan erişim kısıtlanabilir.
En İyi Uygulamalar
Üretim ortamında güvenliği sürdürmek için en iyi uygulamaları takip etmek, sürekli iyileştirme ve uyumluluk sağlamak için kritik öneme sahiptir.
Düzenli Güvenlik Denetimi
Sunucuların düzenli olarak güvenlik denetiminden geçmesi gerekir. Bu, zafiyet taramalarını, log analizlerini ve konfigürasyon gözden geçirmelerini içerir. Aylık veya üç aylık döngülerle denetimler yapılmalı ve eksikler giderilmelidir.
Otomasyon
Sertleştirme adımlarının otomatik olarak uygulanması, tutarlılığı ve hızı artırır. Ansible, Puppet veya Chef gibi konfigürasyon yönetimi araçları ile sertleştirme playbook'ları oluşturulabilir. Bu playbook'lar, yeni sunucuların hızlı ve güvenli bir şekilde kurulmasını sağlar.
Yedekleme ve Kurtarma
Güvenlik, sadece saldırıları engellemek değil, saldırı durumunda sistemi kurtarabilmek de demektir. 3-2-1 yedekleme stratejisi (3 kopya, 2 farklı ortam, 1 kopya uzakta) uygulanmalı ve yedekler düzenli olarak test edilmelidir.
Eğitim ve Farkındalık
Sunucu yöneticileri ve geliştiriciler, güvenlik eğitimi almalı ve farkındalık seviyeleri sürekli artırılmalıdır. Sosyal mühendislik saldırılarına karşı dikkatli olunmalı ve güçlü şifre politikaları uygulanmalıdır.
Uyumluluk ve Standartlar
Industry standartları ve uyumluluk gereksinimleri (PCI DSS, HIPAA, GDPR vb.) takip edilmelidir. Bu standartlar, sertleştirme adımlarının hangi seviyede yapılması gerektiğini belirler.
Sonuç ve Öneriler
Linux sunucu güvenliği, kapsamlı ve sürekli bir süreçtir. SSH sertleştirmesi, firewall yapılandırması, dosya izinleri, kernel parametreleri ve zafiyet taramaları gibi temel adımlar, saldırı yüzeyini azaltır ve sistemi daha güvenli hale getirir. Defans derinliği, en az ayrıcalık ilkesi ve sıfır güven gibi kavramlar, güvenlik stratejisinin temelini oluşturur. Düzenli denetimler, otomasyon ve yedekleme stratejileri, güvenliği sürdürülebilir kılar. Üretim ortamında en iyi uygulamaları takip etmek ve eğitimi ihmal etmemek, saldırı riskini minimize eder. Sunucu sertleştirmesi tek seferlik bir işlem değil, sürekli iyileştirme ve gözden geçirme gerektiren bir süreçtir.