Takip et

Firejail ile WordPress Kurulumunu Güvenli Bir Ortamda Yapılandırma

Firejail ile WordPress Kurulumunu Güvenli Bir Ortamda Yapılandırma Giriş WordPress, dünya genelinde milyonlarca web sitesine güç veren, kullan

Firejail ile WordPress Kurulumunu Güvenli Bir Ortamda Yapılandırma

Giriş

WordPress, dünya genelinde milyonlarca web sitesine güç veren, kullanımı kolay ve son derece esnek bir içerik yönetim sistemidir (CMS). Bloglardan e-ticaret sitelerine, kurumsal web sayfalarından portfolyolara kadar geniş bir yelpazede kullanılabilen bu platform, popülerliğinin getirdiği bazı güvenlik risklerini de beraberinde taşır. Açık kaynak kodlu yapısı, geniş eklenti ve tema ekosistemi, kötü niyetli saldırganlar için potansiyel bir hedef haline gelmesine neden olabilir. Bir WordPress kurulumunda ortaya çıkabilecek bir güvenlik açığı, yalnızca web sitesinin kendisini değil, aynı zamanda sunucunun tamamını ve diğer uygulamaları da tehlikeye atabilir. Bu nedenle, WordPress kurulumlarını izole edilmiş ve güvenli bir ortamda çalıştırmak, olası saldırıların etkisini sınırlamak açısından kritik öneme sahiptir.

Bu makalede, bir Linux güvenlik sandbox programı olan Firejail kullanarak WordPress kurulumunu nasıl “jail” (hapsedilmiş) bir ortamda çalıştıracağımızı adım adım inceleyeceğiz. Firejail, uygulamaların sistem kaynaklarına erişimini kısıtlayarak, olası bir güvenlik ihlalinin sistemin geneline yayılmasını engeller. Bu yöntem, WordPress’in çalışması için gerekli olan tüm bileşenleri (web sunucusu, PHP-FPM, veritabanı istemcisi) belirli sınırlar içinde tutarak, güvenlik duruşunuzu önemli ölçüde güçlendirecektir. Amacımız, WordPress’in performansından ödün vermeden, maksimum güvenlik sağlamaktır.

Firejail Nedir ve Neden Kullanmalıyız?

Firejail, Linux sistemlerde uygulamaları izole etmek için tasarlanmış, ücretsiz ve açık kaynaklı bir SUID programıdır. Temel olarak, Linux çekirdeğinin sağladığı ad alanları (namespaces), seccomp-bpf filtreleri ve chroot mekanizmalarını kullanarak bir uygulama için güvenli bir “sandbox” ortamı oluşturur. Bu sandbox, uygulamanın yalnızca kendisine izin verilen dosya sistemine, ağ kaynaklarına ve sistem çağrılarına erişmesine olanak tanır.

Firejail’in Çalışma Mantığı ve Avantajları

Firejail, her bir uygulamanın kendi izole edilmiş ortamında çalışmasını sağlayarak aşağıdaki temel avantajları sunar:

* İzolasyon (Sandbox): Uygulamalar, sistemin geri kalanından tamamen izole edilir. Bir uygulamanın güvenlik açığı bulunsa bile, bu açığın etkisi sandbox’ın dışına çıkamaz ve diğer uygulamaları veya sistemin çekirdek bileşenlerini etkileyemez.
* Saldırı Yüzeyini Azaltma: Uygulamanın erişebileceği dosya sistemi, ağ ve sistem çağrıları kısıtlandığı için, saldırganların kullanabileceği potansiyel zayıflıkların sayısı önemli ölçüde azalır.
* Veri Koruma: Hassas verilerin bulunduğu dizinlere (örneğin /home, /etc) uygulamanın erişimi engellenerek, bu verilerin kötü niyetli yazılımlar tarafından ele geçirilmesi riski minimize edilir.
* Kaynak Kontrolü: Uygulamanın kullanabileceği CPU, bellek gibi kaynaklar üzerinde de kısıtlamalar getirilebilir, bu da hizmet reddi (DoS) saldırılarına karşı bir miktar koruma sağlar.
* Kullanım Kolaylığı: Firejail, önceden tanımlanmış birçok uygulama profiliyle birlikte gelir ve yeni profiller oluşturmak veya mevcutları özelleştirmek oldukça kolaydır.

Diğer İzolasyon Yöntemleriyle Karşılaştırma

Firejail, izolasyon sağlayan tek araç değildir, ancak belirli senaryolarda benzersiz avantajlar sunar:

* Sanal Makineler (VMs): Sanal makineler, en güçlü izolasyon yöntemlerinden biridir çünkü her VM kendi işletim sistemine sahiptir. Ancak, kaynak tüketimi (CPU, RAM, disk) oldukça yüksektir ve başlatma süreleri uzundur. WordPress gibi nispeten hafif bir uygulama için aşırıya kaçan bir çözüm olabilir.
* Docker/Kapsayıcılar: Docker gibi kapsayıcı teknolojileri, VM’lere göre daha hafif ve hızlıdır. Uygulamaları kendi bağımsız ortamlarında çalıştırmak için işletim sistemi düzeyinde izolasyon sağlarlar. WordPress’i Docker içinde çalıştırmak yaygın ve etkili bir yöntemdir. Ancak, Firejail, bir sistemdeki mevcut uygulamaları kapsayıcıya dönüştürmeden, doğrudan çalıştıkları ortamda izole etme yeteneği sunar. Ayrıca, Firejail’in güvenlik modeli, temel olarak çekirdek düzeyindeki mekanizmalara daha doğrudan odaklanır ve bazı durumlarda daha granüler kontrol sağlayabilir.
* chroot: chroot, bir uygulamanın dosya sistemini belirli bir dizinle sınırlayan daha basit bir mekanizmadır. Ancak, ağ erişimi, sistem çağrıları ve diğer kaynaklar üzerinde kontrol sağlamaz. Firejail, chroot’un sunduğu izolasyonun çok ötesine geçer.

WordPress gibi tek bir uygulamanın veya bir servis grubunun (PHP-FPM, MySQL istemcisi) daha hafif ve entegre bir şekilde izole edilmesi gerektiğinde, Firejail, VM’ler ve Docker’a göre daha az kaynak tüketimiyle güçlü bir güvenlik katmanı sunar. Özellikle mevcut bir sunucu üzerinde çalışan WordPress’i ek bir sanallaştırma katmanı olmadan güvenli hale getirmek istiyorsanız ideal bir çözümdür.

Ön Koşullar ve Gerekli Bileşenler

WordPress’i Firejail ile güvenli bir şekilde kurmak için belirli ön koşulların ve yazılım bileşenlerinin sisteminizde hazır olması gerekir. Bu makalede Ubuntu/Debian tabanlı bir Linux dağıtımı kullanıldığını varsayacağız.

1. Linux İşletim Sistemi

* Ubuntu, Debian veya bu dağıtımlardan türetilmiş (Linux Mint gibi) herhangi bir güncel Linux sürümü.
* Sistemde sudo yetkisine sahip bir kullanıcı.

2. Web Sunucusu

WordPress dinamik bir web sitesi olduğu için bir web sunucusuna ihtiyaç duyar.
* Apache2: Geniş özellik setine sahip, yaygın olarak kullanılan bir web sunucusu.
* Nginx: Daha hafif ve performans odaklı, genellikle PHP-FPM ile birlikte kullanılır.
Bu makalede Apache2 üzerinde duracağız, ancak Nginx için de benzer adımlar uygulanabilir.

3. Veritabanı Sunucusu

WordPress, içeriklerini ve ayarlarını depolamak için bir veritabanına ihtiyaç duyar.
* MySQL: Popüler açık kaynak veritabanı yönetim sistemi.
* MariaDB: MySQL’in topluluk tarafından geliştirilen, uyumlu bir çatalı (fork). Genellikle MySQL yerine tercih edilir.

4. PHP ve Gerekli Modülleri

WordPress, PHP ile yazılmıştır ve çalışmak için belirli PHP sürümüne ve çeşitli modüllere ihtiyaç duyar.
* PHP 7.4 veya üzeri: WordPress’in önerdiği ve desteklediği güncel bir PHP sürümü.
* PHP-FPM: Web sunucusu ile PHP arasındaki iletişimi sağlayan FastCGI Process Manager. Özellikle Nginx ile kullanılır, ancak Apache’de de mod_proxy_fcgi ile kullanılabilir ve genellikle daha iyi performans sunar.
* Gerekli PHP Modülleri:
* php-mysql (veya php-mysqli): Veritabanı bağlantısı için.
* php-curl: Bazı WordPress eklentileri ve harici servislerle iletişim için.
* php-gd: Görsel işleme (resim boyutlandırma, thumbnail oluşturma) için.
* php-mbstring: Çok baytlı karakter dizileri (UTF-8) için.
* php-xml: XML işleme için.
* php-zip: Tema ve eklenti yüklemeleri için.
* php-intl: Uluslararasılaştırma için.
* php-soap: Bazı eklentiler ve API entegrasyonları için.

5. Firejail Kurulumu

* Sisteminizde Firejail’in kurulu olması gerekmektedir. Kurulum adımları aşağıda detaylandırılacaktır.

6. WordPress Dosyaları

* WordPress’in en güncel sürümünün .zip veya .tar.gz arşivi.

Bu bileşenlerin tümü, Firejail kurulumuna başlamadan önce sisteminizde düzgün bir şekilde kurulmuş ve yapılandırılmış olmalıdır.

Firejail Kurulumu

Firejail’in kurulumu, çoğu Linux dağıtımında paket yöneticisi aracılığıyla oldukça basittir.

Ubuntu/Debian Üzerinde Kurulum

Öncelikle sistem paket listesini güncelleyelim:

sudo apt update

Ardından Firejail’i kuralım:

sudo apt install firejail firejail-profiles

firejail-profiles paketi, yaygın uygulamalar için önceden tanımlanmış birçok Firejail profilini içerir. Bu profiller, kendi özel profilimizi oluştururken iyi bir başlangıç noktası veya referans olabilir.

Kurulumun Doğrulanması

Kurulumun başarılı olup olmadığını kontrol etmek için Firejail’in sürümünü sorgulayabiliriz:

firejail --version

Ayrıca, herhangi bir komutu Firejail içinde çalıştırarak temel işlevselliğini test edebiliriz:

firejail firefox

Bu komut, Firefox tarayıcısını izole edilmiş bir ortamda başlatacaktır. Eğer Firefox başarıyla açılırsa, Firejail’in temel kurulumu tamamlanmış demektir.

WordPress Ortamının Hazırlanması

Firejail ile WordPress’i güvenli hale getirmeden önce, WordPress’in çalışması için gerekli olan tüm altyapıyı kurmamız ve yapılandırmamız gerekiyor.

1. Web Sunucusu Kurulumu (Apache2)

Apache2’yi kuralım:

sudo apt install apache2

Apache’nin PHP-FPM ile çalışabilmesi için gerekli modülleri etkinleştirelim:

sudo a2enmod proxy_fcgi setenvif
sudo a2enconf phpX.X-fpm # X.X yerine PHP sürümünüzü yazın, örn: php7.4-fpm
sudo systemctl restart apache2

Varsayılan Apache yapılandırması genellikle /var/www/html dizinini kullanır. WordPress için özel bir dizin oluşturalım:

sudo mkdir -p /var/www/wordpress
sudo chown -R www-data:www-data /var/www/wordpress
sudo chmod -R 755 /var/www/wordpress

WordPress için bir Apache Virtual Host dosyası oluşturalım. Örneğin, /etc/apache2/sites-available/wordpress.conf:


    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/wordpress
    ServerName your_domain_or_ip

    
        Options Indexes FollowSymLinks
        AllowOverride All
        Require all granted
    

    ErrorLog ${APACHE_LOG_DIR}/wordpress_error.log
    CustomLog ${APACHE_LOG_DIR}/wordpress_access.log combined

    
        # Apache 2.4.10+ için PHP-FPM'i kullan
        SetHandler "proxy:unix:/run/php/phpX.X-fpm.sock|fcgi://localhost/"
    

your_domain_or_ip kısmını kendi alan adınız veya sunucunuzun IP adresi ile değiştirin. phpX.X-fpm.sock kısmını da kurulu PHP sürümünüze göre güncelleyin (örn: php7.4-fpm.sock).
Virtual Host’u etkinleştirip Apache’yi yeniden başlatalım:

sudo a2ensite wordpress.conf
sudo a2dissite 000-default.conf # Varsayılan siteyi devre dışı bırakabiliriz
sudo systemctl restart apache2

2. PHP Kurulumu ve Modülleri

PHP ve gerekli modülleri kuralım (örnek olarak PHP 7.4):

sudo apt install php7.4 php7.4-fpm php7.4-mysql php7.4-gd php7.4-curl php7.4-mbstring php7.4-xml php7.4-zip php7.4-intl php7.4-soap

PHP-FPM servisini başlatalım ve etkinleştirelim:

sudo systemctl start php7.4-fpm
sudo systemctl enable php7.4-fpm

PHP yapılandırması genellikle /etc/php/X.X/fpm/php.ini dosyasında bulunur. Güvenlik ve performans için bazı ayarları kontrol etmek isteyebilirsiniz (örn: upload_max_filesize, post_max_size, memory_limit, max_execution_time).

3. Veritabanı Sunucusu Kurulumu (MariaDB)

MariaDB’yi kuralım:

sudo apt install mariadb-server

MariaDB kurulumunu güvenli hale getirelim:

sudo mysql_secure_installation

Bu komut, root parolasını ayarlamanıza, anonim kullanıcıları kaldırmanıza, root uzaktan girişini devre dışı bırakmanıza ve test veritabanını silmenize olanak tanır.

4. WordPress için Veritabanı ve Kullanıcı Oluşturma

MariaDB’ye root kullanıcısı olarak bağlanalım:

sudo mysql -u root -p

Aşağıdaki SQL komutlarını çalıştırarak WordPress için bir veritabanı ve kullanıcı oluşturalım. your_db_name, your_db_user ve your_db_password kısımlarını kendi seçtiğiniz güvenli değerlerle değiştirin:

CREATE DATABASE your_db_name CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'your_db_user'@'localhost' IDENTIFIED BY 'your_db_password';
GRANT ALL PRIVILEGES ON your_db_name.* TO 'your_db_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

5. WordPress Dosyalarını İndirme ve Yapılandırma

WordPress’in en güncel sürümünü indirelim:

cd /tmp
wget https://wordpress.org/latest.tar.gz
tar -xzvf latest.tar.gz

Çıkarılan WordPress dosyalarını web kök dizinimize taşıyalım:

