Güvenli WordPress Kurulumu

WordPress‘den uzun uzun bahsetmeye gerek yok sanırım, herkes biliyordur. Nette en sık karşılaştığımız open source blog diyeceğim ama artık karşımıza sadece blog olarak çıkmayabiliyor. Artık neredeyse her türlü site wordpress olabiliyor. WordPress PHP ile geliştirildiğinden, bizde kendimize PHP geliştiricisi dediğimizden wordpress kurarken ve kullanırken bazı noktalara dikkat ediyoruz. Geçenlerde bir arkadaşımızın isteği üzerine dikkat ettiğimiz bu noktaları paylaşmak istedik. Büyük ihtimalle nette bu bahsettiklerimin hepsini bulabilirsiniz ama ben kendi yaptıklarımı kendi anlatımımla yazmak istiyorum. Başka biryerde de wordpress kuracak olursam kendim için bir checklist olmuş olur.

WordPress’in İndirilmesi

  • Download işlemi sırasında dikkat edilecek pek birşey yok. Her zaman orjinal wordpress’i ve en son versiyonu indirdiğinizden emin olun yeterli. Orjinal site: http://wordpress.org.

Veritabanı Ayarları

  • Kodları indirdikten sonra veritabanı bilgilerini kaydetmemiz gerekiyor. Burda blogunuz için bir veritabanı, bir kullanıcı ve bir şifre ihtiyacınız olacak. Bunları da özenle seçmek, mümkün olduğunca karışık bir şekilde belirlemek oldukça önemli. Bu bilgileri başka sitelerinizde kullanmayın, bi zahmet blogunuza özel bir db kullanıcısı açıverin. Gibi;
    define(‘DB_NAME’,     ‘ibrahim_aVgHiR_BhC’);
    define(‘DB_USER’,     ‘ibrahim_kFjgFEm.lk’);
    define(‘DB_PASSWORD’, ‘kdDfS*'i5E-]*1@5nv’);
    
  • Veritabanı bilgilerini kaydettikten sonra wordpressin oluşturacağı tabloların önekini değiştiriyoruz. Varsayılan ön ek wp_ olarak belirlenmiş. Bunu farklı birşey yapıyoruz. Gibi;
    $table_prefix = ‘kbo3_’;;
    

Şifreleme Ayarları

  • Bu arada yukarıda veritabanı ile ilgili belirttiğim ayarları config.php dosyasında yapıyoruz. Config dosyasından bahsetmişken; şifreleme için burada değiştirmemiz gereken birkaç yer daha var. Bu dosyada wordpress kurulumunuzda kullanılacak olan bazı key‘ler ve şifreleyebilmeniz için gereken salt‘ları belirtebiliyoruz. Kriptoloji konusuna biraz aşina olan arkadaşlarım salt tabirinden neyin kastedildiğini anlayacaktır. Şimdilik bunun ayrıntısına girmiyorum. Girmeye de pek gerek yok. Yapmanız gereken işlem basit, aşağıda belirtilen alanları doldurmak. En kısa yoldan buraya(random kod üretir) tıklayarak gelen kodları, wp-config dosyasının ilgili bölümüne yapıştırabilirsiniz. Gibi;
    define('AUTH_KEY',         'MOPAUzR8c^P0&xWl-4k[%T.tfJ>v^`hQD<074'); 
    define('SECURE_AUTH_KEY',  'H~uj! G+[_W>xM{yWAY.<a4*V-bnM!=ykx^-J'); 
    define('LOGGED_IN_KEY',    ']Sv&`v(*$PRiFx[%rQd/vyl,(4~SlB+jpU%(f'); 
    define('NONCE_KEY',        '^vn[]yAnk/A66w$FD`kW;-1U_0|;1F]l73-bX'); 
    define('AUTH_SALT',        '9RWP9s>T8?HBz;a-$%T(y|/S|J?DiD0O_12rG');
    define('SECURE_AUTH_SALT', 'cf3q|i/g0?`t.|z0d&wZ|B<Jto+824;!(2b5F'); 
    define('LOGGED_IN_SALT',   'zgfyK;>8?gP./Fh3x<Q[ygeswD0j3Ac 8:5t?');
    define('NONCE_SALT',       ':+Fu=GVThNibkv+1$d-Dy+}|-h!.f-|{=#8`#');
    

Kullanıcı Ayarları

  • Öncelikle hemen default kullanıcı olan admin kullanıcısın siliyoruz. Yeni versiyonlarda kurulum sırasında sizden kullanıcı adı istediği için zaten admin diye bir kullanıcı oluşmamış oluyor. Yinede kurulumunuzda asla admin, administrator gibi kullanıcı adlarına sahip kullanıcı olmamasına dikkat edin. Ayrıca kendi isminizi de kullanıcı adı olarak atamayın. Güvenlik sadece şifreyi gizlemek değildir. Kullanıcı adınız da mümkün olduğunca tahmin edilemez olsun.
  • Varsayılan olarak gelen tüm postları, pageleri, commentleri silin. Ne varsa kaldırın, trash kutusundan da silin. Daha sonra kullanıcı ayarları bölümünden görüntülenecek adınızı değiştirin. Giriş yaparken kullandığınız username ile yazılarınızın altında görünecek isim farklı olsun.
  • Gelelim şifrenize, kullanıcı adına bu kadar dikkat etmişken, şifreye dikkat etmemek olmaz, bunuda abartabilirsiniz. Bi kere altın kural ezberleyebileceğiniz bir şifreniz olmasın. Nette sizin için random password üretecek siteler bulabilirsiniz (strongpasswordgenerator.com). Ayrıca plugin kısmında bahsedeceğim bir plugin de sizin için password üretebilir. Aşağıda bir özlü sözümüz (:

    Treat your password like your toothbrush. Don’t let anybody else use it, and get a new one every six months.

Dosya Erişimi (.htacces Ayarları)

  • Tahmin edersiniz ki en önemli dosyamız wp-config.php dosyası. Bunu özenle koruyalım, korumayanları uyaralım. Bu dosyayı korumak için envai çeşit yol var. Bu dosyanın adını değiştirebilirsiniz, yerini değiştirebilirsiniz, şifreleyebilirsiniz, ya da en basitinden bir .htaccess dosyası ile bu dosyaya erişimi engelleyebilirsiniz. Şimdilik son yöntemi uygulayalım, diğerlerini soran olursa söyleriz (:
    <Files wp-config.php>
    order allow,deny
    deny from all
    </Files>
    

    Yukarıdaki kodu .htaccess dosyasına yazdıktan sonra bu dosyayı da wp-config.php dosyasıyla aynı dizine (root dizini) koyuyoruz.

  • Config dosyasını korumak için htaccess dosyası yazdık ama htaccess dosyasını korumazsak yine bir anlamı kalmıyacak…o zaman bir htaccess daha yazıp, sonsuz döngüye giriyoruz…tabiki şaka yapıyorum. htaccess dosyasını korumak için, aynı dosya içerisine birde şu kodu ekliyoruz.
    <Files .htaccess>
    order allow,deny
    deny from all
    </Files>
    
  • WordPress versiyonunun gizlenmeside çok önemli bir konu. Bu konuda bir önlem almazsanız, sitenize giren bir hacker sayfanın kaynak koduna bakarak meta tagları içerisinde wordpress kurulumunuzun versiyonunu görecektir. E görcekte nolcak diyenler için, wordpress’in eski bir versiyonundaki güvenlik açıklarını bulmak sadece 3-4 dakika sürer diyebilirim. Her şartta, kötü niyetli biri için mümkün olduğunca fazla bilinmeyen oluşturmaya çalışmak lazım. Versiyonu gizlemek için; kullandığımız temanın içindeki function.php dosyasına gidiyoruz ve buraya aşağıdaki kodu ekliyoruz;
    remove_action('wp_head', 'wp_generator');
    

    Bazı temalarda bu önlem zaten alınmış olabiliyor…olabilir…

Eklentiler (Plugins)

  • WP Security Scan: WordPress kurulumunuzda bu tarz bir plugin olması çok önemli. Security Scan bir çok açıdan sitenizi tarıyor ve eğer bir açık bulursa sizi uyarıyor ve nasıl düzeltmeniz gerektiğini söylüyor. Daha napsın ki. Plugini yüklediğinizde bu yazıda bulunan başlıklar şeklinde menüleriniz olacak ve benim bu yazıda belirttiğim önlemlerin bir çoğunu alıp almadığınızı kontrol edecektir.
    Buradan indirebilirsiniz.
  • AntiVirus: Önem derecesi olmazsa olmaz pluginlerden biride antivirüs. Bu plugini yüklediğinizde kullandığınız temanın dosyalarını tarayarak herhangi bir exploit, malware ya da injection olup olmadığını kontrol edecektir. Hackerların genelde template dosyalarını kullandıklarını düşündüğümüzde bu plugin çok yararlı diyebiliriz. Bu pluginin en güzel yanı ise, günlük olarak otomatik tarama yapması ve şüpheli bir duruma rastlarsa size mail ile haber vermesidir.
    Buradan indirebilirsiniz.
  • Login LockDown: Yine önemli bir pluginimiz. İsminden de anlıyacağınız gibi bu plugin login esnasında belirli bir sayıdan fazla kez ard arda yanlış giriş yapılırsa IP adresini locklıyor ve o IP blogundan gelen tüm requestleri reddediyor. Default olarak 5 dakika içerisinde 3 kere yanlış giriş yapan IP’ler 1 saat boyunca banlanıyor. Ama tüm bu parametreler pluginin admin arayüzünden değiştirilebiliyor. Ayrıca banlanan IP’ler listelenip, ban kaldırılabiliyor. Brute-force dediğimiz saldırılara karşı olmazsa olmaz pluginimiz.
    Buradan indirebilirsiniz.
  • AskApache Password Protect: Bu plugini ilk sırada yazmamamın nedeni diğerlerinden daha önemsiz olması değil. Aksine çok daha fazla güvenli bir wordpress sahibi olmanızı sağlayabilir. Fakat dediğim gibi çok fazla. Eğer profesyonel bir iş yapıyorsanız ve bu kurulum profesyonel olarak kullanılacaksa Password Protect yüklenebilir. Kişisel blog için gerek görmüyorum. Gelelim plugine; AskApache tarafından geliştirilen bu plugin site etrafından bilgisayarlardaki firewall benzeri bir yapı oluşturur, server katmanında authentication kullanabilmenizi sağlar. Böylelikle /admin klasörünüze gelecek her türlü erişime bir autherization gereksinimi koymuş olursunuz.
    Buradan indirebilirsiniz.
  • BackUp WordPress: O kadar güvenlik önlemi aldınız. Ama rahatlamak yok. Ne olursa olsun, yedek almadan “tmm oldu” diyemeyiz. Bakup için ücretsiz çözümler içerisinde bulabildiğim en iyi plugin buydu sanırım. Hemen her türlü ayarlamayı yapabiliyorsunuz. Oluşturduğunuz bir shedule sayesinde düzenli olarak yedek alabiliyor, aldığı yedekleri sıkıştırabiliyor, size mail olarak gönderebiliyor. Sitenin tamamını değil, sadece istediğiniz dosyaları yedekleyebiliyor (ki bence sadece veritabanının yedeklenmesi yeterlidir).  Bunca işe rağmen çok fazla sistem kaynağına da ihtiyaç duymuyor.
    Buradan indirebilirsiniz.
  • Akismet: Bu pluginden bahsetmeye gerek olmayabilir. WordPress kullanan herkes biliyordur. Hatta varsayılan olarak yüklü geliyor, sadece ayarlamanız gerekiyor. Bunun için akismet.com adresine giderek, register oluyorsunuz. Personel plan seçerek ücretsiz kullanabilirsiniz. Üye olduktan sonra size bir key verecek ve bu keyi getirip admin panelinizden akismet ayarlarına kopyalayacaksınız. Böylece akismet çalışmaya başlayacak. Bu plugin aktif olarak çalıştığı sürece yorum gönderme formlarınıza captcha bile koymanıza gerek yok, bırakıp botlar, robotlar size spam comment göndermeye çalışsın, akismet hepsini yakalayacaktır. Fakat uzun süre sitenize uğramazsanız, trash kutunuzda akismet tarafından yakalanmış binlerce spam yorum görebilirsiniz. Hatta veritabanının patlamasına kadar gidebilir bu iş, dikkat etmek lazım…
    Buradan indirebilirsiniz.
  • Cleanup WordPress: İşte tamda bu noktada ihtiyaç duyacağınızı düşündüğüm plugin, cleanup.. Bu plugin gereksiz, fazlalık, pislik, çöp ne varsa siler..Yani otomatik silmiyor sanırım, bi bakmak lazım ayarlarına ama yinede sizin için büyük kolaylık olduğu kesin. WordPress postlarınızın pagelerinizin otomatik olarak versiyonlarını tutar. Silinen yorumlar trash’e gider. Böylelikle aslında görmediğiniz bir ton veri oluşur ve veritabanında yer kaplar. Bu plugin sizin için tüm bu verileri listeler ve tek tuşla veritabanınızı temizler.
    Buradan indirebilirsiniz.

Güncellemeler

Şöyle yapın, böyle yapın diye söyleyip durduğum yukarıdaki maddelerden çok daha önemli olan madde budur. Güncel kalmak… Özellikle wordpress’in kendisini ve pluginlerinizi güncel tutmaya özen gösterin. Çünkü wordpressin çıkan her versiyonunda bir önceki versiyonda tespit edilen açıklar, kötü yönler, tehtidler kapatılır, düzeltilir ve siz güncellemeleri yok sayarsanız, bu açıklarla yaşamaya devam edersiniz. En etkili güvenlik önlemi wordpressi güncellemektir. Çoğumuz temam bozulur, pluginim çalışmaz diye, admin paneline gelen güncelleme uyarılarını ignore ediyoruz, ama etmemek lazım. Dediğim gibi sonradan pişman olmak istemiyorsanız, buna özen gösterin…

Sonuç

Sonuç olarak dikkat etmek istediğim bir nokta var. Yukarıdaki tüm maddeler birşeyleri gizlemeye yönelik. Çünkü güvenliğin temeli bu… gizlemek… 2 bilinmeyenli bir denklemi çözmek kolaydır ama siz bişeyleri gizleyerek bilinmeyen sayısını 6-7’ye çıkarırsanız çözülemez denklemler üretebilirsiniz… Yani “bunu görseler nolcak ki yaa” demeyin, mümkün olduğunca fazla veriyi gizlemeye çalışın, böylece daha güvenli bir siteniz olur (: