İçeriğe geç
Tüm rehberler

cPanel/WHM Sunucu Güvenliği Kontrol Listesi: 17 Alanda Elle Denetim Rehberi

Çekirdek açıklarından SSH ayarlarına, PHP ve MySQL'den SSL sertifikalarına kadar bir cPanel/WHM sunucusunda kontrol etmeniz gereken 17 alan; her biri için neden önemli olduğu ve salt okunur kontrol komutu.

Okumaya başla

Güncellendi:

cPanel/WHM Sunucu Güvenliği Kontrol Listesi: 17 Alanda Elle Denetim Rehberi
Kaydetmek için giriş yapın
Bu rehberi paylaş

Bir cPanel/WHM sunucusunun güvenliği tek bir ayarla ölçülmez. Çekirdek sürümü, cPanel güncellemeleri, SSH yapılandırması, güvenlik duvarı, PHP ayarları, MySQL kullanıcıları, sertifikalar ve dosya izinleri birlikte bir tablo oluşturur. Bu yazıda bu tabloyu 17 alana bölüyoruz. Her alan için neyin neden önemli olduğunu, root olarak bağlandığınız bir oturumda hangi komutla kendiniz kontrol edebileceğinizi ve çıktıda neye bakmanız gerektiğini anlatıyoruz.

Sıralama rastgele değil. Sentinel'in denetim modüllerini çalıştırdığı öncelik sırasını izliyor: önce doğrudan istismar edilebilen açıklar ve güncellemeler, sonra erişim kontrolü, ardından web katmanı, en sonda da takip gerektiren konular. Elle denetim yaparken de bu sırayı izlemenizi öneririz; zaman kısıtlıysa listenin üst yarısı riskin büyük kısmını kapsar.

1. Çekirdek açığı: CVE-2026-31431 (CopyFail)

CopyFail, Linux çekirdeğinin çekirdek içi kripto arayüzünde (AF_ALG) bulunan bir yerel yetki yükseltme açığıdır. Paylaşımlı hostingde bunun anlamı şudur: güncellenmemiş bir WordPress eklentisi üzerinden sunucuda kod çalıştırabilen biri, bu açıkla root olabilir. Kontrol edilecek şey yüklü değil, çalışan çekirdektir. Yeni çekirdek kurulmuş ama sunucu yeniden başlatılmamışsa açık hâlâ geçerlidir.

bash

uname -r
rpm -q --changelog $(rpm -qf /boot/vmlinuz-$(uname -r)) | grep -m1 CVE-2026-31431

İkinci komut çıktı vermiyorsa çalışan çekirdeğin paket geçmişinde bu CVE'nin düzeltmesi yok demektir. Dağıtımınızın güvenlik duyurusundaki yamalı sürümle uname -r çıktısını karşılaştırın.

2. cPanel açığı: CVE-2026-41940 (CRLF enjeksiyonu)

Bu açık cPanel'in kendisinde, kimlik doğrulamanın atlatılmasına yol açan bir CRLF enjeksiyonudur. Düzeltme cPanel sürümüyle gelir; bu yüzden kontrol iki adımdır: kurulu sürüm ve otomatik güncelleme ayarı. Güncellemeleri kapatılmış ya da eski bir sürüme sabitlenmiş sunucular bu tür açıkları en uzun süre taşıyanlardır.

bash

cat /usr/local/cpanel/version
grep -E '^(CPANEL|UPDATES)=' /etc/cpupdate.conf

UPDATES=never ya da CPANEL satırında sabitlenmiş eski bir sürüm görüyorsanız, bunun bilinçli bir karar olup olmadığını netleştirin. Sürüm numarasını cPanel'in güvenlik duyurusundaki düzeltilmiş sürümle karşılaştırın.

3. PHP açığı: CVE-2026-109618 (PHP2Shell)

PHP2Shell, PHP çekirdeğinde kimlik doğrulama gerektirmeyen bir uzaktan kod çalıştırma açığıdır ve mod_php, PHP-FPM, CGI ve LiteSpeed lsphp dahil tüm web çalışma biçimlerini etkiler. cPanel sunucularında genellikle birden fazla PHP sürümü yan yana kuruludur ve her biri ayrı ayrı değerlendirilmelidir. Resmi yaması olmayan eski dallar için bilinen istismar yolunu kapatan geçici önlem, session.upload_progress.enabled ayarını Off yapmaktır.

