Debian 11 Üzerine Linux, Apache, MariaDB, PHP (LAMP) Yığınının Kurulumu
LAMP yığını (Linux, Apache, MariaDB, PHP), dinamik web siteleri ve web uygulamaları geliştirmek ve barındırmak için dünya genelinde en popüler ve sağlam açık kaynaklı çözümlerden biridir. Bu teknoloji yığını, özellikle PHP tabanlı içerik yönetim sistemleri (CMS) ve özel web uygulamaları için bir temel oluşturur. Bu kapsamlı makalede, Debian 11 “Bullseye” işletim sistemi üzerine LAMP yığınının her bir bileşenini adım adım nasıl kuracağınızı ve yapılandıracağınızı detaylı bir şekilde inceleyeceğiz.
Debian, kararlılığı, güvenilirliği ve geniş paket deposu sayesinde sunucu ortamları için mükemmel bir seçimdir. LAMP yığını, bu güçlü temel üzerine inşa edilerek yüksek performanslı ve güvenli bir web sunucusu ortamı sağlar. Bu makalenin sonunda, kendi web sitelerinizi veya uygulamalarınızı barındırmaya hazır, tam işlevsel bir LAMP sunucusuna sahip olacaksınız.
Giriş: LAMP Yığını Nedir ve Neden Kullanılır?
LAMP, aşağıdaki dört ana bileşenin baş harflerinden oluşan bir kısaltmadır:
* Linux: İşletim sistemi. Bu rehberde Debian 11 kullanacağız. Linux, açık kaynaklı, kararlı ve güvenli bir platform sunar.
* Apache: Web sunucusu. Dünya genelinde en yaygın kullanılan web sunucularından biridir. Statik ve dinamik içerik sunma yeteneğiyle bilinir.
* MariaDB: Veritabanı yönetim sistemi. MySQL’in topluluk tarafından geliştirilen bir çatalıdır ve yüksek performans, güvenilirlik ve gelişmiş özellikler sunar.
* PHP: Programlama dili. Sunucu taraflı betik dili olup, dinamik web içeriği oluşturmak için yaygın olarak kullanılır.
LAMP yığını, özellikle WordPress, Drupal, Joomla gibi popüler CMS’ler ve birçok özel PHP tabanlı web uygulaması için standart bir geliştirme ve dağıtım ortamı sağlar. Açık kaynaklı olması, geniş topluluk desteği, esnekliği ve maliyet etkinliği sayesinde hem bireysel geliştiriciler hem de büyük ölçekli işletmeler için cazip bir çözümdür.
Temel Gereksinimler
Bu rehbere başlamadan önce, aşağıdaki gereksinimlerin karşılandığından emin olun:
* Debian 11 (Bullseye) kurulu bir sunucu veya sanal makine: Minimum 1 GB RAM ve 10 GB depolama alanı önerilir.
* SSH erişimi: Eğer sunucuya uzaktan bağlanıyorsanız, bir SSH istemcisine ihtiyacınız olacak.
* Sudo ayrıcalıklarına sahip bir kullanıcı: Kurulum ve yapılandırma adımları için kök (root) yetkilerine ihtiyacınız olacak.
* Aktif internet bağlantısı: Paketleri indirmek için gereklidir.
Sistem Güncellemesi ve Temel Paketlerin Kurulumu
Herhangi bir kurulum işlemine başlamadan önce, sisteminizin güncel olduğundan emin olmak iyi bir uygulamadır. Bu, güvenlik açıklarını kapatmaya ve en son kararlı paket sürümlerini almanıza yardımcı olur.
Sistem Paketlerini Güncelleme
Terminali açın ve aşağıdaki komutları çalıştırın:
sudo apt update
sudo apt upgrade -y
sudo apt full-upgrade -y
sudo apt autoremove -y
* sudo apt update: Paket listelerini günceller, böylece sisteminiz hangi paketlerin en son sürümlerinin mevcut olduğunu bilir.
* sudo apt upgrade -y: Mevcut yüklü paketleri yükseltir. -y bayrağı, tüm sorulara otomatik olarak “evet” yanıtı verir.
* sudo apt full-upgrade -y: Mevcut paketleri yükseltir ve gerekirse yeni paketleri kurar veya eski paketleri kaldırır. Bu, daha kapsamlı bir yükseltmedir.
* sudo apt autoremove -y: Artık ihtiyaç duyulmayan bağımlılıkları ve eski çekirdek sürümlerini temizler.
Bu adımlar, sisteminizi temiz ve güncel bir duruma getirir.
Apache Web Sunucusunun Kurulumu
Apache HTTP Sunucusu, dünya genelinde en yaygın kullanılan web sunucularından biridir. Yüksek esnekliği, modüler yapısı ve geniş topluluk desteği sayesinde dinamik web uygulamaları için ideal bir platform sunar.
Apache Kurulumu
Apache’yi kurmak için aşağıdaki komutu kullanın:
sudo apt install apache2 -y
Kurulum tamamlandıktan sonra, Apache servisi otomatik olarak başlayacaktır. Servisin durumunu kontrol etmek için aşağıdaki komutu kullanabilirsiniz:
sudo systemctl status apache2
Çıktıda active (running) ifadesini görmeniz gerekir. Eğer değilse, servisi başlatmak için sudo systemctl start apache2 komutunu kullanabilirsiniz.
Güvenlik Duvarı Ayarları (UFW)
Debian 11 üzerinde UFW (Uncomplicated Firewall) genellikle varsayılan olarak yüklü değildir veya etkin değildir. Web sunucunuzun güvenliğini sağlamak için UFW’yi yapılandırmak önemlidir.
Öncelikle UFW’yi kurun:
sudo apt install ufw -y
UFW, Apache için önceden tanımlanmış profillerle birlikte gelir. Bu profilleri listelemek için:
sudo ufw app list
Çıktı, Apache, Apache Full ve Apache Secure gibi seçenekleri gösterecektir:
* Apache: Sadece port 80 (HTTP) trafiğine izin verir.
* Apache Full: Port 80 (HTTP) ve port 443 (HTTPS) trafiğine izin verir.
* Apache Secure: Sadece port 443 (HTTPS) trafiğine izin verir.
Şu an için sadece HTTP trafiğine ihtiyacımız var, ancak gelecekte HTTPS kullanmayı planlıyorsanız Apache Full seçeneğini kullanmak daha iyidir.
sudo ufw allow 'Apache Full'
sudo ufw enable
sudo ufw status
sudo ufw enable komutu, güvenlik duvarını etkinleştirecektir. Bu komutu çalıştırdıktan sonra SSH bağlantınızın kesilmemesi için uyarı alabilirsiniz; y tuşuna basarak onaylayın. sudo ufw status komutu, etkin kuralları gösterecektir.
Apache Kurulumunu Test Etme
Web tarayıcınızı açın ve sunucunuzun IP adresini veya localhost (eğer doğrudan sunucuya erişiyorsanız) yazarak Apache’nin çalışıp çalışmadığını kontrol edin:
http://SERVER_IP_ADRESİNİZ/
Başarılı bir kurulumda, “Debian Apache2 Varsayılan Sayfası”nı gösteren bir sayfa görmelisiniz.
Apache Dosya Yapısı ve Önemli Dizinler
Apache’nin temel yapılandırma dosyalarını ve dizinlerini anlamak, gelecekteki yapılandırmalar için önemlidir:
* /var/www/html: Varsayılan web sitesi kök dizini. Web sitenizin dosyalarını buraya yerleştireceksiniz.
* /etc/apache2/apache2.conf: Apache’nin ana yapılandırma dosyası.
* /etc/apache2/sites-available/: Sanal host yapılandırma dosyalarının depolandığı dizin.
* /etc/apache2/sites-enabled/: Etkin olan sanal host yapılandırma dosyalarının sembolik bağlantılarının bulunduğu dizin.
* /etc/apache2/mods-available/ ve /etc/apache2/mods-enabled/: Apache modüllerinin depolandığı ve etkinleştirildiği dizinler.
* /var/log/apache2/access.log: Apache erişim günlükleri.
* /var/log/apache2/error.log: Apache hata günlükleri.
Apache’de sanal hostları etkinleştirmek veya devre dışı bırakmak için a2ensite ve a2dissite komutları kullanılırken, modülleri etkinleştirmek veya devre dışı bırakmak için a2enmod ve a2dismod komutları kullanılır. Her değişiklikten sonra Apache servisini yeniden başlatmayı unutmayın: sudo systemctl restart apache2.
MariaDB Veritabanı Sunucusunun Kurulumu
MariaDB, popüler MySQL veritabanı yönetim sisteminin açık kaynaklı, topluluk tarafından geliştirilen bir çatalıdır. Yüksek performans, güvenilirlik ve gelişmiş özellikler sunar ve LAMP yığınının veritabanı bileşeni olarak yaygın olarak kullanılır.
MariaDB Kurulumu
MariaDB sunucusunu ve istemcisini kurmak için aşağıdaki komutu kullanın:
sudo apt install mariadb-server mariadb-client -y
Kurulum tamamlandıktan sonra MariaDB servisi otomatik olarak başlayacaktır. Durumunu kontrol etmek için:
sudo systemctl status mariadb
Çıktıda active (running) ifadesini görmelisiniz.
MariaDB Güvenlik Yapılandırması
MariaDB’nin varsayılan kurulumu bazı güvenlik açıklarına sahip olabilir. mysql_secure_installation betiği, bu açıkları kapatmanıza yardımcı olur.
sudo mysql_secure_installation
Bu betik sizi bir dizi soruyla yönlendirecektir:
1. Enter current password for root (none): Varsayılan olarak MariaDB root kullanıcısının şifresi yoktur. Sadece Enter tuşuna basın.
2. Set root password? [Y/n]: Y yazın ve güçlü bir root şifresi belirleyin. Bu şifreyi unutmayın!
3. Remove anonymous users? [Y/n]: Y yazarak anonim kullanıcıları kaldırın. Bu, veritabanı güvenliğini artırır.
4. Disallow root login remotely? [Y/n]: Güvenlik nedeniyle Y yazarak root kullanıcısının uzaktan giriş yapmasını engelleyin. Root kullanıcısına sadece localhost üzerinden erişilebilir olmalıdır.
5. Remove test database and access to it? [Y/n]: Y yazarak test veritabanını kaldırın.
6. Reload privilege tables now? [Y/n]: Y yazarak ayrıcalık tablolarını yeniden yükleyin.
Bu adımları tamamladıktan sonra MariaDB kurulumunuz daha güvenli olacaktır.
MariaDB’ye Giriş ve Veritabanı Oluşturma
MariaDB sunucusuna root kullanıcısı olarak bağlanmak için:
sudo mariadb
Bu komut sizi MariaDB komut istemine götürecektir. Artık SQL sorguları çalıştırabilirsiniz.
Örnek: Yeni Bir Veritabanı ve Kullanıcı Oluşturma
Web uygulamalarınız için genellikle ayrı bir veritabanı ve bu veritabanına erişimi olan özel bir kullanıcı oluşturmanız gerekir. Bu, güvenlik için iyi bir uygulamadır.
CREATE DATABASE mydatabase;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'GucluSifreniz123!';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
* CREATE DATABASE mydatabase;: mydatabase adında yeni bir veritabanı oluşturur.
* CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'GucluSifreniz123!';: myuser adında yeni bir kullanıcı oluşturur ve sadece localhost üzerinden erişimine izin verir. GucluSifreniz123! yerine kendi güçlü şifrenizi kullanın.
GRANT ALL PRIVILEGES ON mydatabase. TO 'myuser'@'localhost';: myuser kullanıcısına mydatabase üzerindeki tüm ayrıcalıkları verir.
* FLUSH PRIVILEGES;: Ayrıcalık tablolarını yeniden yükler, böylece yeni ayarlar hemen geçerli olur.
* EXIT;: MariaDB komut isteminden çıkar.
Artık myuser ve GucluSifreniz123! şifresiyle mydatabase veritabanına erişebilirsiniz.
PHP Kurulumu
PHP (Hypertext Preprocessor), dinamik web sayfaları oluşturmak için yaygın olarak kullanılan bir sunucu taraflı betik dilidir. LAMP yığınının “P” bileşenini oluşturur ve Apache ile entegre olarak çalışır.
PHP ve Gerekli Uzantıların Kurulumu
Debian 11 varsayılan olarak PHP 7.4 veya daha yeni bir sürümle gelir. PHP’yi ve Apache ile entegrasyonu sağlayan modülü (libapache2-mod-php) kuralım:
sudo apt install php libapache2-mod-php php-mysql -y
* php: PHP çekirdek paketini kurar.
* libapache2-mod-php: PHP’nin Apache ile entegrasyonunu sağlayan modüldür. Bu modül, Apache’nin PHP betiklerini yorumlamasına olanak tanır.
* php-mysql: PHP’nin MariaDB (ve MySQL) veritabanlarıyla iletişim kurmasını sağlayan uzantıdır.
Web uygulamalarınızın ihtiyaçlarına göre başka PHP uzantılarına da ihtiyacınız olabilir. En yaygın kullanılan uzantılardan bazıları şunlardır:
* php-cli: Komut satırı PHP yorumlayıcısı.
* php-fpm: FastCGI Process Manager (daha yüksek performans için alternatif PHP işleme modu).
* php-curl: URL’ler aracılığıyla veri transferi yapmak için.
* php-gd: Görüntü işleme fonksiyonları için.
* php-mbstring: Çok baytlı karakter dizeleri için.
* php-xml: XML verilerini işlemek için.
* php-zip: ZIP arşivlerini işlemek için.
* php-intl: Uluslararasılaştırma desteği için.
* php-soap: SOAP web servisleri için.
* php-imagick: Gelişmiş görüntü işleme için.
İhtiyaç duyduğunuz uzantıları kurmak için aşağıdaki gibi bir komut kullanabilirsiniz:
sudo apt install php-cli php-fpm php-curl php-gd php-mbstring php-xml php-zip php-intl -y
PHP Sürümünü Kontrol Etme
Kurulumdan sonra PHP sürümünü kontrol etmek için:
php -v
Bu, yüklü PHP sürümünü gösterecektir (örneğin, PHP 7.4.x).
Apache’nin PHP Modülünü Etkinleştirme ve Yeniden Başlatma
libapache2-mod-php paketi genellikle PHP modülünü otomatik olarak etkinleştirir. Ancak emin olmak için veya herhangi bir sorun yaşarsanız, aşağıdaki komutu kullanabilirsiniz:
sudo a2enmod php7.4 # PHP sürümünüze göre 7.4 kısmını değiştirin (örneğin php8.x)
sudo systemctl restart apache2
Bu komut, Apache’nin PHP modülünü etkinleştirir ve değişikliklerin geçerli olması için Apache servisini yeniden başlatır.
PHP Yapılandırma Dosyası (php.ini)
PHP’nin ana yapılandırma dosyası /etc/php/7.4/apache2/php.ini (PHP sürümünüze göre yol değişebilir) konumunda bulunur. Bu dosyayı düzenleyerek PHP çalışma zamanı ayarlarını yapabilirsiniz. Örneğin, dosya yükleme boyutunu, bellek limitini veya hata raporlama seviyesini değiştirebilirsiniz.
* memory_limit: Bir betiğin kullanabileceği maksimum bellek miktarı.
* upload_max_filesize: HTTP yüklemesi için izin verilen maksimum dosya boyutu.
* post_max_size: POST verileri için izin verilen maksimum boyut.
* max_execution_time: Bir betiğin çalışmasına izin verilen maksimum süre.
* display_errors: Hataların tarayıcıda görüntülenip görüntülenmeyeceği (üretim ortamında Off olmalıdır).
Değişiklik yaptıktan sonra Apache’yi yeniden başlatmayı unutmayın: sudo systemctl restart apache2.
PHP Kurulumunu Test Etme
PHP’nin doğru bir şekilde çalıştığını ve Apache ile entegre olduğunu doğrulamak için basit bir info.php dosyası oluşturalım.
info.php Dosyası Oluşturma
Varsayılan web kök dizini olan /var/www/html içinde bir info.php dosyası oluşturalım:
sudo nano /var/www/html/info.php
Dosyanın içine aşağıdaki kodu yapıştırın:
Kaydedin ve düzenleyiciden çıkın (Nano’da Ctrl+O, Enter, Ctrl+X).
Tarayıcıdan Kontrol Etme
Web tarayıcınızı açın ve sunucunuzun IP adresini takip eden /info.php yolunu yazın:
http://SERVER_IP_ADRESİNİZ/info.php
Başarılı bir kurulumda, PHP’nin yapılandırma bilgilerini (sürüm, uzantılar, yapılandırma ayarları vb.) gösteren detaylı bir sayfa görmelisiniz. Bu sayfa, LAMP yığınınızın tüm bileşenlerinin düzgün çalıştığını doğrular.
Güvenlik Uyarısı: phpinfo() sayfası hassas sistem bilgilerini içerir. Üretim ortamında bu dosyayı sunucunuzda bırakmanız güvenlik riski oluşturur. Testi tamamladıktan sonra bu dosyayı silmeniz şiddetle tavsiye edilir:
sudo rm /var/www/html/info.php
İsteğe Bağlı: Sanal Host Kurulumu
Sanal hostlar, tek bir Apache sunucusunda birden fazla web sitesini barındırmanıza olanak tanır. Her web sitesi kendi alan adına, belge kök dizinine, günlük dosyalarına ve yapılandırma ayarlarına sahip olabilir.
Neden Sanal Host Kullanılır?
* Birden Çok Site Barındırma: Aynı sunucu üzerinde farklı alan adları (örneğin, example.com ve example.org) için ayrı web siteleri çalıştırabilirsiniz.
* Daha İyi Organizasyon: Her site için özel bir dizin yapısı ve yapılandırma sağlar.
* Geliştirme Ortamları: Geliştirme, hazırlık ve üretim ortamları için ayrı sanal hostlar oluşturabilirsiniz.
Yeni Bir Sanal Host Oluşturma
Varsayılan Apache yapılandırma dosyasını kopyalayarak yeni bir sanal host dosyası oluşturalım:
sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/example.com.conf
sudo nano /etc/apache2/sites-available/example.com.conf
Dosyayı açtıktan sonra içeriğini aşağıdaki gibi düzenleyin. example.com yerine kendi alan adınızı kullanın.
ServerAdmin webmaster@example.com
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
* ServerAdmin: Sunucu yöneticisinin e-posta adresi.
* ServerName: Bu sanal host için ana alan adı.
* ServerAlias: Bu sanal host için alternatif alan adları (örneğin, www öneki).
* DocumentRoot: Bu web sitesinin dosyalarının bulunduğu dizin.
* ErrorLog ve CustomLog: Hata ve erişim günlüklerinin kaydedileceği yerler.
* bloğu: Belirli bir dizin için Apache ayarlarını tanımlar. AllowOverride All genellikle .htaccess dosyalarının kullanılmasına izin vermek için gereklidir.
Kaydedin ve dosyadan çıkın.
Web Sitesi Dizin Yapısı Oluşturma
DocumentRoot olarak belirlediğimiz dizini oluşturalım ve bu dizine web sunucusunun okuma/yazma izinlerini verelim:
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example.com/public_html
sudo chmod -R 755 /var/www/example.com/public_html
* sudo mkdir -p: Gerekirse üst dizinleri de oluşturarak dizini yaratır.
* sudo chown -R: Dizin sahipliğini mevcut kullanıcıya verir. $USER ortam değişkeni mevcut kullanıcınızın adını içerir.
* sudo chmod -R 755: Dizin ve dosya izinlerini ayarlar. 755 genellikle web sunucusu için güvenli ve yeterli bir izindir (sahip tam erişime sahipken, grup ve diğerleri sadece okuma ve yürütme iznine sahiptir).
Şimdi yeni sanal hostunuz için basit bir index.html dosyası oluşturalım:
sudo nano /var/www/example.com/public_html/index.html
İçeriğe aşağıdaki gibi bir HTML kodu ekleyin:
Benim Harika Sitem
Bu, Debian 11 üzerindeki özel sanal hostum.
Kaydedin ve çıkın.
Sanal Hostu Etkinleştirme ve Apache’yi Yeniden Başlatma
Yeni sanal hostunuzu etkinleştirmek için a2ensite komutunu kullanın:
sudo a2ensite example.com.conf
Varsayılan sanal hostu (000-default.conf) devre dışı bırakmak isteyebilirsiniz, böylece alan adınızla eriştiğinizde sadece kendi siteniz görünür:
sudo a2dissite 000-default.conf
Değişikliklerin geçerli olması için Apache servisini yeniden başlatın:
sudo systemctl restart apache2
Alan Adı Çözümlemesi (Yerel Test İçin)
Eğer gerçek bir alan adınız yoksa veya yerel olarak test ediyorsanız, istemci bilgisayarınızın /etc/hosts (Linux/macOS) veya C:\Windows\System32\drivers\etc\hosts (Windows) dosyasını düzenleyerek alan adınızı sunucunuzun IP adresine yönlendirebilirsiniz.
# İstemci bilgisayarınızda (DEBİAN SUNUCUNUZDA DEĞİL!)
sudo nano /etc/hosts
Dosyaya aşağıdaki satırı ekleyin (SERVER_IP_ADRESİNİZ yerine sunucunuzun gerçek IP adresini yazın):
SERVER_IP_ADRESİNİZ example.com www.example.com
Kaydedin ve çıkın. Şimdi web tarayıcınızdan http://example.com adresine gittiğinizde, yeni oluşturduğunuz sanal hostunuzun sayfasını görmelisiniz.
Güvenlik İpuçları ve Ek Yapılandırmalar
LAMP yığınını kurmak sadece başlangıçtır. Sunucunuzu güvende tutmak ve performansını optimize etmek için ek adımlar atmanız önemlidir.
Apache Güvenliği
* Gereksiz Modülleri Devre Dışı Bırakma: İhtiyaç duymadığınız Apache modüllerini devre dışı bırakarak saldırı yüzeyini azaltın. sudo a2dismod [modül_adı] komutunu kullanın.
* Dizin Listelemeyi Kapatma: Options -Indexes yönergesini sanal host yapılandırmanıza veya ana Apache yapılandırmanıza ekleyerek, dizinlerde index.html veya index.php dosyası olmadığında dizin içeriğinin listelenmesini engelleyin. Bu, hassas dosya isimlerinin açığa çıkmasını önler.
* ServerTokens ve ServerSignature Ayarları: apache2.conf dosyasında ServerTokens Prod ve ServerSignature Off ayarlayarak Apache sürüm bilgilerinin ve sunucu imzasının gizlenmesini sağlayın.
* SSL/TLS Kurulumu (HTTPS): Let’s Encrypt ve Certbot kullanarak ücretsiz SSL/TLS sertifikaları kurarak tüm trafiği şifreleyin. Bu, veri güvenliği ve SEO için kritik öneme sahiptir.
sudo apt install certbot python3-certbot-apache -y
sudo certbot --apache -d example.com -d www.example.com
* ModSecurity (Web Uygulama Güvenlik Duvarı – WAF): Apache için ModSecurity gibi bir WAF kurarak yaygın web saldırılarına (SQL enjeksiyonu, XSS vb.) karşı ek koruma sağlayabilirsiniz.
MariaDB Güvenliği
* Güçlü Şifreler: Veritabanı kullanıcıları için her zaman karmaşık ve uzun şifreler kullanın.
* Minimum Ayrıcalık Prensibi: Uygulamalarınızın veritabanına erişim için sadece ihtiyaç duydukları ayrıcalıklara sahip olduğundan emin olun. GRANT komutunu dikkatli kullanın.
* Uzaktan Erişimi Kısıtlama: MariaDB root kullanıcısının uzaktan erişimini kapattığınızdan emin olun (mysql_secure_installation ile yapıldı). Diğer kullanıcılar için de sadece ihtiyaç duyulduğunda ve güvenli ağlardan erişime izin verin.
* Veritabanı Yedeklemeleri: Düzenli olarak veritabanı yedeklemeleri alın ve bu yedeklemeleri güvenli bir yerde saklayın. mysqldump komutu bu amaçla kullanılabilir.
PHP Güvenliği
* php.ini Ayarları:
* display_errors = Off: Üretim ortamında hata mesajlarını kullanıcılara göstermeyin. Bu, potansiyel güvenlik açıklarını gizler.
* expose_php = Off: PHP sürüm bilgisinin HTTP yanıt başlıklarında görünmesini engeller.
* disable_functions: exec, shell_exec, passthru gibi tehlikeli fonksiyonları devre dışı bırakın.
* allow_url_fopen = Off ve allow_url_include = Off: Uzak dosyaların dahil edilmesini veya açılmasını engelleyin.
* Gereksiz Uzantıları Kaldırma: Kullanmadığınız PHP uzantılarını kaldırarak potansiyel zafiyetleri azaltın.
* Uygulama Düzeyinde Güvenlik:
* Tüm kullanıcı girişlerini doğrulayın ve temizleyin (input validation and sanitization).
* SQL enjeksiyonu ve XSS (Cross-Site Scripting) gibi saldırılara karşı koruma sağlayın (örneğin, PDO ile hazırlanmış sorgular).
* CSRF (Cross-Site Request Forgery) koruması uygulayın.
* Güvenli oturum yönetimi kullanın.
Sistem Güvenliği
* Güvenlik Duvarı (UFW): Yalnızca gerekli portları açın (SSH, HTTP, HTTPS).
* SSH Güvenliği:
* Varsayılan SSH portunu değiştirin (22 yerine başka bir port kullanın).
* Root kullanıcısının SSH üzerinden doğrudan giriş yapmasını engelleyin (PermitRootLogin no).
* Şifre tabanlı kimlik doğrulama yerine SSH anahtar tabanlı kimlik doğrulamayı kullanın.
* fail2ban gibi araçlarla kaba kuvvet saldırılarına karşı koruma sağlayın.
* Düzenli Güncellemeler: İşletim sistemi ve tüm yüklü paketleri düzenli olarak güncel tutun (sudo apt update && sudo apt upgrade).
* Günlük İzleme: Sunucu günlüklerini (Apache erişim/hata günlükleri, sistem günlükleri) düzenli olarak izleyin ve anormal aktiviteleri kontrol edin.
Sonuç
Bu kapsamlı rehberde, Debian 11 “Bullseye” işletim sistemi üzerine Linux, Apache, MariaDB ve PHP’den oluşan tam bir LAMP yığınını nasıl kuracağınızı ve yapılandıracağınızı adım adım öğrendiniz. Sistem güncellemesinden başlayarak, Apache web sunucusunun kurulumuna, MariaDB veritabanı sunucusunun güvenli yapılandırmasına ve PHP’nin gerekli uzantılarla birlikte entegrasyonuna kadar tüm temel adımları başarıyla tamamladınız. Ayrıca, sanal host kurulumu ile birden fazla web sitesi barındırma yeteneğini kazandınız ve sunucunuzun güvenliğini artırmak için önemli ipuçlarını öğrendiniz.
Artık dinamik web sitelerinizi ve uygulamalarınızı barındırmaya hazır, sağlam ve güvenli bir LAMP sunucusuna sahipsiniz. Bu yapılandırma, WordPress, Joomla, Drupal gibi popüler içerik yönetim sistemlerini veya kendi özel PHP uygulamalarınızı dağıtmak için mükemmel bir temel sağlar.
Sonraki adımlarınız, uygulamanızı veya web sitenizi DocumentRoot dizinine yerleştirmek, bir alan adı kaydetmek ve DNS ayarlarınızı sunucunuzun IP adresine yönlendirmek olabilir. Güvenlik ipuçlarını uygulamaya devam etmeyi ve sunucunuzu düzenli olarak güncellemeyi unutmayın. Debian’ın kararlılığı ve LAMP yığınının esnekliği sayesinde, web projeleriniz için güçlü ve güvenilir bir platforma sahipsiniz. Başarılar dileriz!
