Takip et

Ubuntu 20.04 Üzerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Adım Adım Kapsamlı Rehber

Ubuntu 20.04 Üzerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Adım Adım Kapsamlı Rehber Modern web uygulamaları için sağlam, hızlı ve

Ubuntu 20.04 Üzerine Linux, Nginx, MySQL, PHP (LEMP Stack) Kurulumu: Adım Adım Kapsamlı Rehber

Modern web uygulamaları için sağlam, hızlı ve güvenilir bir altyapı oluşturmak, geliştiriciler ve sistem yöneticileri için temel bir gerekliliktir. LEMP yığını, Linux işletim sistemi, Nginx web sunucusu, MySQL veritabanı ve PHP programlama dilini bir araya getirerek bu ihtiyacı karşılayan güçlü bir çözümdür. Apache’nin yerini alan Nginx, özellikle yüksek eşzamanlı bağlantıları ve statik içerik sunumunu optimize etme yeteneği sayesinde popülerlik kazanmıştır. Bu rehberde, Ubuntu 20.04 sunucunuz üzerine LEMP yığınını adım adım nasıl kuracağınızı, yapılandıracağınızı ve güvenli hale getireceğinizi detaylı bir şekilde anlatacağız.

LEMP Nedir ve Neden Tercih Edilmelidir?

LEMP, “Linux, Nginx, MySQL, PHP” kelimelerinin baş harflerinden oluşan bir kısaltmadır. Her bir bileşen, web uygulamanızın farklı bir yönünü yönetir:

* L (Linux): İşletim sistemidir. Ubuntu, Debian, CentOS gibi dağıtımlar en yaygın olanlarıdır. Bu rehberde Ubuntu 20.04 kullanacağız.
* E (Engine-X / Nginx): Yüksek performanslı bir web sunucusu ve ters proxy’dir. Özellikle statik içerik sunumunda ve eşzamanlı bağlantıları yönetmede Apache’ye göre daha verimli kabul edilir.
* M (MySQL / MariaDB): İlişkisel bir veritabanı yönetim sistemidir. Uygulamanızın verilerini depolamak ve yönetmek için kullanılır.
* P (PHP): Dinamik web sayfaları oluşturmak için kullanılan popüler bir sunucu tarafı betik dilidir. Nginx ile birlikte PHP-FPM (FastCGI Process Manager) aracılığıyla çalışır.

LEMP yığınını tercih etmenizin başlıca nedenleri şunlardır:

* Yüksek Performans: Nginx’in olay tabanlı mimarisi sayesinde yüksek trafikli sitelerde bile üstün performans sunar.
* Ölçeklenebilirlik: Bileşenlerin modüler yapısı sayesinde uygulamanız büyüdükçe kolayca ölçeklendirilebilir.
* Kaynak Verimliliği: Nginx, Apache’ye kıyasla daha az sistem kaynağı tüketir, bu da daha düşük maliyetli sunucularda bile iyi performans almanızı sağlar.
* Güvenlik: Her bileşenin düzenli güncellemeleri ve güvenlik odaklı yapılandırma seçenekleri sayesinde sağlam bir güvenlik katmanı sunar.
* Esneklik: Geniş eklenti ve modül desteği sayesinde farklı ihtiyaçlara göre özelleştirilebilir.

Bu rehber, Ubuntu 20.04 LTS (Long Term Support) sürümünü temel almaktadır. LTS sürümleri, uzun süreli destek ve kararlılık sundukları için üretim ortamları için idealdir.

Ön Gereksinimler

LEMP kurulumuna başlamadan önce aşağıdaki gereksinimlere sahip olduğunuzdan emin olun:

* Ubuntu 20.04 Sunucu: SSH erişimi olan bir Ubuntu 20.04 yüklü sanal veya fiziksel sunucu.
* Kök / Sudo Yetkileri: Kurulum komutlarını çalıştırmak için kök kullanıcı erişimi veya sudo yetkilerine sahip bir kullanıcı.
* İnternet Bağlantısı: Sunucunun paketleri indirebilmesi için aktif bir internet bağlantısı.
* Temel Komut Satırı Bilgisi: Linux komut satırı ile ilgili temel düzeyde bilgi sahibi olmak.

Şimdi, LEMP kurulumuna adım adım başlayalım.

Sunucu İlk Kurulumu ve Güvenliği

Herhangi bir büyük kurulumdan önce sunucunuzu güncelleyerek ve temel güvenlik ayarlarını yaparak başlamak iyi bir uygulamadır.

Sistem Paketlerini Güncelleme

İlk olarak, sunucunuzdaki paket listesini güncelleyin ve mevcut paketleri en son sürümlerine yükseltin:

sudo apt update
sudo apt upgrade -y

Bu komutlar, sisteminizin en yeni güvenlik yamalarına ve yazılım güncellemelerine sahip olmasını sağlar.

Güvenlik Duvarını Yapılandırma (UFW)

Ubuntu, varsayılan olarak UFW (Uncomplicated Firewall) adlı basit bir güvenlik duvarı aracıyla gelir. Gelen bağlantıları kısıtlayarak sunucunuzun güvenliğini artırmak için UFW’yi etkinleştirmelisiniz.

SSH bağlantısının kesilmemesi için öncelikle SSH bağlantı noktasına izin verin (varsayılan 22’dir):

sudo ufw allow OpenSSH

Ardından, güvenlik duvarını etkinleştirin:

sudo ufw enable

Onaylamak için y yazıp Enter tuşuna basın. Güvenlik duvarının durumunu kontrol etmek için:

sudo ufw status

Şu anda sadece SSH bağlantılarına izin verilmelidir. Nginx ve diğer hizmetleri kurduktan sonra HTTP/HTTPS bağlantılarına da izin vereceğiz.

Nginx Kurulumu

Nginx, LEMP yığınının “E” bileşenidir ve web isteklerini işlemekten sorumludur.

Nginx Yükleme

Nginx’i Ubuntu depolarından kolayca yükleyebilirsiniz:

sudo apt install nginx -y

Kurulum tamamlandıktan sonra, Nginx servisi otomatik olarak başlayacaktır. Durumunu kontrol edebilirsiniz:

sudo systemctl status nginx

Çıktıda active (running) ibaresini görmelisiniz.

Güvenlik Duvarını Nginx İçin Yapılandırma

Nginx’i kurduktan sonra, web sunucusunun dışarıdan erişilebilir olması için UFW güvenlik duvarında HTTP (80) ve HTTPS (443) bağlantı noktalarına izin vermeniz gerekir. UFW, Nginx için önceden tanımlanmış profillerle gelir:

* Nginx HTTP: Yalnızca 80 numaralı bağlantı noktasına (HTTP) izin verir.
* Nginx HTTPS: Yalnızca 443 numaralı bağlantı noktasına (HTTPS) izin verir.
* Nginx Full: Hem 80 hem de 443 numaralı bağlantı noktalarına izin verir.

Şimdilik sadece HTTP’ye izin verelim. Daha sonra SSL/TLS kurduğumuzda HTTPS’ye izin vereceğiz:

sudo ufw allow 'Nginx HTTP'

Güvenlik duvarı durumunu tekrar kontrol edin:

sudo ufw status

Çıktıda Nginx HTTP‘nin izin verilenler listesinde olduğunu görmelisiniz.

Nginx Kurulumunu Test Etme

Web tarayıcınızı açın ve sunucunuzun IP adresini veya alan adını girin. Örneğin: http://your_server_ip

Eğer Nginx doğru bir şekilde kurulduysa, “Welcome to nginx!” mesajını içeren varsayılan Nginx karşılama sayfasını görmelisiniz. Bu, Nginx’in düzgün çalıştığını gösterir.

MySQL Kurulumu

MySQL, LEMP yığınının “M” bileşenidir ve web uygulamanızın verilerini depolamak için kullanılır. Ubuntu 20.04 varsayılan olarak MySQL’in yerine MariaDB’yi de kullanabilir, ancak bu rehberde MySQL’i kuracağız.

MySQL Sunucusunu Yükleme

MySQL sunucusunu aşağıdaki komutla yükleyin:

sudo apt install mysql-server -y

Kurulum tamamlandıktan sonra MySQL servisi otomatik olarak başlayacaktır. Durumunu kontrol edebilirsiniz:

sudo systemctl status mysql

Çıktıda active (running) ibaresini görmelisiniz.

MySQL Güvenlik Yapılandırması

MySQL kurulumuyla birlikte gelen mysql_secure_installation betiğini çalıştırmak, veritabanı sunucunuzun güvenliğini artırmak için kritik bir adımdır.

sudo mysql_secure_installation

Bu betik size birkaç soru soracaktır:

1. VALIDATE PASSWORD COMPONENT? (Şifre doğrulama bileşenini kurmak ister misiniz?)
* y veya n seçeneğini seçin. Güçlü şifre politikaları uygulamak için y seçeneğini tercih edebilirsiniz. Eğer y seçerseniz, şifre gücü seviyesi seçmeniz istenecektir (LOW, MEDIUM, STRONG). Genellikle MEDIUM veya STRONG seçmek iyi bir fikirdir.
2. Set root password? (Kök kullanıcı şifresi belirle?)
* y seçeneğini seçin ve güçlü bir kök şifresi belirleyin. Bu şifreyi unutmayın, çünkü MySQL sunucusuna yönetici olarak erişmek için gereklidir.
3. Remove anonymous users? (Anonim kullanıcıları kaldır?)
* y seçeneğini seçin. Anonim kullanıcılar test amaçlıdır ve üretim ortamlarında güvenlik riski oluştururlar.
4. Disallow root login remotely? (Kök kullanıcının uzaktan giriş yapmasını engelle?)
* y seçeneğini seçin. Kök kullanıcının sadece localhost üzerinden erişmesine izin vermek daha güvenlidir. Uzaktan erişim için yeni, ayrıcalıkları kısıtlı kullanıcılar oluşturacağız.
5. Remove test database and access to it? (Test veritabanını ve erişimini kaldır?)
* y seçeneğini seçin. Test veritabanı üretim ortamında gereksizdir ve potansiyel bir güvenlik açığıdır.
6. Reload privilege tables now? (Ayrıcalık tablolarını şimdi yeniden yükle?)
* y seçeneğini seçin. Bu, yaptığınız tüm değişikliklerin hemen etkin olmasını sağlar.

Bu adımları tamamladıktan sonra MySQL sunucunuz daha güvenli bir yapıya sahip olacaktır.

MySQL Kök Kullanıcısı ile Bağlanma

MySQL kök kullanıcısı olarak bağlanmak için:

sudo mysql -u root -p

Şifrenizi girmeniz istenecektir. Başarılı bir şekilde giriş yaparsanız MySQL komut istemcisini (mysql>) göreceksiniz. Çıkmak için exit; yazıp Enter tuşuna basın.

Yeni Bir MySQL Kullanıcısı ve Veritabanı Oluşturma

Web uygulamalarınız için genellikle kök kullanıcı yerine özel, daha az yetkili bir MySQL kullanıcısı ve veritabanı oluşturmak iyi bir güvenlik uygulamasıdır.

MySQL komut istemcisine bağlanın:

sudo mysql -u root -p

Şimdi aşağıdaki komutları kullanarak yeni bir veritabanı, kullanıcı ve yetkiler oluşturun. Kendi veritabanı adınızı, kullanıcı adınızı ve güçlü şifrenizi kullanmayı unutmayın.

CREATE DATABASE example_database;
CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'your_strong_password';
GRANT ALL PRIVILEGES ON example_database.* TO 'example_user'@'localhost';
FLUSH PRIVILEGES;
EXIT;

* CREATE DATABASE example_database;: example_database adında yeni bir veritabanı oluşturur.
* CREATE USER 'example_user'@'localhost' IDENTIFIED BY 'your_strong_password';: example_user adında ve belirtilen şifreye sahip yeni bir kullanıcı oluşturur. @'localhost' ifadesi, bu kullanıcının yalnızca sunucunun kendisinden (yerel olarak) bağlanabileceği anlamına gelir.
GRANT ALL PRIVILEGES ON example_database. TO 'example_user'@'localhost';: example_database üzerindeki tüm ayrıcalıkları example_user‘a verir. Yıldız işaretleri (.*) tüm tabloları ifade eder.
* FLUSH PRIVILEGES;: Ayrıcalık tablolarını yeniden yükleyerek değişikliklerin hemen etkili olmasını sağlar.
* EXIT;: MySQL komut istemcisinden çıkar.

Artık web uygulamanız bu example_user ve example_database ile MySQL’e bağlanabilir.

PHP Kurulumu

PHP, dinamik içerik oluşturmaktan ve veritabanı ile iletişim kurmaktan sorumlu olan LEMP yığınının “P” bileşenidir. Nginx doğrudan PHP dosyalarını işleyemediği için, PHP-FPM (FastCGI Process Manager) kullanırız. PHP-FPM, PHP betiklerini çalıştıran ayrı bir servistir ve Nginx ile iletişim kurar.

PHP ve PHP-FPM Kurulumu

Ubuntu 20.04 varsayılan olarak PHP 7.4 sürümünü sunar. PHP-FPM ve Nginx ile MySQL bağlantısı için gerekli olan PHP modüllerini kuralım:

sudo apt install php-fpm php-mysql php-cli php-curl php-json php-gd php-mbstring php-xml php-zip -y

Bu komut, PHP-FPM’i ve yaygın olarak kullanılan diğer PHP uzantılarını yükleyecektir:

* php-fpm: PHP FastCGI Process Manager.
* php-mysql: PHP’nin MySQL veritabanlarıyla iletişim kurmasını sağlar.
* php-cli: Komut satırından PHP betiklerini çalıştırmak için.
* php-curl: PHP’nin çeşitli protokoller aracılığıyla sunucularla iletişim kurmasını sağlar.
* php-json: JSON verilerini işlemek için.
* php-gd: Görüntü işleme yetenekleri için (örneğin, küçük resim oluşturma).
* php-mbstring: Çok baytlı karakter dizileriyle çalışmak için.
* php-xml: XML verilerini işlemek için.
* php-zip: ZIP arşivlerini işlemek için.

Kurulum tamamlandıktan sonra, PHP-FPM servisi otomatik olarak başlayacaktır. Durumunu kontrol edebilirsiniz:

sudo systemctl status php7.4-fpm

Çıktıda active (running) ibaresini görmelisiniz.

PHP Yapılandırması (İsteğe Bağlı ama Önerilen)

PHP’nin bazı varsayılan ayarlarını güvenlik ve performans için değiştirmek isteyebilirsiniz. En önemli ayarlardan biri cgi.fix_pathinfo‘dur. Bu ayarın 0 olarak ayarlanması, Nginx’in güvenlik açıklarını önlemeye yardımcı olur.

PHP yapılandırma dosyasını açın (PHP 7.4 için):

sudo nano /etc/php/7.4/fpm/php.ini

Dosya içinde cgi.fix_pathinfo satırını bulun (Ctrl+W ile arayabilirsiniz). Varsayılan olarak yorum satırı (# veya ; ile başlar) veya 1 olarak ayarlanmış olabilir.

;cgi.fix_pathinfo=1

Bu satırı aşağıdaki gibi değiştirin (yorum satırını kaldırın ve değeri 0 yapın):

cgi.fix_pathinfo=0

Değişikliği kaydetmek için Ctrl+O, çıkmak için Ctrl+X tuşlarına basın.

Değişikliklerin etkili olması için PHP-FPM servisini yeniden başlatın:

sudo systemctl restart php7.4-fpm

Nginx’i PHP ile Çalışacak Şekilde Yapılandırma

Nginx’in PHP dosyalarını PHP-FPM aracılığıyla işlemesi için bir sunucu bloğu (server block) yapılandırması yapmanız gerekir. Varsayılan Nginx yapılandırma dosyasını değiştirebilir veya kendi siteniz için yeni bir dosya oluşturabilirsiniz. Yeni bir dosya oluşturmak daha iyi bir uygulamadır, özellikle birden fazla web sitesi barındıracaksanız.

Yeni Bir Nginx Sunucu Bloğu Oluşturma

Örnek olarak example.com adında bir alan adı için yeni bir sunucu bloğu oluşturacağız. Web sitenizin kök dizini genellikle /var/www/html altında bulunur. Kendi alan adınızı ve dizin yolunuzu kullanmayı unutmayın.

Öncelikle web siteniz için bir kök dizini oluşturalım:

sudo mkdir -p /var/www/example.com/html

Bu dizinin sahipliğini web sunucusu kullanıcısına (genellikle www-data) verin:

sudo chown -R www-data:www-data /var/www/example.com/html
sudo chmod -R 755 /var/www/example.com

Şimdi, yeni bir Nginx sunucu bloğu yapılandırma dosyası oluşturalım:

sudo nano /etc/nginx/sites-available/example.com

Dosyanın içine aşağıdaki içeriği yapıştırın. server_name kısmını kendi alan adınızla değiştirmeyi unutmayın. Eğer henüz bir alan adınız yoksa, sunucunuzun IP adresini kullanabilirsiniz.

server {
    listen 80;
    listen [::]:80;

    root /var/www/example.com/html;
    index index.php index.html index.htm index.nginx-debian.html;

    server_name example.com www.example.com; # Kendi alan adınızı buraya yazın

    location / {
        try_files $uri $uri/ =404;
    }

    location ~ \.php$ {
        include snippets/fastcgi-php.conf;
        fastcgi_pass unix:/var/run/php/php7.4-fpm.sock; # PHP-FPM sürümünüze dikkat edin
    }

    location ~ /\.ht {
        deny all;
    }
}

Bu yapılandırma dosyasındaki önemli direktifler:

* listen 80;: Nginx’in 80 numaralı bağlantı noktasını (HTTP) dinlemesini sağlar.
* root /var/www/example.com/html;: Web sitenizin kök dizinini belirtir.
* index ...;: Varsayılan olarak aranacak dosya adlarını belirtir. index.php‘yi eklediğimizden emin olun.
* server_name example.com www.example.com;: Bu sunucu bloğunun hangi alan adları için geçerli olduğunu belirtir.
* location / { ... }: Herhangi bir isteğin nasıl işleneceğini tanımlar. try_files direktifi, dosyanın veya dizinin var olup olmadığını kontrol eder, yoksa 404 hatası döndürür.
* location ~ \.php$ { ... }: .php uzantılı dosya isteklerinin nasıl işleneceğini tanımlar.
* include snippets/fastcgi-php.conf;: PHP-FPM için FastCGI parametrelerini içerir.
* fastcgi_pass unix:/var/run/php/php7.4-fpm.sock;: İstekleri PHP-FPM’e iletir. Soket yolu PHP-FPM sürümünüze göre değişebilir (örn. php7.4-fpm.sock).
* location ~ /\.ht { ... }: .htaccess gibi gizli dosyaların doğrudan erişimini engeller. Nginx .htaccess dosyalarını kullanmaz, ancak bu bir güvenlik önlemidir.

Değişiklikleri kaydedip dosyadan çıkın.

Sunucu Bloğunu Etkinleştirme

Yeni sunucu bloğunu etkinleştirmek için, sites-available dizinindeki yapılandırma dosyanıza sites-enabled dizininde bir sembolik bağlantı (symlink) oluşturmanız gerekir:

sudo ln -s /etc/nginx/sites-available/example.com /etc/nginx/sites-enabled/

Nginx’in varsayılan yapılandırmasını devre dışı bırakmak iyi bir uygulamadır, böylece yeni yapılandırmanız çakışmaz:

sudo unlink /etc/nginx/sites-enabled/default

Nginx Yapılandırmasını Test Etme ve Yeniden Başlatma

Yeni yapılandırmanızın sözdizimsel olarak doğru olduğundan emin olmak için Nginx’i test edin:

sudo nginx -t

Eğer syntax is ok ve test is successful mesajlarını görürseniz, her şey yolundadır. Herhangi bir hata varsa, yapılandırma dosyanızı kontrol edin ve düzeltin.

Şimdi Nginx servisini yeniden başlatın, böylece yeni yapılandırmanız etkinleşir:

sudo systemctl restart nginx

PHP İşlemini Test Etme

LEMP yığınımızın düzgün çalıştığını doğrulamak için web sitenizin kök dizinine basit bir PHP bilgi dosyası oluşturalım.

sudo nano /var/www/example.com/html/info.php

Dosyanın içine aşağıdaki PHP kodunu yapıştırın:

Değişiklikleri kaydedip dosyadan çıkın.

Şimdi web tarayıcınızı açın ve http://your_domain_or_IP_address/info.php adresine gidin.

Eğer her şey doğru kurulduysa, PHP sürümünüz, yapılandırma ayarlarınız ve yüklü uzantılarınız hakkında detaylı bilgi içeren bir PHP bilgi sayfası görmelisiniz. Bu sayfa, Nginx’in PHP-FPM ile başarılı bir şekilde iletişim kurduğunu ve PHP betiklerini işleyebildiğini kanıtlar.

Önemli Güvenlik Notu: phpinfo.php dosyası, sunucunuz hakkında hassas bilgiler içerir. Testi tamamladıktan sonra bu dosyayı silmeniz şiddetle tavsiye edilir.

sudo rm /var/www/example.com/html/info.php

LEMP Yığınını Güvenli Hale Getirme

Temel LEMP kurulumunu tamamladınız, ancak bir üretim ortamı için sunucunuzu daha da güvenli hale getirmek kritik öneme sahiptir.

UFW Güvenlik Duvarı

Daha önce UFW’yi etkinleştirmiştik. Eğer Nginx Full profilini kullanmak isterseniz (HTTP ve HTTPS için), HTTP’yi kapatıp Full profilini açabilirsiniz:

sudo ufw delete allow 'Nginx HTTP'
sudo ufw allow 'Nginx Full'
sudo ufw status

Bu, hem 80 hem de 443 numaralı bağlantı noktalarına izin verecektir.

SSH Güvenliği

* SSH Anahtar Tabanlı Kimlik Doğrulama: Şifre tabanlı kimlik doğrulaması yerine SSH anahtar çiftleri kullanarak giriş yapın. Bu, kaba kuvvet saldırılarına karşı çok daha güvenlidir.
* Varsayılan SSH Portunu Değiştirme: SSH servisi için varsayılan 22 numaralı portu farklı bir portla değiştirmek, otomatik botların saldırılarını azaltabilir.
* Kök Kullanıcının Doğrudan Girişini Engelleme: PermitRootLogin no ayarını /etc/ssh/sshd_config dosyasında yaparak kök kullanıcının SSH üzerinden doğrudan oturum açmasını engelleyin. Bunun yerine, sudo yetkilerine sahip normal bir kullanıcı ile giriş yapın ve gerektiğinde sudo kullanın.

Nginx Güvenliği

* Nginx Sürümünü Gizleme: Nginx’in sürüm bilgisini HTTP yanıt başlıklarında gizlemek, potansiyel saldırganların belirli güvenlik açıklarını hedeflemesini zorlaştırır. server_tokens off; direktifini http veya server bloğuna ekleyin.
* SSL/TLS (HTTPS) Kurulumu: Tüm web trafiğinizi şifrelemek için SSL/TLS sertifikası kullanın. Let’s Encrypt, ücretsiz sertifikalar sunar ve Certbot aracıyla kolayca kurulabilir.

Let’s Encrypt ile SSL/TLS Kurulumu

Bu, web sitenizin güvenliği için olmazsa olmaz bir adımdır.

1. Certbot Kurulumu:

sudo apt install certbot python3-certbot-nginx -y

2. Sertifika Alma:

sudo certbot --nginx -d example.com -d www.example.com

Bu komutu çalıştırdığınızda, Certbot sizi bir dizi soruyla yönlendirecektir: e-posta adresiniz, hizmet şartlarını kabul etmeniz vb. Ayrıca, HTTP trafiğini otomatik olarak HTTPS’ye yönlendirmek isteyip istemediğinizi soracaktır. Genellikle “Redirect” seçeneğini seçmek iyi bir fikirdir.
3. Otomatik Yenileme Testi:
Let’s Encrypt sertifikaları 90 gün geçerlidir. Certbot, otomatik yenileme için bir cron işi veya systemd zamanlayıcısı kurar. Yenileme sürecinin çalıştığından emin olmak için bir test yapabilirsiniz:

sudo certbot renew --dry-run

Eğer herhangi bir hata görmezseniz, otomatik yenileme düzgün çalışıyor demektir.

Certbot kurulumundan sonra Nginx yapılandırma dosyanız otomatik olarak güncellenecek ve 80 numaralı porttan gelen istekler 443 numaralı porta yönlendirilecektir. Ayrıca, Nginx Full UFW kuralına izin verdiğinizden emin olun.

PHP Güvenliği

* disable_functions: php.ini dosyasında, sunucunuzda çalışmaması gereken tehlikeli PHP fonksiyonlarını devre dışı bırakın (örn. exec, shell_exec, passthru).
* allow_url_fopen ve allow_url_include: Bu ayarların devre dışı bırakılması, uzaktan dosya dahil etme (RFI) saldırılarını önlemeye yardımcı olabilir.
* Hata Raporlamasını Kapatma: Üretim ortamında display_errors = Off olarak ayarlayın. Hataları bir log dosyasına yazdırın (log_errors = On).
* PHP Sürümünü Güncel Tutma: Eski PHP sürümlerinde bilinen güvenlik açıkları olabilir. Her zaman en son stabil PHP sürümünü kullanmaya çalışın.

MySQL Güvenliği

* Güçlü Şifreler: Tüm MySQL kullanıcıları için güçlü ve benzersiz şifreler kullanın.
* En Az Ayrıcalık Prensibi: Uygulamalarınızın veritabanı kullanıcılarına yalnızca ihtiyaç duydukları ayrıcalıkları verin. Örneğin, bir web sitesi kullanıcısının DROP TABLE veya GRANT gibi ayrıcalıklara ihtiyacı yoktur.
* Uzak Erişimi Kısıtlama: MySQL kök kullanıcısının uzaktan erişimini engelledik. Diğer kullanıcılar için de uzaktan erişim gerekiyorsa, yalnızca belirli IP adreslerinden erişime izin verin.
* Düzenli Yedeklemeler: Veri kaybını önlemek için veritabanlarınızın düzenli yedeklerini alın.

Sonuç

Tebrikler! Ubuntu 20.04 sunucunuz üzerine Linux, Nginx, MySQL ve PHP (LEMP) yığınını başarıyla kurdunuz ve temel güvenlik yapılandırmalarını gerçekleştirdiniz. Bu kapsamlı rehber, modern web uygulamalarınız için sağlam ve yüksek performanslı bir temel oluşturmanıza yardımcı oldu.

Artık sunucunuz, dinamik web sitelerini ve uygulamalarını barındırmaya hazırdır. Bu kurulumun üzerine favori içerik yönetim sistemlerinizi (WordPress, Joomla, Drupal vb.) veya özel PHP tabanlı uygulamalarınızı dağıtabilirsiniz. Unutmayın ki sunucu yönetimi sürekli bir süreçtir. Sunucunuzu düzenli olarak güncellemek, güvenlik ayarlarınızı gözden geçirmek ve performansını izlemek, uzun vadede sorunsuz bir deneyim için kritik öneme sahiptir.

İleri düzey optimizasyonlar ve güvenlik önlemleri için Nginx, MySQL ve PHP’nin belgelerini incelemeyi düşünebilirsiniz. Örneğin, Nginx için önbellekleme (caching), PHP için OPcache kullanımı ve MySQL için sorgu optimizasyonu gibi konular, uygulamanızın performansını daha da artırabilir. Güvenliğiniz için ise fail2ban gibi araçlarla kaba kuvvet saldırılarını engellemeyi veya merkezi log yönetimi çözümlerini kullanmayı araştırabilirsiniz. Başarılar dileriz!

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

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.