Joomla Güvenlik Önlemleri

Joomla, çekirdek kod yapısı itibariyle gayet güvenli ve kullanıcının başını ağrıtmayan, gece yatağınızda yatarken aklınızın sitenizde kalmasına engel olacak ölçüde sağlam bir İçerik Yönetim Sistemi’dir. Standart bir cümle olacak olsa da kullanmak gerekiyor ki; “%100 güvenli bir sistem yoktur”, eğer %100 güvenli bir sistem arıyorsanız o zaman sunucunuzun internet bağlantısını kapatın ve fişini de çekin. Bu şekilde sisteminiz (Bilgisayar dahil) tam güvenli ve asla güvenlik riski barındırmayan bir sistem olacaktır.


Joomla’nın sağlam çekirdek kod yapısına rağmen yine de bir Joomla siteyi güvensiz hale getirmek elinizdedir. Genellikle sistemi güvensiz yapan unsurların başında 3. Parti yazılımlar dediğimiz, joomla’ya sonradan eklenen, bileşen, modül, plugin, hatta temalar geliyor. Hatalı kodlanabilen, içinde SQL Injection gibi yöntemlere açık, güvenlik açıkları barındırabilecek kodlar vasıtasıyla uzaktan erişim vasıtasıyla sunucu dizini dahil tüm sisteminize sızılabilir. milw0rm - exploits : vulnerabilities : videos : papers : shellcode sitesinden de joomla ile ilgili arama yaptığınızda karşınıza gelecek olan sonuçlarda da bunu görmek mümkün. Genel anlamda açıkların hemen hemen tümü 3. Parti eklentilerinin yol açtığı güvenlik zafiyetlerinden kaynaklanmaktadır.


Tabi tüm bunlara ek olarak, çok nadir de olsa joomla’nın standart yapısı dahilinde küçük açıklarda olabiliyor ki bunlar çok kısa zamanda yeni sürüm yamaları ile gideriliyor. Sunucu güvenliğini de unutmadan belirtmek gerekir ki zaten bu konuda yazılmış başka makalelerim bulunuyor.
Tüm bu açıklamaların ışığında, joomla sitelerimizi nasıl olur da daha güvenli hale getirir veya güvenli bir şekilde işlemesini sağlayabiliriz? Konusuna yardımcı olabilecek önerilerimizi açıklamaya başlayalım.


1 – İşe ilk olarak, joomla kurulumlarında standart olarak yazılı gelen ve kurulumla beraber joomla’nın veritabanı tablo isimlerinin önüne gelen “Tablo Ön Eki” (table prefix) düzenlemesini yapacağız. Bazı joomlacılar ilk kurulumda standart olarak gelen “jos_” ön ekini değiştirirler, bunun yerine tahmin edilmesi daha zor olan bir kelime girmek suretiyle öncelikle bu noktada önlem alırlar. Eğer sizler bu tablo ön ekini değiştirmemiş ve joomlanızı varsayılan şekilde kurmuşsanız o zaman birkaç adımda bu tablo ön eki olan “jos_” ön ekini farklı bir kelime ile (örneğin degisim_) değiştirelim.

a) Joomlamızın “configuration.php” dosyasını ftp den çağırıp içinde yer alan tablo ön eki “jos_” ifadesini bulalım ve dilediğimiz şekilde düzenleyerek (değişikliği yaparken en sona ” _” işaretini unutmayın) yine ftp den bulunduğu joomla ana dizinimize atalım.
b) Ardından, veritabanımıza girerek, veritabanımızın yedeğini alalım, daha sonra bu yedeği wordpad programı veya her hangi bir gelişmiş yazı editörü ile düzenleyeceğiz. Configuration.php dosyasındaki veritabanı tablo ön ekini hangi isimde vermişsek, elimizdeki veritabanı yedeğimizde “tümünü değiştir” (replacement) yöntemiyle, üst kutucuğa “jos_” alt kutucuğa da yeni belirlediğimiz tablo ön ekini yazarak (örnek: degisim_) tümünü değiştirelim. Veritabanı yedeğimizi bu şekilde düzenledikten sonra yine veritabanımıza girerek bu yeni yedek dosyamızı içe aktaralım. Eski ön ekli tablolarımızı işlemlerimiz doğru ve hatasız sonuçlanınca silebiliriz, güvenlik için şimdilik dursun.
Böylelikle joomla’mızın güvenliği için ilk önlemimizi aldık, şimdi bir diğer güvenlik önerimize geçebiliriz.


2 - Bu önerimiz de, joomlamızın sürüm bilgisi ve sitemizde yüklü olan bileşen ve modüllerimizin sürüm bilgilerini düzenlemek olacak. Malum, joomla’nın açıkları aranırken genellikle (hatta daima diyebiliriz) joomla ve kullanılan eklentilerin sürüm bilgilerine göre aramalar yapılır ve açığı olan sürümlere sahip eklenti ve joomla’yı içeren siteler daha kolay bulunur. İşte biz bu durumda öncelikle joomlamızın sürüm bilgisini kaldıracağız.
a) Öncelikle kullandığımız temanın “head” etiketinden hemen sonra “<?php $this->setGenerator(’burasını ya boş bırakın ya da herhangi bir şey yazın’); ?>” kodunu ekliyoruz, bu kod siteyi oluşturan scripti tanımlayan bir koddur. Yahut, /libraries/joomla/********/html/renderer/head.php dizinindeki “head.php” dosyasını bir düzenleme programıyla açıp “$strHtml .= $tab.’<**** name=”generator” content=”‘.$********->getGenerator().’” />’.$lnEnd;” kodunu buluyoruz. Bu kodu ya tamamen siliyoruz, yahut bu kodun başına yorum etiketi ekleyerek etkisizleştiriyoruz.
b) Ardından tüm yüklü bileşen ve modüllerimizi ftp den bilgisayarımıza çekerek bu eklentilerde yer alan sürüm bilgisi veya bileşen adı olarak copyright bilgilerini bulup kaldırıyoruz. TotalCommander vb… programlarla bu işlem (tüm dizinleri birden arama) çok daha kolay yapılabiliyor.


3 – Bilindiği gibi, joomla yönetim panelimize site adresimizin sonuna bir slash, (/) administrator yazdığımızda herkes yönetim paneline giriş sayfasına erişebiliyor. Tabi bu web klasörünü sunucu panelinden şifreleyebiliriz ancak bu işlemi daha güzel yapan bir ekleti ile, bir nevi bu klasörü gizleyerek/adını değiştirerek daha etkili bir güvenlik sağlayabiliriz. Bileşenimizin adı JSecure, vazifesi de yönetim paneli yolunu gizlemek olarak özetlenebilir. Yani 404 - Not Found olan yönetim paneli giriş yolunu 404 - Not Found haline getirerek tahmin edilmesi en zor şekle getiriyor. Bu bileşeni jSecure Authentication - Joomla! Extensions Directory adresinden indirebilirsiniz.


4 – Sitemizi arama motorlarına uygun hale getirmenin ilk adımı olan “SEF” diye nitelenen özelliği, joomla yönetim paneli genel ayarlardan aktif hale getirelim, bu şekilde hem site URL’leri daha düzgün hem de asıl linkleri yüzeysel de olsa gizlemiş olacağız. Tabi SEF için ücretsiz olan “sh404” veya “artio joomsef” gibi bileşenler de kullanarak SEO için de farklı bir adım atmış olabiliriz.


5 – Genellikle güvenlik açığı arama faaliyetleri, joomlamızın ayar dosyası olan configuration.php üzerinden yapılır, bu sebeple ayar dosyamızın güvenliğine daha çok dikkat etmeliyiz. Bunun için configuration.php dosyamızın adını değiştiren buradaki uygulamayı sitemize kurabileceğimiz gibi, dosya izinlerini güzel bir biçimde ayarlayarak da bu güvenliği sağlayabiliriz. Doğru ve etkili dosya/klasör izinleri (permission, chmod) konusuna az ileride değineceğim.


6 – Joomlamızı ilk defa kurduğumuzda yönetici adı olarak “admin” atandığını biliyoruz, eğer bu kullanıcı adını değiştirmemişsek kendimize farklı bir isim belirleyerek “admin” kullanıcı adını kullanmayalım.


7 – Joomla ana dizininde yer alan “htaccess.txt” isimli dosyanın adını zaten az yukarıda SEF ile ilgili yaptığımız işlemlerin geçerliolabilmesi için “.htaccess” olarak adını değiştirmiş olmamız lazım. Dolayısıyla bu dosyada “exploit” denen zararlılara karşı koyacak olan bir kod kümesi yer alır o da örenk olarak aşağıdaki gibidir.