bash

rpm -qa 'ea-php*-php-cli' 'alt-php*-cli' | sort
for php in /opt/cpanel/ea-php*/root/usr/bin/php; do
  echo "$php: $($php -r 'echo PHP_VERSION, " upload_progress=", ini_get("session.upload_progress.enabled");')"
done

Komut satırı PHP'si ile PHP-FPM aynı ini dosyalarını okusa da, havuz yapılandırmasında ayrıca değer atanmış olabilir. Emin olmak için bir test sitesinde phpinfo çıktısına da bakın ve işiniz bitince o dosyayı silin.

4. İşletim sistemi ve cPanel güncellemeleri

Bekleyen güvenlik güncellemelerinin sayısı, sunucunun genel bakım durumunun en iyi göstergesidir. AlmaLinux, Rocky Linux ve CloudLinux güvenlik güncellemelerini ayrıca işaretler, böylece yalnızca güvenlik amaçlı olanları sayabilirsiniz.

bash

yum check-update --security -q | awk 'NF>=3 && $1 ~ /\./' | wc -l
yum updateinfo list --security | head -20

Sayı sıfırdan büyükse hangi paketlerin beklediğine bakın. Güncellemeyi uygulamayı bakım penceresine bırakmak makul; ancak çekirdek, OpenSSL, OpenSSH ve glibc gibi paketleri haftalarca bekletmeyin.

5. SSH sertleştirme

Dışarıdan erişilebilen her cPanel sunucusu, SSH portuna sürekli parola denemesi alır. Dört ayar bu riskin çoğunu kapatır: root için parolayla girişi kapatmak (PermitRootLogin prohibit-password), parola ile girişi tamamen kapatmak (PasswordAuthentication no), bağlantı başına deneme sayısını sınırlamak (MaxAuthTries 3) ve kullanılmayan X11 yönlendirmesini kapatmak (X11Forwarding no). Dosyayı değil, sshd'nin gerçekte kullandığı değeri okuyun; sshd_config.d altındaki dosyalar ana dosyadaki ayarı ezebilir.

bash

sshd -T | grep -Ei '^(permitrootlogin|passwordauthentication|maxauthtries|x11forwarding) '

Bu ayarları güvenli şekilde değiştirme prosedürünü, ikinci oturumu açık tutma ve sözdizimi testiyle birlikte ayrı bir yazıda adım adım anlattık.

6. Güvenlik duvarı ve dışa açık servisler

cPanel kurulumu varsayılan olarak etkin bir host güvenlik duvarıyla gelmez. Sunucuda CSF/LFD, Imunify360 ya da firewalld'den biri gerçekten filtreleme yapıyor olmalı. CSF kuruluysa TESTING modunun kapalı olduğundan emin olun: TESTING=1 iken CSF kuralları yükler ama belirli aralıklarla temizler, yani kalıcı koruma sağlamaz. İkinci kontrol, dışarıya açık dinleyen servislerdir. Redis (6379), MongoDB (27017), MySQL (3306), Memcached (11211), Elasticsearch (9200) ve TLS'siz Docker API (2375) internete açık olmamalıdır.

bash

csf -v 2>/dev/null; grep '^TESTING' /etc/csf/csf.conf 2>/dev/null
systemctl is-active lfd firewalld imunify360 2>/dev/null
ss -Hltnp | awk '$4 !~ /^(127\.|\[::1\])/ {print $4, $6}' | sort -u

Son komut, yalnızca yerel adreste olmayan TCP dinleyicilerini listeler. Listede tanımadığınız bir port varsa hangi sürecin açtığına bakın ve gerçekten dışarıdan erişilmesi gerekip gerekmediğine karar verin.

7. cPHulk kaba kuvvet koruması

cPHulk, cPanel'in WHM, cPanel, webmail, FTP ve e-posta girişlerine yönelik kaba kuvvet denemelerini izleyen servisidir. Kapalıysa WHM giriş ekranı sınırsız parola denemesine açık kalır. Açıksa beyaz listeyi de gözden geçirin; eskiden kalmış geniş IP aralıkları korumayı fiilen devre dışı bırakabilir.

