Paylaşımlı hosting ortamlarında güvenlik, her zaman en kritik konuların başında gelir. Bir müşterinin açığı yüzünden diğer onlarca müşterinin sitesinin tehlikeye girmesi, hem itibar hem de teknik açıdan kabul edilemez bir durumdur. İşte tam bu noktada CloudLinux ve CageFS devreye girer. OpenLiteSpeed ile bu iki teknolojiyi bir araya getirdiğinizde, hem performanslı hem de güvenli bir hosting altyapısı elde edersiniz. Bu yazıda, OpenLiteSpeed üzerinde CloudLinux ve CageFS entegrasyonunu adım adım ele alacağız, gerçek dünya senaryolarıyla destekleyeceğiz ve karşılaşabileceğiniz yaygın sorunların çözümlerini paylaşacağız.
CloudLinux ve CageFS Nedir, Neden OpenLiteSpeed ile Kullanmalısınız?
CloudLinux, paylaşımlı hosting ortamları için geliştirilmiş özel bir Linux dağıtımıdır. Standart CentOS/RHEL çekirdeği üzerine inşa edilmiş olmakla birlikte, hosting ortamlarına özgü güvenlik ve kaynak yönetimi özellikleri sunar. Lisanslı bir işletim sistemi olduğu için sunucu başına ücret ödersiniz ancak bu yatırım, özellikle çok müşterili ortamlarda kendini hızla amorti eder.
CageFS ise CloudLinux’un en güçlü özelliklerinden biridir. Her kullanıcı için sanal bir dosya sistemi ortamı oluşturur. Kullanıcı, kendi “kafes” içinde hapsolur ve diğer kullanıcıların dosyalarını, sistem bilgilerini veya hassas konfigürasyonları göremez. Bu izolasyon, symlink saldırılarını, bilgi ifşasını ve kullanıcılar arası erişim sorunlarını büyük ölçüde ortadan kaldırır.
OpenLiteSpeed tercihinin temel nedeni ise performanstır. Apache’ye göre çok daha az bellek tüketir, event-driven mimarisi sayesinde yüksek eş zamanlı bağlantıları kolayca yönetir ve üstelik tamamen ücretsizdir. LiteSpeed Cache ile birlikte WordPress gibi dinamik uygulamaları neredeyse statik site hızında sunabilirsiniz.
Bu üçlünün bir arada çalışması, paylaşımlı hosting için ideal kombinasyonu oluşturur.
Ön Gereksinimler ve Kurulum Ortamı
Bu rehber için aşağıdaki ortamı baz alıyoruz:
- CloudLinux 7 veya 8 yüklü bir sunucu
- OpenLiteSpeed 1.7.x veya üzeri
- cPanel/WHM entegrasyonu (opsiyonel ama yaygın senaryo)
- Root erişimi
Öncelikle sisteminizin güncel olduğundan emin olun:
yum update -y
# veya CloudLinux 8 için
dnf update -y
CloudLinux lisansınızı kontrol edin:
clnreg_ctl status
# ya da
rhn_check
OpenLiteSpeed Kurulumu
CloudLinux üzerinde OpenLiteSpeed kurulumu için resmi repository’yi eklemeniz gerekir:
# OpenLiteSpeed repository ekleme
rpm -Uvh http://rpms.litespeedtech.com/centos/litespeed-repo-1.1-1.el7.noarch.rpm
# OpenLiteSpeed kurulumu
yum install openlitespeed -y
# Servis başlatma ve otomatik başlatmayı etkinleştirme
systemctl start lsws
systemctl enable lsws
# Servis durumunu kontrol et
systemctl status lsws
Kurulum sonrası default admin paneline https://sunucu-ip:7080 adresinden erişebilirsiniz. Default admin şifresini değiştirmeyi unutmayın:
/usr/local/lsws/admin/misc/admpass.sh
CageFS Kurulumu ve Temel Yapılandırma
CageFS, CloudLinux’un yum reposunda hazır olarak gelir:
# CageFS kurulumu
yum install cagefs -y
# CageFS'i başlat ve yapılandır
cagefsctl --init
# Tüm mevcut kullanıcılar için CageFS'i etkinleştir
cagefsctl --enable-all
# Belirli bir kullanıcı için etkinleştirme
cagefsctl --enable kullanici_adi
# CageFS durumunu kontrol et
cagefsctl --list-enabled
CageFS’in düzgün çalışıp çalışmadığını test etmek için:
# Kullanıcı olarak CageFS ortamına gir ve kontrol et
su - kullanici_adi -s /bin/bash -c "ls /home"
# Bu komut yalnızca o kullanıcının kendi home dizinini göstermeli
OpenLiteSpeed ve CageFS Entegrasyonu
İşte kritik nokta burası. OpenLiteSpeed, PHP’yi işlemek için External Application olarak PHP LSAPI kullanır. CageFS entegrasyonu için bu PHP işlemlerinin kafes içinde çalışması gerekir.
lsphp Kurulumu
CloudLinux, kendi özel lsphp paketlerini sunar. Bu paketler hem OpenLiteSpeed ile uyumludur hem de CageFS desteğine sahiptir:
# CloudLinux PHP selector için gerekli paketleri kur
yum install alt-php-selector -y
yum install lsphp74 lsphp74-common lsphp74-mysql -y
yum install lsphp81 lsphp81-common lsphp81-mysql -y
# PHP selector'ı yapılandır
cagefsctl --setup-cl-selector
CageFS ile PHP LSAPI Yapılandırması
OpenLiteSpeed’in PHP’yi CageFS içinde çalıştırması için wrapper script kullanmak gerekir. CloudLinux bu wrapper’ı otomatik olarak sağlar ama elle de yapılandırabilirsiniz:
# CageFS PHP wrapper kontrolü
ls -la /usr/local/bin/lsphp
# veya
ls -la /opt/alt/php74/usr/bin/lsphp
# Wrapper scriptini kontrol et
cat /usr/bin/cagefs_enter
OpenLiteSpeed admin panelinde veya konfigürasyon dosyasında External Application tanımını şu şekilde yapılandırın:
# /usr/local/lsws/conf/httpd_config.conf dosyasını düzenle
# External Application bölümünde:
extApp lsapi lsphp74 {
address uds://tmp/lshttpd/lsphp74.sock
maxConns 35
env PHP_LSAPI_CHILDREN=35
env LSAPI_AVOID_FORK=200M
initTimeout 60
retryTimeout 0
persistConn 1
pcKeepAliveTimeout 30
respBuffer 0
autoStart 1
path /opt/alt/php74/usr/bin/lsphp
backlog 100
instances 1
priority 0
memSoftLimit 2047M
memHardLimit 2047M
procSoftLimit 400
procHardLimit 500
}
CloudLinux PHP Selector ile Çoklu PHP Versiyonu Yönetimi
Hosting ortamlarının en büyük gereksinimlerinden biri, her müşteriye farklı PHP versiyonu sunabilmektir. CloudLinux’un PHP Selector özelliği ve OpenLiteSpeed’in multi-PHP desteği bu konuda mükemmel bir çözüm sunar.
# Mevcut PHP versiyonlarını listele
cl_selector --list-available
# Varsayılan PHP versiyonunu ayarla
cl_selector --set-default-version 7.4
# Belirli kullanıcı için PHP versiyonu ayarla
cl_selector --set-user=kullanici_adi --version=8.1
# Kullanıcının mevcut PHP versiyonunu kontrol et
cl_selector --list-user=kullanici_adi
Her virtual host için PHP versiyonunu OpenLiteSpeed konfigürasyonunda da belirtmelisiniz. Tipik bir virtual host konfigürasyonu şu şekilde olur:
# /usr/local/lsws/conf/vhosts/musteri_sitesi/vhconf.conf
scriptHandler{
add lsapi:lsphp74 php
}
extprocessor lsphp74{
type lsapi
address uds://tmp/lshttpd/kullanici_adi_lsphp.sock
maxConns 35
env PHP_LSAPI_CHILDREN=35
path /opt/alt/php74/usr/bin/lsphp
backlog 100
instances 1
runOnStartUp 2
autoStart 2
suexec 1
user kullanici_adi
group kullanici_grubu
}
Buradaki suexec 1 direktifi kritik öneme sahiptir. Bu, PHP işlemlerinin web sunucusu kullanıcısı (genellikle nobody veya www-data) yerine gerçek site sahibinin kullanıcısı olarak çalışmasını sağlar.
LVE (Lightweight Virtualization Environment) Entegrasyonu
CloudLinux’un bir diğer güçlü özelliği olan LVE, her kullanıcı için CPU, bellek, I/O ve proses sınırlamaları getirir. Bir kullanıcının sunucuyu kasması, diğerlerini etkiler hale gelmez.
# LVE limitlerini görüntüle
lvectl list
# Belirli kullanıcı için limit ayarla
lvectl set kullanici_adi --cpu=100 --pmem=256M --vmem=512M --io=1024 --nproc=100
# Varsayılan limitleri ayarla
lvectl set default --cpu=100 --pmem=256M --vmem=512M --io=1024 --nproc=100
# Mevcut kullanım istatistikleri
lveinfo --period=1d --by-fault --display-username
OpenLiteSpeed ile LVE entegrasyonunda önemli olan, PHP işlemlerinin LVE içinde başlatılmasıdır. CloudLinux’un mod_hostinglimits benzeri bir mekanizması bunu otomatik olarak halleder, ancak OpenLiteSpeed için ek yapılandırma gerekebilir:
# LVE wrapper kontrolü
which lve_enter
# /usr/sbin/lve_enter olmalı
# Manuel test
lve_enter kullanici_adi -- php -v
Gerçek Dünya Senaryosu: Symlink Saldırısını Engelleme
Paylaşımlı hostingde en yaygın saldırı vektörlerinden biri symlink saldırısıdır. Kötü niyetli bir kullanıcı, /etc/passwd veya başka bir kullanıcının wp-config.php dosyasına sembolik link oluşturarak içeriğini okumaya çalışabilir.
CageFS ve OpenLiteSpeed kombinasyonu bunu şu şekilde engeller:
# CloudLinux symlink korumasını etkinleştir
cat /etc/sysctl.conf | grep fs.enforce_symlinksifowner
# fs.enforce_symlinksifowner = 1 olmalı
# Eğer yoksa ekle
echo "fs.enforce_symlinksifowner = 1" >> /etc/sysctl.conf
echo "fs.symlinkown_gid = 99" >> /etc/sysctl.conf
sysctl -p
# Symlink korumasını test et
su - test_kullanici -c "ln -s /etc/passwd /tmp/test_link"
su - diger_kullanici -c "cat /tmp/test_link"
# Permission denied hatası almalısınız
CageFS ayrıca /proc dosya sistemini de izole eder. Bu sayede bir kullanıcı, diğer kullanıcıların çalışan proseslerini ve ortam değişkenlerini göremez:
# CageFS içindeki /proc izolasyonunu test et
cagefsctl --enter kullanici_adi
ls /proc
# Yalnızca o kullanıcıya ait prosesler görünmeli
exit
Gerçek Dünya Senaryosu: Güvenliği Ihlal Edilmiş Hesabı İzole Etme
Müşterilerden birinin WordPress sitesi hack’lendi ve sunucuda zararlı script çalışmaya başladı. CageFS sayesinde bu durum diğer hesaplara sıçramadı. Ancak o hesabı hemen izole etmeniz ve temizlemeniz gerekiyor.
# Kullanıcının CageFS durumunu kontrol et
cagefsctl --list-enabled | grep hack_edilen_kullanici
# Kullanıcının çalışan proseslerini listele
ps aux | grep hack_edilen_kullanici
# Kullanıcıyı geçici olarak kilitle
passwd -l hack_edilen_kullanici
# OpenLiteSpeed'de virtual hostu geçici devre dışı bırak
# vhconf.conf dosyasında:
# note Gecici olarak devre disi
# Kullanıcının LVE kullanımını kontrol et
lvectl list | grep kullanici_id
# Zararlı dosyaları tara
find /home/hack_edilen_kullanici -name "*.php" -newer /home/hack_edilen_kullanici/.last_clean -type f | head -50
# Malware tarayıcı çalıştır
clamscan -r /home/hack_edilen_kullanici/public_html --infected --remove
OpenLiteSpeed Konfigürasyonunda Güvenlik Sertleştirme
OpenLiteSpeed’in temel güvenlik ayarlarını CageFS ile uyumlu şekilde yapılandırmak önemlidir:
# /usr/local/lsws/conf/httpd_config.conf düzenlemeleri
# Sunucu imzasını gizle
serverName LSWS
# Güvenli header ayarları için server.conf
# X-Powered-By başlığını kaldır
# Bu genellikle PHP ayarlarından yapılır:
cat > /opt/alt/php74/etc/php.d/security.ini << 'EOF'
expose_php = Off
display_errors = Off
log_errors = On
error_log = /home/{username}/logs/php_error.log
open_basedir = /home/{username}:/tmp:/usr/local/lib/php
disable_functions = exec,passthru,shell_exec,system,proc_open,popen,curl_exec,curl_multi_exec,parse_ini_file,show_source
EOF
CageFS’te hangi sistem dosyalarının kullanıcılara görünür olacağını kontrol etmek için:
# CageFS'te görünür dizin listesini kontrol et
cat /etc/cagefs/cagefs.mp
# Özel bir dosyayı CageFS içine ekle
echo "/etc/myapp.conf" >> /etc/cagefs/cagefs.mp
# Değişiklikleri uygula
cagefsctl --remount-all
LiteSpeed Cache ve CageFS Uyumu
WordPress için LiteSpeed Cache eklentisi, OpenLiteSpeed ortamlarında mükemmel çalışır. Ancak CageFS ile birlikte cache dizini yapılandırmasına dikkat etmek gerekir:
# Cache dizinini kontrol et
ls -la /usr/local/lsws/cachedata/
# Her kullanıcı için ayrı cache dizini oluştur
mkdir -p /usr/local/lsws/cachedata/kullanici_adi
chown kullanici_adi:kullanici_grubu /usr/local/lsws/cachedata/kullanici_adi
chmod 750 /usr/local/lsws/cachedata/kullanici_adi
# .htaccess ile cache kontrolü (OpenLiteSpeed .htaccess destekler)
cat > /home/kullanici_adi/public_html/.htaccess << 'EOF'
# LiteSpeed Cache kuralları
<IfModule LiteSpeed>
CacheRoot /usr/local/lsws/cachedata/kullanici_adi
CacheMaxAge 86400
</IfModule>
EOF
Izleme ve Log Yönetimi
Entegrasyon sonrası sistemi düzgün izlemek şart:
# OpenLiteSpeed error loglarını izle
tail -f /usr/local/lsws/logs/error.log
# Belirli kullanıcının LVE istatistiklerini izle
lveinfo --period=1h --by-fault --display-username --user=kullanici_adi
# CageFS ile ilgili sorunları logla
cat /var/log/cagefs.log
# Genel CloudLinux event logları
cat /var/log/messages | grep -i cagefs
# Kaynak kullanım raporu oluştur
lvechart --period=1d --output=/tmp/lve_report.html --user=kullanici_adi
Cron job ile düzenli izleme raporu almak için:
cat > /etc/cron.daily/lve-report << 'EOF'
#!/bin/bash
TARIH=$(date +%Y%m%d)
lveinfo --period=1d --by-fault --display-username > /var/log/lve_daily_${TARIH}.log
# Limit aşan kullanıcıları bul ve bildir
lveinfo --period=1d --by-fault --display-username | grep -v "^ID" | awk '$4 > 10 {print $NF}' |
xargs -I{} echo "Uyari: {} kullanicisi LVE limitini asti" | mail -s "LVE Raporu" [email protected]
EOF
chmod +x /etc/cron.daily/lve-report
Yaygın Sorunlar ve Çözümleri
Sorun 1: PHP işlemleri CageFS dışında çalışıyor
Bunu test etmek ve çözmek için:
# PHP işleminin CageFS içinde çalışıp çalışmadığını kontrol et
cat /proc/$(pgrep -f "lsphp" | head -1)/cgroup | grep cagefs
# Eğer CageFS yoksa:
cagefsctl --enable kullanici_adi
service lsws restart
Sorun 2: open_basedir kısıtlamaları nedeniyle uygulama hataları
Bazen uygulamalar sistem dizinlerine erişmek isteyebilir. CageFS bu dizinleri zaten izole etmiş olsa da ek yapılandırma gerekebilir:
# Kullanıcıya özel open_basedir ayarı
# /etc/cagefs/conf.d/kullanici_adi.cfg
cat > /etc/cagefs/conf.d/kullanici_adi.cfg << 'EOF'
[php]
open_basedir = /home/kullanici_adi:/tmp:/usr/share/php:/usr/local/share/pear
EOF
cagefsctl --remount kullanici_adi
Sorun 3: Suexec sorunları nedeniyle 500 hataları
# OpenLiteSpeed suexec loglarını kontrol et
cat /usr/local/lsws/logs/stderr.log | grep -i suexec
# Dosya izinlerini kontrol et
ls -la /home/kullanici_adi/public_html/
# Dizinler 755, dosyalar 644 olmalı
# Sahibi kullanici_adi olmalı
# Toplu izin düzeltme
find /home/kullanici_adi/public_html -type d -exec chmod 755 {} ;
find /home/kullanici_adi/public_html -type f -exec chmod 644 {} ;
chown -R kullanici_adi:kullanici_grubu /home/kullanici_adi/public_html
Performans Optimizasyonu
CloudLinux ve CageFS’in getirdiği izolasyon katmanı minimal düzeyde overhead yaratır. Bunu optimize etmek için:
# CageFS mount cache'ini optimize et
echo "options cagefs cache_time=3600" > /etc/modprobe.d/cagefs.conf
# OpenLiteSpeed worker process sayısını CPU çekirdeğine göre ayarla
# httpd_config.conf
# serverName kısmında:
# worker $(nproc)
# PHP OpCache ayarları - CageFS uyumlu
cat >> /opt/alt/php81/etc/php.d/opcache.ini << 'EOF'
opcache.enable=1
opcache.memory_consumption=128
opcache.interned_strings_buffer=8
opcache.max_accelerated_files=10000
opcache.revalidate_freq=2
opcache.validate_timestamps=1
EOF
Sonuç
OpenLiteSpeed, CloudLinux ve CageFS entegrasyonu, paylaşımlı hosting ortamları için gerçek anlamda katmanlı bir güvenlik ve performans altyapısı sunar. CageFS her kullanıcıyı kendi sanal ortamında izole ederken, LVE kaynak tüketimini kontrol altında tutar, OpenLiteSpeed ise Apache’nin çok üzerinde bir performansla bu izole ortamları yönetir.
Bu kombinasyonun en büyük avantajlarından biri, bir hesapta yaşanan güvenlik sorunlarının diğerlerine sıçramamasıdır. Gerçek bir hosting ortamında bu özelliğin değerini ancak bir güvenlik olayı yaşandığında tam olarak anlarsınız. O yüzden kurulumu yapmayı, hack sonrasına bırakmayın.
Kurulum sonrası düzenli olarak lveinfo çıktılarını takip edin, CageFS güncellemelerini ihmal etmeyin ve OpenLiteSpeed loglarını izleyin. Bu üçlünün bakımı, başlangıçtaki kurulumu kadar önemlidir. Ayrıca CloudLinux lisansını düzenli olarak yenilemek ve güvenlik yamalarını zamanında uygulamak, sistemin uzun vadeli sağlığı için kritiktir.
Son olarak, üretim ortamına geçmeden önce bu yapıyı test ortamında kurmanızı ve tüm uygulamalarınızın CageFS ile uyumlu çalıştığını doğrulamanızı şiddetle tavsiye ederim. Her müşteri uygulaması biraz farklı davranabilir ve bazı uygulamalar için ek CageFS konfigürasyonları gerekebilir. Ama bir kez düzgün kurulduğunda, hem siz hem de müşterileriniz bu güvenli ve performanslı ortamın tadını çıkarırsınız.