sudo mv wordpress/* /var/www/wordpress/

WordPress’in yapılandırma dosyasını oluşturalım:

sudo cp /var/www/wordpress/wp-config-sample.php /var/www/wordpress/wp-config.php

wp-config.php dosyasını düzenleyerek veritabanı bilgilerini girelim:

sudo nano /var/www/wordpress/wp-config.php

Aşağıdaki satırları kendi veritabanı bilgilerinizle güncelleyin:

define( 'DB_NAME', 'your_db_name' );
define( 'DB_USER', 'your_db_user' );
define( 'DB_PASSWORD', 'your_db_password' );
define( 'DB_HOST', 'localhost' ); // MariaDB aynı sunucuda olduğu için localhost

WordPress güvenlik anahtarlarını oluşturmak için https://api.wordpress.org/secret-key/1.1/salt/ adresinden yeni anahtarlar alıp wp-config.php dosyasına yapıştırın.
Son olarak, WordPress dosyalarının sahipliğini ve izinlerini ayarlayalım:

sudo chown -R www-data:www-data /var/www/wordpress
sudo find /var/www/wordpress -type d -exec chmod 755 {} \;
sudo find /var/www/wordpress -type f -exec chmod 644 {} \;

Bu adımlardan sonra, web tarayıcınızdan sunucunuzun IP adresini veya alan adını ziyaret ederek WordPress kurulum sihirbazını tamamlayabilirsiniz. Her şey yolundaysa, WordPress başarıyla kurulmuş olmalıdır. Şimdi bu kurulumu Firejail ile güvenli hale getirme zamanı.

Firejail Profili Oluşturma ve Yapılandırma

Firejail, uygulamaların nasıl izole edileceğini tanımlayan profil dosyalarını kullanır. Bu profiller, uygulamanın hangi dosyalara, ağ kaynaklarına ve sistem çağrılarına erişebileceğini belirler.

Firejail Profil Mekanizması

Firejail profilleri genellikle iki ana konumda bulunur:
* /etc/firejail/: Sistem genelindeki profiller. Bu profiller genellikle paket yöneticisi tarafından sağlanır.
* ~/.config/firejail/: Kullanıcıya özel profiller. Kullanıcılar kendi profillerini buraya yerleştirebilir.
* Ayrıca, herhangi bir dizinde appname.profile adıyla bir profil oluşturup firejail --profile=./appname.profile komutuyla da kullanabilirsiniz.

WordPress için, PHP-FPM servisini izole edeceğimizden, sistem genelinde bir profil oluşturmak en mantıklı yaklaşımdır.

WordPress için Özel Bir Profil Oluşturma (php-fpm.profile)

WordPress’in PHP-FPM ile çalıştığını varsayarsak, Firejail profilini phpX.X-fpm servisi için oluşturacağız. Bu, Apache/Nginx’in PHP-FPM soketi aracılığıyla Firejail içindeki PHP-FPM sürecine bağlanacağı anlamına gelir.

Yeni bir profil dosyası oluşturalım:

sudo nano /etc/firejail/phpX.X-fpm.profile # X.X yerine PHP sürümünüzü yazın

Şimdi bu profil dosyasının içeriğini adım adım oluşturalım. Temel prensip, “en az ayrıcalık” (least privilege) ilkesini uygulamaktır. Yani, PHP-FPM’in çalışması için kesinlikle gerekli olan her şeye erişimine izin verilecek, geri kalan her şey engellenecektir.

# phpX.X-fpm.profile

Bu profil, WordPress'i çalıştıran PHP-FPM sürecini izole etmek için tasarlanmıştır.

En az ayrıcalık ilkesini benimser.

Temel Güvenlik Ayarları

----------------------------------------------------------------------------------

Uygulamanın kendi özel /dev dizinini kullanmasını sağlar.

private-dev

Uygulamanın kendi özel /tmp dizinini kullanmasını sağlar.

private-tmp

Uygulamanın kendi özel /etc dizinini kullanmasını sağlar.

Sadece gerekli yapılandırma dosyalarına erişim verilir.

private-etc hosts,resolv.conf,php/X.X/fpm/php.ini,php/X.X/cli/php.ini,php/X.X/mods-available

Uygulamanın kendi özel önbellek dizinini kullanmasını sağlar.

private-cache

Uygulamanın çalışması için gerekli ikili dosyaları belirtir.

Bu ikili dosyalar sandbox içinde kopyalanır ve orijinal sistemdeki dosyalara erişim engellenir.

private-bin php-fpmX.X,phpX.X,php

Uygulamanın ana dosya sisteminin (/) sadece okunabilir olmasını sağlar.

Bu, uygulamanın sistem dosyalarını değiştirmesini engeller.

read-only /

Kök dizin dışındaki tüm dizinlere erişimi engeller.

Yalnızca açıkça izin verilen dizinlere erişilebilir.

disable-mnt

Uygulamanın sistemdeki diğer kullanıcıların IPC kaynaklarına erişimini engeller.

ipc-namespace

Uygulamanın yeni ayrıcalıklar kazanmasını engeller (örneğin setuid bitli programları çalıştırmak).

no-new-privs

Uygulamanın yeteneklerini (capabilities) düşürür.

Varsayılan olarak tüm yetenekler düşürülür, yalnızca gerekli olanlar bırakılır.

WordPress PHP-FPM için genellikle özel yeteneklere ihtiyaç duyulmaz.

caps.drop all

Tüm ağ erişimini engeller ve sadece belirli bir köprü (bridge) üzerinden iletişim kurmasına izin verir.

Bu, PHP-FPM'in veritabanı sunucusu ve harici API'lerle iletişim kurması için gereklidir.

Eğer MySQL/MariaDB aynı makinede ise, localhost'a erişim için net none yerine net filter veya net bridge kullanın.

Veya sadece net komutunu kullanarak varsayılan ağ erişimine izin verin ve firewall ile kısıtlayın.

En güvenli yol, sadece gerekli portlara ve IP adreslerine izin veren bir net filter veya net bridge kullanmaktır.

Bu örnekte, dış dünyaya erişim için izin veriyoruz, ancak daha sonra UFW/iptables ile kısıtlayabiliriz.

Eğer sadece localhost'a erişim gerekiyorsa:

net none

Ancak WordPress dış API'lere erişebilir, bu yüzden net filter veya net bridge daha uygun olabilir.

Veya basitçe:

net

Ardından UFW/iptables ile kısıtlamalar yapılabilir.

Seccomp-bpf filtrelerini etkinleştirir. Bu, uygulamanın yapabileceği sistem çağrılarını kısıtlar.

Varsayılan seccomp filtresi genellikle yeterlidir, ancak daha sıkı filtreler tanımlanabilir.

seccomp

Uygulamanın makine kimliğine (machine-id) erişimini engeller.

machine-id

İzin Verilen Dizinler (Whitelisting)

----------------------------------------------------------------------------------

WordPress dosyalarının bulunduğu dizine okuma ve yazma erişimi sağlar.

whitelist /var/www/wordpress

PHP-FPM soketinin bulunduğu dizine erişim sağlar.

Bu, web sunucusunun PHP-FPM ile iletişim kurması için gereklidir.

whitelist /run/php

MySQL/MariaDB soketinin bulunduğu dizine erişim sağlar.

Bu, WordPress'in veritabanı sunucusu ile iletişim kurması için gereklidir.

whitelist /run/mysqld

Eğer WordPress log dosyaları yazıyorsa (örneğin debug logları), bu dizinlere erişim izni verin.

Genellikle web sunucusu logları ayrı tutulur, ancak WordPress'in kendi logları olabilir.

whitelist /var/log/wordpress

WordPress'in yüklediği resimler, eklentiler ve temalar için yazılabilir olması gereken dizin.

Bu dizinde çalıştırılabilir dosya olmamalıdır, bu yüzden noexec kısıtlaması kaldırılabilir.

ignore noexec /var/www/wordpress/wp-content/uploads whitelist /var/www/wordpress/wp-content/uploads

Eklentilerin ve temaların geçici olarak indirildiği ve yüklendiği dizinler.

Bu dizinlere yazma erişimi gereklidir.

whitelist /var/www/wordpress/wp-content/plugins whitelist /var/www/wordpress/wp-content/themes whitelist /var/www/wordpress/wp-content/upgrade

Kara Liste (Blacklisting) - Zaten read-only / ve disable-mnt ile çoğu engellenir,

ancak ek olarak belirtmek isteyebilirsiniz.

----------------------------------------------------------------------------------

Kullanıcı ev dizinlerine erişimi engeller.

blacklist /home

Kök dizinindeki diğer hassas dizinlere erişimi engeller.

blacklist /boot blacklist /media blacklist /mnt blacklist /srv blacklist /root blacklist /opt blacklist /usr/local/bin blacklist /usr/local/sbin

Ek Ağ Kısıtlamaları (Opsiyonel)

----------------------------------------------------------------------------------

Eğer sadece belirli portlara veya IP'lere izin vermek istiyorsanız:

net filter

net none

no-internet # İnternet erişimini tamamen engeller (WordPress için uygun değil)

Eğer sadece localhost'a erişim gerekiyorsa (veritabanı için):

net none

# Ardından localhost'a erişim için bridge kullanmak gerekebilir

# Veya mysql client için ayrı bir profil oluşturulabilir.

# Bu senaryoda genellikle PHP-FPM'in dışarıya da bağlanması gerekir.

Daha sıkı seccomp filtreleri (gelişmiş kullanıcılar için)

----------------------------------------------------------------------------------

seccomp.drop @chroot,@mount,@swap,@reboot

Yukarıdaki profil, PHP-FPM sürecinin minimum ayrıcalıklarla çalışmasını sağlar. X.X yerine PHP sürümünüzü (örn. 7.4) yazmayı unutmayın. Özellikle private-etc ve private-bin kısımları, Firejail’in sandbox içine kopyalayacağı ve uygulamanın kullanacağı dosyaları belirtir. Bu, uygulamanın sistemdeki orijinal dosyaları değiştirmesini engeller.

Önemli Notlar:
* Ağ Erişimi (net): WordPress genellikle dış API’lere (örneğin Gravatar, eklenti güncellemeleri, harici servisler) erişime ihtiyaç duyar. Bu nedenle net none kullanmak çoğu durumda uygun değildir. net komutunu kullanmak ve ağ erişimini UFW/iptables ile kısıtlamak daha esnektir. Eğer MySQL/MariaDB aynı sunucuda ve localhost üzerinden iletişim kuruyorsa, PHP-FPM’in localhost‘a erişebilmesi için net komutu yeterlidir.
* ignore noexec: wp-content/uploads dizini, kullanıcıların yüklediği medya dosyalarını içerir. Bazı eklentiler bu dizinde PHP dosyaları çalıştırabilir (ki bu bir güvenlik açığıdır), ancak genel olarak burada çalıştırılabilir dosya olmaması gerekir. Ancak, Firejail’in noexec kuralı, bu dizinde herhangi bir dosyanın çalıştırılmasını engeller. Eğer bir eklenti bu dizinde bir PHP dosyasını çalıştırmak zorunda kalıyorsa (ki bu nadir ve tehlikeli bir durumdur), ignore noexec kuralını kullanmanız gerekebilir. Güvenlik için, noexec kuralını mümkün olduğunca geniş tutmak ve yalnızca kesinlikle gerekli olan yerlerde kaldırmak en iyisidir.
* whitelist ve blacklist: Bu kurallar, uygulamanın dosya sistemine erişimini kontrol etmek için kullanılır. whitelist ile izin verilenler dışında her şey engellenir. blacklist ise belirli dizinlere erişimi açıkça engeller. read-only / ve disable-mnt ile zaten çoğu şey engellendiği için blacklist kullanımı daha çok ek bir güvenlik katmanı sağlar.

Profilin Test Edilmesi

Profilinizi oluşturduktan sonra, PHP yorumlayıcısını bu profil içinde manuel olarak çalıştırmayı deneyerek test edebilirsiniz:

sudo firejail --profile=/etc/firejail/phpX.X-fpm.profile /usr/bin/phpX.X -v

Eğer PHP sürüm bilgisi doğru bir şekilde görüntülenirse, profilin temel olarak çalıştığı anlamına gelir. Daha kapsamlı testler için, sandbox içinde bir phpinfo() dosyası oluşturup erişmeyi deneyebilirsiniz.

WordPress’i Firejail ile Çalıştırma

WordPress’i Firejail içinde çalıştırmanın en etkili yolu, PHP-FPM servisini Firejail ile sarmalamaktır. Bu, PHP-FPM’in her zaman izole edilmiş bir ortamda çalışmasını sağlar ve web sunucusu (Apache/Nginx) ile olan iletişimini etkilemez.

PHP-FPM Servisini Firejail İçinde Çalıştırma

systemd servislerini Firejail ile sarmalamak için servis dosyalarında değişiklik yapmamız gerekir. Bu, systemd override mekanizması kullanılarak en güvenli şekilde yapılır.

1. PHP-FPM Servisini Durdurun:

sudo systemctl stop phpX.X-fpm

2. systemd Override Dizini Oluşturun:

sudo mkdir -p /etc/systemd/system/phpX.X-fpm.service.d/

(X.X yerine PHP sürümünüzü yazın, örn: php7.4-fpm.service.d/)

3. Override Yapılandırma Dosyası Oluşturun:

sudo nano /etc/systemd/system/phpX.X-fpm.service.d/firejail.conf

Bu dosyanın içine aşağıdaki içeriği ekleyin:

[Service]
    ExecStart=
    ExecStart=/usr/bin/firejail --profile=/etc/firejail/phpX.X-fpm.profile /usr/sbin/php-fpmX.X --nodaemonize --fpm-config /etc/php/X.X/fpm/php-fpm.conf

* ExecStart= satırı, orijinal ExecStart komutunu sıfırlar.
* İkinci ExecStart satırı, PHP-FPM’i Firejail içinde, oluşturduğumuz profil ile başlatır.
* --nodaemonize bayrağı, systemd‘nin PHP-FPM’i bir arka plan süreci olarak değil, ön planda çalıştırmasını sağlar, böylece systemd süreci doğru bir şekilde izleyebilir.
* --fpm-config bayrağı, PHP-FPM’in kullanacağı yapılandırma dosyasını belirtir.

4. systemd Yapılandırmasını Yeniden Yükleyin ve Servisi Başlatın:

sudo systemctl daemon-reload
    sudo systemctl start phpX.X-fpm
    sudo systemctl enable phpX.X-fpm # Başlangıçta otomatik başlaması için

5. Durumu Kontrol Edin:

sudo systemctl status phpX.X-fpm

Çıktıda PHP-FPM servisinin Firejail içinde çalıştığını gösteren bir satır görmelisiniz. Ayrıca, Firejail’in aktif süreçlerini kontrol edebilirsiniz:

firejail --list

Bu komut, Firejail tarafından çalıştırılan tüm uygulamaları listeler ve PHP-FPM sürecinin orada görünmesi gerekir.

Bu yapılandırma ile, WordPress’in tüm PHP işlemleri artık Firejail tarafından izole edilmiş bir ortamda çalışacaktır. Bu, WordPress’te bir güvenlik açığı bulunsa bile, bu açığın yalnızca Firejail sandbox’ı içinde kalacağı ve sunucunun geri kalanını etkilemeyeceği anlamına gelir.

MariaDB Sunucusunu Firejail’e Alma (İsteğe Bağlı)

MySQL/MariaDB sunucusunu da Firejail içine almak teorik olarak mümkündür, ancak pratik olarak daha karmaşıktır ve genellikle önerilmez. Veritabanı sunucuları genellikle kendi güvenlik mekanizmalarına sahiptir ve ayrı bir sunucuda veya Docker kapsayıcısı gibi daha güçlü izolasyon araçlarında çalıştırılmaları daha yaygındır.

Eğer yine de denemek isterseniz, MariaDB servisi için de benzer bir Firejail profili oluşturmanız ve systemd override kullanarak servisi Firejail içinde başlatmanız gerekir. Ancak, veritabanı dosyalarının ve soketlerinin erişimi gibi konularda çok daha dikkatli olmanız gerekecektir. Bu makale WordPress’in PHP katmanının izolasyonuna odaklandığı için MariaDB’nin Firejail ile jailing işlemi detaylandırılmayacaktır.

Ek Güvenlik İpuçları ve En İyi Uygulamalar

Firejail ile WordPress’i izole etmek önemli bir adımdır, ancak genel güvenlik duruşunuzu güçlendirmek için ek önlemler almanız da önemlidir.

* Firejail Profillerini Güncel Tutma: Firejail profillerini düzenli olarak gözden geçirin ve WordPress’in veya eklentilerin yeni ihtiyaçları doğrultusunda güncelleyin. Bir eklenti yeni bir dizine yazma erişimi gerektiriyorsa, profilinizi güncellemeniz gerekebilir.
* En Az Ayrıcalık İlkesi: Her zaman en az ayrıcalık ilkesini uygulayın. Bir uygulamaya yalnızca çalışması için kesinlikle gerekli olan izinleri verin. whitelist kullanırken spesifik olun, genel whitelist‘lerden kaçının.
* wp-content Dizinini Kontrol Etme: wp-content dizini, eklentiler, temalar ve yüklemeler gibi dinamik içerikleri barındırır. Bu dizindeki uploads hariç diğer alt dizinlerin (özellikle plugins ve themes) yazma izinlerini yalnızca güncelleme veya kurulum anında www-data kullanıcısına verip, diğer zamanlarda salt okunur hale getirmek ek güvenlik sağlayabilir. Ancak bu, yönetimsel olarak zorlayıcı olabilir.
* Firewall Kullanımı (UFW/iptables): Sunucunuzda bir güvenlik duvarı (örn. UFW) kullanarak yalnızca gerekli portlara (HTTP/HTTPS için 80/443, SSH için 22) gelen bağlantılara izin verin. Giden bağlantıları da kısıtlayarak WordPress’in yalnızca güvenilir harici servislerle iletişim kurmasını sağlayabilirsiniz.

sudo ufw allow 80/tcp
    sudo ufw allow 443/tcp
    sudo ufw allow 22/tcp
    sudo ufw enable

* Düzenli Yedeklemeler: Verilerinizin düzenli yedeklerini alın. Bir güvenlik ihlali durumunda, yedeklerinizden geri dönebilmek kritik öneme sahiptir.
* WordPress Güncellemeleri: WordPress çekirdeğini, temalarını ve eklentilerini her zaman güncel tutun. Güvenlik açıkları genellikle güncellemelerle kapatılır.
* Güvenlik Eklentileri: Wordfence, Sucuri gibi WordPress güvenlik eklentileri kullanmak, kötü amaçlı yazılımları tarama, güvenlik duvarı kuralları uygulama ve giriş denemelerini sınırlama gibi ek koruma katmanları sağlayabilir.
* SELinux/AppArmor: Firejail, Linux’un güvenlik mekanizmalarını kullanır. SELinux veya AppArmor gibi Mandatory Access Control (MAC) sistemleri ile birlikte kullanılabilir, ancak genellikle Firejail’in sağladığı izolasyon çoğu senaryo için yeterli olacaktır. Çakışmaları önlemek için dikkatli yapılandırma gerektirir.
* SSL/TLS Kullanımı: Web sitenizi HTTPS üzerinden yayınlamak için Let’s Encrypt gibi bir hizmetle ücretsiz SSL/TLS sertifikası kullanın. Bu, kullanıcılarınız ve sunucunuz arasındaki iletişimi şifreler.

Sık Karşılaşılan Sorunlar ve Çözümleri

Firejail ile WordPress kurulumu yaparken bazı yaygın sorunlarla karşılaşabilirsiniz. İşte bunlardan bazıları ve olası çözümleri:

* Erişim Reddedildi Hataları:
* Sorun: WordPress bir dosyaya yazmaya çalışırken veya bir dizine erişirken “Permission Denied” (Erişim Reddedildi) hatası alıyor.
* Çözüm: Firejail profilinizi kontrol edin. Eksik whitelist girdileri veya yanlış read-only ayarları bu tür sorunlara neden olabilir. Özellikle wp-content/uploads, wp-content/plugins, wp-content/themes gibi yazılabilir olması gereken dizinlerin doğru şekilde whitelist‘e eklendiğinden emin olun.
* Örnek: Eklenti yüklerken hata alıyorsanız, wp-content/upgrade dizinine yazma izni eklemeniz gerekebilir.

whitelist /var/www/wordpress/wp-content/upgrade

* Performans Düşüşü:
* Sorun: WordPress Firejail içinde yavaş çalışıyor.
* Çözüm: Genellikle Firejail’in kendisi önemli bir performans düşüşüne neden olmaz. Sorun genellikle yanlış yapılandırmadan veya yetersiz kaynaklardan kaynaklanır.
* PHP-FPM yapılandırmasını kontrol edin (pm.max_children, pm.start_servers vb.).
* Veritabanı sunucusunun performansını kontrol edin.
* Sunucunun genel CPU, RAM ve disk I/O kullanımını izleyin.
* Firejail profilindeki çok sıkı seccomp filtreleri veya gereksiz private-bin kopyalamaları performansı etkileyebilir. Mümkün olduğunca basit tutmaya çalışın.

* Eklenti/Tema Kurulum Sorunları:
* Sorun: Yeni eklenti veya tema yüklenirken veya güncellenirken hatalar alınıyor.
* Çözüm: Bu genellikle yazma izinleriyle ilgilidir. wp-content/plugins, wp-content/themes ve wp-content/upgrade dizinlerinin Firejail profilinde whitelist‘e eklendiğinden ve www-data kullanıcısının bu dizinlere yazma izni olduğundan emin olun.

sudo chown -R www-data:www-data /var/www/wordpress

* Veritabanı Bağlantı Sorunları:
* Sorun: WordPress veritabanına bağlanamıyor.
* Çözüm:
* wp-config.php dosyasındaki veritabanı bilgilerinin (kullanıcı adı, parola, veritabanı adı, host) doğru olduğundan emin olun.
* MariaDB/MySQL servisinin çalıştığından emin olun.
* Firejail profilinde mysql veya mariadb istemcisine veya soketine erişim izni olduğundan emin olun.

whitelist /run/mysqld

Eğer localhost yerine bir IP adresi ile bağlanıyorsanız, Firejail’in ağ ayarlarının buna izin verdiğinden emin olun (örn. net komutu).

* Firejail Profilini Hata Ayıklama:
* Sorun: Profilin neden doğru çalışmadığını anlamakta zorlanıyorum.
* Çözüm: Firejail’i hata ayıklama moduyla çalıştırın.

sudo firejail --debug --profile=/etc/firejail/phpX.X-fpm.profile /usr/sbin/php-fpmX.X --nodaemonize --fpm-config /etc/php/X.X/fpm/php-fpm.conf

Bu, Firejail’in hangi dosyaları kopyaladığını, hangi kuralları uyguladığını ve hangi sistem çağrılarının engellendiğini gösteren ayrıntılı çıktılar sağlayacaktır. Bu çıktılar, eksik whitelist‘leri veya diğer yapılandırma hatalarını tespit etmenize yardımcı olabilir.

Unutmayın ki Firejail profilleri hassas yapılandırmalardır. Herhangi bir değişiklik yaptıktan sonra servisi yeniden başlatmanız ve işlevselliği test etmeniz önemlidir.

Sonuç

WordPress’i Firejail ile güvenli bir ortamda yapılandırmak, web sitenizin güvenlik duruşunu önemli ölçüde güçlendiren proaktif bir yaklaşımdır. Bu yöntem, olası bir güvenlik açığının etkisini sınırlayarak, saldırganların sunucunuzun diğer bölümlerine erişmesini engeller. Firejail’in Linux çekirdeğinin sağladığı güçlü izolasyon mekanizmalarını kullanması sayesinde, WordPress’i hafif ve etkili bir sandbox içinde çalıştırmak mümkün hale gelir.

Bu makalede adım adım Firejail’in kurulumundan, WordPress ortamının hazırlanmasına, özel bir Firejail profilinin oluşturulmasına ve PHP-FPM servisini Firejail ile entegre etmeye kadar tüm süreci detaylı bir şekilde ele aldık. Ayrıca, ek güvenlik ipuçları ve sık karşılaşılan sorunlara yönelik çözümler sunarak, bu karmaşık yapılandırma sürecinde size rehberlik etmeyi amaçladık.

Unutulmamalıdır ki, hiçbir güvenlik çözümü %100 kusursuz değildir. Firejail, WordPress kurulumunuz için güçlü bir savunma katmanı sağlarken, düzenli güncellemeler, güçlü parolalar, güvenlik duvarı kullanımı ve diğer en iyi uygulamaların da göz ardı edilmemesi gerekir. Sürekli tetikte olmak ve güvenlik önlemlerini güncel tutmak, dijital varlıklarınızı korumanın anahtarıdır. Firejail ile WordPress’inizi hapsederek, web sitenizin ve sunucunuzun güvenliğini bir sonraki seviyeye taşımış olursunuz.

Yorumlar
İçeriği beğendiniz mi? Bir tartışma başlatın veya görüşlerinizi paylaşın.
Yorum Yaz

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Gönder

E-posta Bülteni
Yazılım Topluluğuna Katılın
En son güncellemeleri, yaratıcı ipuçlarını ve özel kaynakları doğrudan e-posta kutunuza alın. Tasarım ve inovasyonun geleceğini birlikte keşfedelim.
Exit mobile version