bash

systemctl is-active cphulkd
whmapi1 read_cphulk_records list_name=white

8. ModSecurity ve OWASP kuralları

ModSecurity, Apache önünde çalışan bir web uygulaması güvenlik duvarıdır; tek başına kural içermez. Anlamlı koruma için hem modülün yüklü ve kural motorunun açık olması hem de bir kural setinin, tipik olarak OWASP CRS'nin etkin olması gerekir. Kural motoru DetectionOnly modundaysa saldırılar yalnızca kaydedilir, engellenmez.

bash

httpd -M 2>/dev/null | grep -i security
whmapi1 modsec_get_settings | grep -A3 SecRuleEngine
whmapi1 modsec_get_vendors | grep -E 'vendor_id|enabled'

9. PHP güvenlik ayarları

Her PHP sürümünün kendi php.ini dosyası vardır ve bir sürümde doğru olan ayar diğerinde yanlış olabilir. Üç ayar siteleri kırmadan kapatılabilir: expose_php (PHP sürümünü yanıt başlığında yayınlar), display_errors (hata ayrıntılarını ziyaretçiye gösterir) ve allow_url_include (uzak dosyaların include edilmesine izin verir). allow_url_fopen ve disable_functions ise sitelerin ihtiyacı doğrulanmadan değiştirilmemelidir; bazı eklentiler ve yedekleme araçları bunlara dayanır.

bash

for php in /opt/cpanel/ea-php*/root/usr/bin/php; do
  echo "== $php"
  $php -r 'foreach (["expose_php","display_errors","allow_url_include","allow_url_fopen"] as $k) echo "  $k=", var_export(ini_get($k), true), PHP_EOL;'
done

ini_get, php.ini'den sonra okunan php.d altındaki dosyaları da hesaba katar; bu yüzden dosyayı grep ile okumaktan daha güvenilirdir. CloudLinux ve CageFS kullanıyorsanız kullanıcıların PHP seçicisinden kendi değerlerini atayabildiğini, sunucu düzeyindeki ayarın bu sayede ezilebileceğini unutmayın.

10. MySQL / MariaDB sertleştirme

Eski kurulumlardan kalan anonim kullanıcılar, herkesin erişebildiği test veritabanı, uzaktan bağlanabilen root hesabı ve tüm arayüzlerde dinleyen bir veritabanı sunucusu, en sık karşılaştığımız dört sorundur. cPanel sunucusunda root kullanıcısı genellikle /root/.my.cnf üzerinden parolasız bağlanabilir.

bash

mysql -NBe "SELECT User,Host FROM mysql.user WHERE User=''"
mysql -NBe "SHOW DATABASES LIKE 'test%'"
mysql -NBe "SELECT User,Host FROM mysql.user WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1')"
ss -Htln | grep ':3306 '

İlk üç sorgunun boş dönmesi beklenir. Son komutta 0.0.0.0:3306 ya da [::]:3306 görüyorsanız veritabanı tüm arayüzlerde dinliyordur; uzaktan bağlantı gerçekten gerekmiyorsa bind-address 127.0.0.1 olmalıdır.

11. SSL/TLS yapılandırması

Bu alanda iki şeye bakıyoruz: AutoSSL'in bir sağlayıcıyla etkin olup olmadığı ve sunucunun hâlâ TLS 1.0 ya da 1.1 bağlantısı kabul edip etmediği. Yapılandırma dosyasını okumak yerine 443 portunda canlı denemek daha güvenilirdir.

bash

whmapi1 get_autossl_providers | grep -E 'module_name|enabled'
for v in tls1 tls1_1; do
  echo -n "$v: "; OPENSSL_CONF=/dev/null timeout 8 openssl s_client -connect 127.0.0.1:443 -$v -cipher 'DEFAULT:@SECLEVEL=0' </dev/null 2>&1 | grep -m1 'Cipher is'
done

Çıktıda Cipher is (NONE) görüyorsanız o sürüm reddediliyor demektir; bir şifre adı görüyorsanız eski protokol hâlâ kabul ediliyordur.

12. Dosya izinleri ve SUID dosyalar