Kod:

########## Begin - Rewrite rules to block out some common exploits
#
# Block out any script trying to set a mosConfig value through the URL
RewriteCond %{QUERY_STRING} mosConfig_[a-zA-Z_]{1,21}(=|%3D) [OR]
# Block out any script trying to base64_encode crap to send via URL
RewriteCond %{QUERY_STRING} base64_encode.*(.*) [OR]
# Block out any script that includes a < script> tag in URL
RewriteCond %{QUERY_STRING} (<|%3C).*script.*(>|%3E) [NC,OR]
# Block out any script trying to set a PHP GLOBALS variable via URL
RewriteCond %{QUERY_STRING} GLOBALS(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script trying to modify a _REQUEST variable via URL
RewriteCond %{QUERY_STRING} _REQUEST(=|[|%[0-9A-Z]{0,2}) [OR]
# Block out any script that tries to set CONFIG_EXT (com_extcal2 issue)
RewriteCond %{QUERY_STRING} CONFIG_EXT([|%20|%5B).*= [NC,OR]
# Block out any script that tries to set sbp or sb_authorname via URL (simpleboard)
RewriteCond %{QUERY_STRING} sbp(=|%20|%3D) [OR]
RewriteCond %{QUERY_STRING} sb_authorname(=|%20|%3D)
# Send all blocked request to homepage with 403 Forbidden error!
RewriteRule ^(.*)$ index.php [F,L]
#
########## End - Rewrite rules to block out some common exploits

Bu reklam sadece misafirlere görünüyor. Oturum açar veya üye olursan, bu reklamdan kurtulursun.


Bu kod exploit saldırılarını engelleyecek olan kodumuzdur, eğer bu kod kümesi yoksa aynen alıp kendi .htaccess dosyanıza ekleyebilirsiniz.


8 – Joomla ana dizinimizde yer alan dosyaların ve klasörlerin daima önerilen “chmod” (dosya klasör izni) ayarlarında olması gereklidir, buna göre tüm joomla dosya ve klasörleri aşağıdaki şekilde düzenlenmeli.
Dosya lar – 644
Klasörler – 755
Configuration.php dosyası – 666 (genel ayarlar kısmında sorun olmuyorsa bu değer 444 olarak ayarlanırsa daha iyi olacaktır)
Şeklinde ayarlamamız en doğru dosya klasör izinleri olacaktır.


9 – Joomla resmi sitesini sıklıkla takip ederek, yahut abonelik sistemini kullanarak en son haberlere abone olmalıyız ki yeni sürüm çıktığında hemen joomla sürümümüzü yükseltmeliyiz. Daima en son sürüm joomla kullanmaya dikkat edin.


10 – Sitenizde kullandığınız tüm eklentileri bir liste halinde yazılı olarak tutun, karşılarında da resmi sitesinin adresleri bulunsun ve mümkün olan makul aralıklarla bu eklentilerin güncel sürümlerinin çıkıp çıkmadıklarına dikkat edin.


11 – Aslında web sitelerinizin güvenliği bilgisayarınızdan başlar bu nedenle daima güncel bir antivirüs yazılımınız olsun ve şüpheli sitelerden uzak durun, tanımadığınız epostalardaki linklere tıklamayın. Günümüzde iframe virüsü denen virüsler belli siteleri ziyaret etmeniz nedeniyle kullandığınız tarayıcının geçici depolama klasörüne veya sisteminizin “temp” klasörüne yerleşerek buradan da ftp programınız vasıtasıyla tüm site dosyalarına yayılabilir.


12 – Buradaki anlatımları uygulamadan önce mutlaka sitenizin ve veritabanının bir yedeğini alın, ayrıca genel olarak makul aralıklarla bu işlemi tekrarlayın. Bilgisayarınızda bir yedekleme klasörü oluşturup aldığınız yedekleri bu klasörde düzenli bir şekilde tutun. Bu yedekler içinde en önemlilerinden bir tanesi de kullandığınız tema olduğundan, en azından tüm dizinin yedeğini almaktan üşendiğiniz durumda en son ve sağlam bir tema yedeğiniz olsun.
Tüm anlatılanların ışığında, uygulanması ile beraber çok daha sağlam bir sisteme sahip olacağınız gibi içiniz 2 kere rahat olmuş olacak. Huzurlu ve rahat çalışmalar dileklerimle.


Alıntıdır...