Herkese yazılabilir (world-writable) dosyalar, ele geçirilmiş bir hesabın başka dosyalara bulaşmasını kolaylaştırır. /tmp ve /var/tmp dizinlerinde sticky bit yoksa kullanıcılar birbirinin dosyasını silebilir. En kritik kontrol ise beklenmeyen SUID dosyalardır: root yetkisiyle çalışan, bir paket tarafından kurulmamış ya da sonradan değiştirilmiş bir ikili dosya, arka kapı belirtisi olabilir.

bash

find /home/*/public_html -maxdepth 8 -type f -perm -0002 2>/dev/null | wc -l
stat -c '%A %n' /tmp /var/tmp
find /tmp /var/tmp /dev/shm /home -xdev -type f -perm -4000 2>/dev/null
find /usr/bin /usr/sbin -xdev -type f -perm -4000 -exec rpm -qf {} \; 2>&1 | grep 'not owned'

Sistem dizinindeki bir SUID dosyası bir pakete aitse, rpm -V paket_adı ile içeriğinin paketteki hâliyle aynı olup olmadığını doğrulayabilirsiniz. Çıktıda 5 harfi dosya özetinin değiştiği anlamına gelir.

13. Web sunucusu sertleştirme (Apache ve LiteSpeed)

ServerTokens ve ServerSignature ayarları, Apache'nin sürüm bilgisini yanıt başlıklarında ve hata sayfalarında yayınlayıp yayınlamadığını belirler. TraceEnable ise HTTP TRACE yöntemini kontrol eder. Bu ayarlar tek başına bir açık değildir; saldırganın sürüme özgü açıkları hedeflemesini kolaylaştıran bilgi sızıntısıdır. LiteSpeed kullanan sunucularda aynı bilgi Server başlığından okunur.

bash

grep -rhE '^\s*(ServerTokens|ServerSignature|TraceEnable)' /etc/apache2/conf/ /etc/apache2/conf.d/ 2>/dev/null
curl -skI https://127.0.0.1/ | grep -i '^server:'
curl -sk -X TRACE -o /dev/null -w 'TRACE: %{http_code}\n' https://127.0.0.1/

cPanel'de bu değerleri WHM içindeki Apache Configuration, Global Configuration ekranından değiştirmek, dosyayı elle düzenlemekten daha güvenlidir; elle yapılan değişiklik bir sonraki yapılandırma yenilemesinde kaybolabilir.

14. Çekirdek ağ ve güvenlik parametreleri (sysctl)

Altı çekirdek parametresi temel ağ saldırılarına ve bilgi sızıntısına karşı koruma sağlar: SYN flood için tcp_syncookies, IP sahteciliği için rp_filter, smurf saldırısı için icmp_echo_ignore_broadcasts, ICMP yönlendirmeleri için accept_redirects, çekirdek kayıtlarını sınırlamak için dmesg_restrict ve SUID süreçlerin bellek dökümü bırakmasını engellemek için suid_dumpable.

bash

sysctl net.ipv4.tcp_syncookies net.ipv4.conf.all.rp_filter \
  net.ipv4.icmp_echo_ignore_broadcasts net.ipv4.conf.all.accept_redirects \
  kernel.dmesg_restrict fs.suid_dumpable

Beklenen değerler sırasıyla 1, 1, 1, 0, 1 ve 0'dır. Kalıcı ayar için /etc/sysctl.d altındaki dosyaların okunma sırasına dikkat edin: ad sırasına göre sonra gelen dosya, öncekini ezer.

15. SSH yetkili anahtarlar (authorized_keys)

Parola girişini kapattıktan sonra sunucuya erişim, authorized_keys dosyalarındaki anahtarlara bağlıdır. Ayrılmış bir çalışanın, eski bir ajansın ya da bir saldırganın bıraktığı anahtar, sessiz ve kalıcı bir giriş yoludur. command=, no-pty ya da permitopen seçenekleri içeren anahtarlar meşru olabilir, ama tünel amaçlı arka kapılarda da sık görülür; her birinin kime ait olduğunu bilmelisiniz.

bash

ssh-keygen -lf /root/.ssh/authorized_keys
find /home -maxdepth 4 -name authorized_keys -type f 2>/dev/null
find /home /root -maxdepth 4 -name authorized_keys 2>/dev/null | xargs grep -l 'command=\|no-pty\|permitopen' 2>/dev/null

16. SSL sertifikalarının bitiş tarihleri

AutoSSL etkin olsa bile sertifikalar sessizce süresini doldurabilir: alan adı başka bir sunucuya taşınmıştır, DNS kaydı değişmiştir ya da bir CAA kaydı doğrulamayı engelliyordur. Geliştirme sırasında ilk denediğimiz, 295 sitenin barındırıldığı gerçek bir cPanel sunucusunda tek denetimde 44 süresi dolmuş SSL sertifikası ve 13 PHP güvenlik ayarı sorunu çıktı. Sitelerin web sertifikalarının yanında cPanel, WHM, Exim ve Dovecot gibi servislerin sertifikalarını da kontrol edin.

bash

for c in /var/cpanel/ssl/apache_tls/*/combined; do
  d=$(basename "$(dirname "$c")")
  e=$(openssl x509 -enddate -noout -in "$c" | cut -d= -f2)
  echo "$(( ($(date -d "$e" +%s) - $(date +%s)) / 86400 )) gün  $d"
done | sort -n | head -20

Negatif sayılar süresi dolmuş sertifikalardır. Nedenlerini ve servis sertifikalarının kontrolünü ayrı bir yazıda ele aldık.

17. Bekleyen yeniden başlatma

Çekirdek, glibc ya da OpenSSL güncellemesi kurulduktan sonra sunucu yeniden başlatılmadıkça eski kod çalışmaya devam eder. Birinci maddedeki çekirdek açığı için güncelleme kurmuş olmak yetmez; yeni çekirdekle açılmış olmak gerekir. Yeniden başlatma kesinti demektir, bu yüzden planlı yapılmalıdır, ama aylarca ertelenmemelidir.

bash

needs-restarting -r
uname -r; rpm -q kernel --last | head -1

needs-restarting komutu yum-utils (EL9'da dnf-utils) paketiyle gelir. Yoksa çalışan çekirdek sürümünü en son kurulan çekirdekle elle karşılaştırın.

Özet tablo

Aşağıdaki tablo, 17 alanın tamamını tek bakışta görmeniz için hazırlandı. Komutların hepsi salt okumadır.

AlanNe kontrol edilirElle kontrol komutu
CopyFail çekirdek açığıÇalışan çekirdekte CVE-2026-31431 düzeltmesi var mıuname -r; rpm -q --changelog $(rpm -qf /boot/vmlinuz-$(uname -r)) | grep CVE-2026-31431
cPanel CRLF açığıcPanel sürümü ve otomatik güncelleme ayarıcat /usr/local/cpanel/version; grep UPDATES /etc/cpupdate.conf
PHP2ShellHer PHP sürümü yamalı mı, session.upload_progress.enabled kapalı mı/opt/cpanel/ea-phpXX/root/usr/bin/php -r 'echo ini_get("session.upload_progress.enabled");'
GüncellemelerBekleyen güvenlik güncellemesi sayısıyum check-update --security -q
SSHPermitRootLogin, PasswordAuthentication, MaxAuthTries, X11Forwardingsshd -T | grep -Ei 'permitrootlogin|passwordauthentication|maxauthtries|x11forwarding'
Güvenlik duvarıCSF/LFD, Imunify360 veya firewalld etkin mi, TESTING kapalı mı, hassas portlar açık mıgrep '^TESTING' /etc/csf/csf.conf; ss -Hltnp
cPHulkServis çalışıyor mu, beyaz liste makul müsystemctl is-active cphulkd; whmapi1 read_cphulk_records list_name=white
ModSecurityModül yüklü mü, kural motoru açık mı, OWASP CRS etkin mihttpd -M | grep security; whmapi1 modsec_get_vendors
PHP ayarlarıexpose_php, display_errors, allow_url_include kapalı mıphp -r 'echo ini_get("display_errors");' (her ea-php sürümü için)
MySQLAnonim kullanıcı, test veritabanı, uzaktan root, dinleme adresimysql -NBe "SELECT User,Host FROM mysql.user WHERE User=''"; ss -Htln | grep :3306
SSL/TLSAutoSSL sağlayıcısı etkin mi, TLS 1.0/1.1 reddediliyor muwhmapi1 get_autossl_providers; openssl s_client -connect 127.0.0.1:443 -tls1_1
Dosya izinleriWorld-writable dosyalar, /tmp sticky bit, beklenmeyen SUIDfind /home/*/public_html -type f -perm -0002; find / -xdev -perm -4000
Web sunucusuServerTokens, ServerSignature, TraceEnable, Server başlığıcurl -skI https://127.0.0.1/ | grep -i server
Çekirdek parametreleriAltı sysctl değerisysctl net.ipv4.tcp_syncookies kernel.dmesg_restrict fs.suid_dumpable
SSH anahtarlarıRoot ve kullanıcı authorized_keys, kısıtlı anahtarlarssh-keygen -lf /root/.ssh/authorized_keys
Sertifika bitiş tarihleriSüresi dolmuş ve yaklaşan site ve servis sertifikalarıopenssl x509 -enddate -noout -in /var/cpanel/ssl/apache_tls/ALANADI/combined
Yeniden başlatmaKurulan güncellemeler etkin mineeds-restarting -r

Bu listeyi ne sıklıkla uygulamalı

Bir kez temizlemek yetmez; sunucular zamanla geri kayar. Bir hesap taşıması world-writable dosyalar getirir, bir cPanel güncellemesi yeni bir PHP sürümü kurar ve o sürümün php.ini'si varsayılan değerlerle gelir, bir alan adının DNS'i değişir ve sertifikası yenilenmez. Bizim önerimiz bu listeyi en az ayda bir çalıştırmak, her seferinde sonucu bir öncekiyle karşılaştırmak ve önceki ay kapattığınız bir bulgu yeniden açılmışsa nedenini araştırmaktır.

Birden fazla sunucu yönetiyorsanız elle denetimin asıl maliyeti tek tek komutlar değil, sonuçları toplamak ve karşılaştırmaktır. Bir tabloya not almak bile, neyin değiştiğini görmenizi sağlar.

Bulguları düzeltirken de bir sıra izleyin. Önce doğrudan istismar edilebilen açıkları ve süresi dolmuş sertifikaları ele alın, sonra erişim kontrolünü (SSH, cPHulk, güvenlik duvarı), en son da bilgi sızıntısı türündeki ayarları. Her değişiklikten önce yedek alın, değişiklikten sonra aynı kontrol komutuyla sonucu doğrulayın ve bir kerede tek bir alanı değiştirin; bir şey bozulursa nedenini bulmak böylece çok daha kolay olur.

Sentinel bunu nasıl yapar

Sentinel, bu yazıdaki 17 alanı aynı sırayla, 17 modül halinde denetler. Sunucuya ajan kurulmaz; panelde sunucu adresini ve SSH bilgisini girersiniz, sunucunun SSH parmak izini onaylarsınız ve ilk denetimi başlatırsınız. Denetim sunucuda bir şey değiştirmez. Sonuçta her bulgu önem derecesiyle (Kritik, Yüksek, Orta, Düşük, Bilgi) listelenir ve sunucu için 100 üzerinden bir puan hesaplanır.

  • Düzeltilebilir bulgularda önce "Önce göster" ile uygulanacak komutları sunucuya dokunmadan görürsünüz; "Düzelt" dediğinizde değiştirilecek dosyanın tarihli bir yedeği alınır, SHA-256 özeti öncesi ve sonrası kaydedilir ve modül yeniden ölçülür.
  • Bazı alanlar bilinçli olarak otomatik düzeltilmez: SSH anahtarları ve yeniden başlatma yalnızca raporlanır, allow_url_fopen ve disable_functions yalnızca öneri olarak gösterilir.
  • Her denetim bir öncekiyle karşılaştırılır; yeni çıkan, giderilen ve hâlâ açık olan bulgular ayrı listelenir.
  • Tüm paketlerde her ayın 1'inde, Professional pakette ayrıca her pazartesi otomatik denetim yapılır; panelden istediğiniz zaman elle denetim başlatabilirsiniz.

TEKNOWEB ÇÖZÜMLERİ

Bu rehberle ilgili çözümler

Rehberdeki konuyu gerçek ürün ve hizmet seçenekleriyle birlikte değerlendirin.

Yorumlar ve sorular

Deneyimini paylaş, birlikte çözelim.

Yorumlar yükleniyor…

Okumaya devam edin

Tüm rehberler