Takip et

phpMyAdmin’i Nginx ile CentOS 7 Sunucusuna Kurma ve Güvenliğini Sağlama

phpMyAdmin’i Nginx ile CentOS 7 Sunucusuna Kurma ve Güvenliğini Sağlama Giriş Veritabanı yönetimi, modern web uygulamalarının ve sunucu altya

phpMyAdmin’i Nginx ile CentOS 7 Sunucusuna Kurma ve Güvenliğini Sağlama

Giriş

Veritabanı yönetimi, modern web uygulamalarının ve sunucu altyapılarının temel bir bileşenidir. MySQL ve MariaDB gibi ilişkisel veritabanı sistemleri, web geliştiricileri ve sistem yöneticileri arasında yaygın olarak kullanılmaktadır. Bu veritabanlarını komut satırı arayüzünden yönetmek çoğu zaman karmaşık ve zaman alıcı olabilir. İşte tam bu noktada phpMyAdmin devreye girer. phpMyAdmin, MySQL ve MariaDB veritabanlarını bir web tarayıcısı üzerinden kolayca yönetmenizi sağlayan ücretsiz ve açık kaynaklı bir araçtır. Veritabanı oluşturma, tabloları düzenleme, kullanıcıları yönetme, SQL sorguları çalıştırma ve veri içe/dışa aktarma gibi birçok işlemi grafiksel bir arayüzle yapmanıza olanak tanır.

Bu makalede, CentOS 7 işletim sistemi üzerinde Nginx web sunucusu ile phpMyAdmin’i nasıl kuracağınızı ve güvenliğini nasıl sağlayacağınızı adım adım detaylı bir şekilde anlatacağız. Nginx, yüksek performanslı, ölçeklenebilir ve kaynak dostu bir web sunucusu olarak bilinirken, CentOS 7 ise kurumsal düzeyde istikrar ve güvenlik sunan popüler bir Linux dağıtımıdır. Bu kombinasyon, phpMyAdmin için hem güçlü bir altyapı hem de güvenli bir ortam sağlayacaktır. Kurulum ve yapılandırma adımlarının yanı sıra, phpMyAdmin kurulumunuzu potansiyel güvenlik tehditlerine karşı korumak için çeşitli güvenlik önlemlerini de ele alacağız.

Ön Koşullar

Bu rehbere başlamadan önce, aşağıdaki ön koşulların sunucunuzda mevcut olduğundan emin olmalısınız:

* CentOS 7 Sunucusu: SSH erişimi olan ve sudo yetkilerine sahip bir CentOS 7 sunucusu.
* Nginx Kurulumu: Sunucunuzda Nginx web sunucusu kurulu ve çalışır durumda olmalıdır. Eğer kurulu değilse, kurulum adımlarını bu makalede bulabilirsiniz.
* PHP-FPM Kurulumu: PHP ve PHP-FPM (FastCGI Process Manager) kurulu ve Nginx ile entegre edilmiş olmalıdır. phpMyAdmin’in çalışması için gerekli PHP modülleri de kurulmalıdır.
* MariaDB/MySQL Kurulumu: Sunucunuzda MariaDB veya MySQL veritabanı sunucusu kurulu ve çalışır durumda olmalıdır. phpMyAdmin bu veritabanlarını yönetmek için kullanılacaktır.
* Firewall Yapılandırması: Sunucunuzda bir güvenlik duvarı (örneğin, firewalld) etkinse, web trafiğine (HTTP/HTTPS) izin verildiğinden emin olunmalıdır.

Bu ön koşullar tamamlandığında, phpMyAdmin kurulumuna ve yapılandırmasına başlayabiliriz.

Sistem Güncellemesi ve Gerekli Paketlerin Kurulumu

Kuruluma başlamadan önce, sisteminizin güncel olduğundan ve gerekli temel paketlerin yüklü olduğundan emin olmak her zaman iyi bir uygulamadır. Bu, potansiyel uyumluluk sorunlarını veya güvenlik açıklarını önlemeye yardımcı olur.

İlk olarak, sistemdeki tüm paketleri güncelleyin:

sudo yum update -y

Ardından, bazı yardımcı programları ve EPEL (Extra Packages for Enterprise Linux) deposunu yüklememiz gerekebilir. EPEL, CentOS için ek yazılımlar sağlayan bir depodur ve bazı bağımlılıkları karşılamak için faydalı olabilir. wget dosyaları indirmek, unzip ise sıkıştırılmış dosyaları açmak için gereklidir. policycoreutils-python ise SELinux yönetimi için kullanılır ve ilerleyen adımlarda ihtiyaç duyulabilir.

sudo yum install epel-release -y
sudo yum install wget unzip policycoreutils-python -y

Nginx Kurulumu (Eğer Kurulu Değilse)

Eğer sunucunuzda Nginx zaten kurulu ve yapılandırılmışsa bu adımı atlayabilirsiniz. Aksi takdirde, Nginx’i kurmak ve temel ayarlarını yapmak için aşağıdaki adımları izleyin.

Nginx’i CentOS deposundan kurun:

sudo yum install nginx -y

Kurulum tamamlandıktan sonra, Nginx servisini başlatın ve sistem başlangıcında otomatik olarak başlamasını sağlayın:

sudo systemctl start nginx
sudo systemctl enable nginx

CentOS 7’de varsayılan güvenlik duvarı firewalld‘dir. Nginx’in dışarıdan erişilebilir olması için HTTP ve HTTPS servislerine izin vermeniz gerekir:

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --permanent --add-service=https
sudo firewall-cmd --reload

Şimdi bir web tarayıcısından sunucunuzun IP adresine veya alan adına giderek Nginx’in çalışıp çalışmadığını kontrol edebilirsiniz. Varsayılan Nginx karşılama sayfasını görmelisiniz.

MariaDB/MySQL Kurulumu (Eğer Kurulu Değilse)

phpMyAdmin bir veritabanı yönetim aracı olduğundan, yönetilecek bir veritabanı sunucusuna ihtiyacınız vardır. Bu rehberde MariaDB’yi kullanacağız, ancak adımlar MySQL için de benzerdir. Eğer MariaDB/MySQL kuruluysa bu adımı atlayabilirsiniz.

MariaDB sunucusunu ve istemcisini kurun:

sudo yum install mariadb-server mariadb -y

Kurulumdan sonra MariaDB servisini başlatın ve sistem başlangıcında otomatik olarak başlamasını sağlayın:

sudo systemctl start mariadb
sudo systemctl enable mariadb

Yeni kurulmuş bir MariaDB sunucusunun güvenliğini sağlamak için mysql_secure_installation betiğini çalıştırmak çok önemlidir:

sudo mysql_secure_installation

Bu betik size bir dizi soru soracaktır:
* Enter current password for root (none): İlk kurulumda root parolası yoktur, bu yüzden sadece Enter’a basın.
* Set root password? [Y/n]: Y tuşuna basarak root kullanıcısı için güçlü bir parola belirleyin. Bu parolayı unutmayın!
* Remove anonymous users? [Y/n]: Y tuşuna basarak anonim kullanıcıları kaldırın.
* Disallow root login remotely? [Y/n]: Y tuşuna basarak root kullanıcısının uzaktan erişimini engelleyin. Bu, güvenlik açısından önemlidir.
* Remove test database and access to it? [Y/n]: Y tuşuna basarak test veritabanını kaldırın.
* Reload privilege tables now? [Y/n]: Y tuşuna basarak ayrıcalık tablolarını yeniden yükleyin.

Şimdi phpMyAdmin’in kullanacağı özel bir veritabanı ve kullanıcı oluşturalım. Bu, root kullanıcısını doğrudan kullanmaktan daha güvenlidir.

MariaDB kabuğuna root olarak giriş yapın:

sudo mysql -u root -p

Az önce belirlediğiniz root parolasını girin. Ardından aşağıdaki SQL komutlarını çalıştırın:

CREATE DATABASE phpmyadmin_db;
CREATE USER 'pmauser'@'localhost' IDENTIFIED BY 'STRONG_PASSWORD';
GRANT ALL PRIVILEGES ON phpmyadmin_db.* TO 'pmauser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

STRONG_PASSWORD yerine kendi güçlü parolanızı kullandığınızdan emin olun. Bu kullanıcı ve veritabanı phpMyAdmin’in kendi yapılandırma verilerini depolamak için kullanılabilir, ancak ana veritabanı işlemlerini gerçekleştirmek için değil. phpMyAdmin’e giriş yaparken genellikle gerçek veritabanı kullanıcılarınızı kullanırsınız.

PHP-FPM Kurulumu ve Yapılandırması

phpMyAdmin bir PHP uygulaması olduğu için, PHP ve Nginx ile PHP uygulamalarının çalışmasını sağlayan PHP-FPM’e ihtiyacımız var.

PHP ve gerekli PHP modüllerini kurun. phpMyAdmin’in düzgün çalışması için php-mysqlnd (MySQL/MariaDB bağlantısı için), php-gd (görüntü işleme için), php-mbstring (çok baytlı dizeler için), php-xml, php-json ve php-zip gibi modüller kritik öneme sahiptir.

sudo yum install php php-fpm php-mysqlnd php-gd php-mbstring php-xml php-json php-zip -y

Kurulumdan sonra, PHP-FPM yapılandırma dosyasında bazı değişiklikler yapmamız gerekebilir. Nginx ile düzgün çalışması için www.conf dosyasını düzenleyeceğiz:

sudo nano /etc/php-fpm.d/www.conf

Aşağıdaki satırları bulun ve düzenleyin:

1. user ve group değerlerini nginx olarak değiştirin (varsayılan olarak apache olabilir):

user = nginx
    group = nginx

2. listen satırını kontrol edin. Nginx ile PHP-FPM arasında iletişim için bir Unix soketi kullanmak genellikle daha performanslı ve güvenlidir:

listen = /run/php-fpm/www.sock

3. listen.owner ve listen.group değerlerini nginx olarak ayarlayın:

listen.owner = nginx
    listen.group = nginx

4. cgi.fix_pathinfo satırını bulun ve yorum satırından çıkarıp 0 olarak ayarlayın. Bu, güvenlik açıkları potansiyelini azaltır:

php_admin_value[cgi.fix_pathinfo] = 0

Dosyayı kaydedin ve kapatın (Ctrl+X, Y, Enter).

Şimdi PHP-FPM servisini başlatın ve sistem başlangıcında etkinleştirin:

sudo systemctl start php-fpm
sudo systemctl enable php-fpm

phpMyAdmin Kurulumu

Şimdi phpMyAdmin’in kendisini indirelim ve web sunucumuzun erişebileceği bir konuma yerleştirelim.

phpMyAdmin’in en son kararlı sürümünü resmi web sitesinden indirmek en iyisidir. En son sürümü kontrol etmek için phpMyAdmin indirme sayfasına (https://www.phpmyadmin.net/downloads/) gidin. Bu makalenin yazıldığı an itibarıyla güncel bir sürüm örneği kullanacağız, ancak siz her zaman en son sürümü kullanmalısınız.

cd /tmp
wget https://files.phpmyadmin.net/phpMyAdmin/5.2.1/phpMyAdmin-5.2.1-all-languages.zip

İndirilen zip dosyasını açın:

unzip phpMyAdmin-5.2.1-all-languages.zip

Açılan dizini Nginx’in web kök dizinine taşıyın. Genellikle /usr/share/nginx/html/ dizini kullanılır. phpMyAdmin’e daha kolay erişim için dizinin adını phpmyadmin olarak değiştirebilirsiniz:

sudo mv phpMyAdmin-5.2.1-all-languages /usr/share/nginx/html/phpmyadmin

Dizin ve dosyaların Nginx kullanıcısı tarafından okunabilir ve yazılabilir olduğundan emin olmak için doğru izinleri ayarlayın:

sudo chown -R nginx:nginx /usr/share/nginx/html/phpmyadmin
sudo chmod -R 755 /usr/share/nginx/html/phpmyadmin

phpMyAdmin Yapılandırması

phpMyAdmin’i kullanmadan önce temel bir yapılandırma dosyası oluşturmamız gerekiyor.

phpMyAdmin dizinine gidin:

cd /usr/share/nginx/html/phpmyadmin

Örnek yapılandırma dosyasını kopyalayarak kendi yapılandırma dosyamızı oluşturalım:

sudo cp config.sample.inc.php config.inc.php

Şimdi bu dosyayı düzenleyelim:

sudo nano config.inc.php

Dosya içinde aşağıdaki önemli ayarları bulup düzenleyin:

1. $cfg['blowfish_secret']: Bu, çerez tabanlı kimlik doğrulama için kullanılan rastgele bir paroladır. Güvenliğiniz için 32 karakterlik güçlü, rastgele bir dize oluşturmalısınız. Örneğin, aşağıdaki komutu kullanarak bir dize oluşturabilirsiniz:

openssl rand -base64 32

Çıktıyı kopyalayın ve $cfg['blowfish_secret'] satırına tırnak işaretleri arasına yapıştırın:

$cfg['blowfish_secret'] = 'YOUR_32_CHARACTER_RANDOM_STRING_HERE'; / YOU MUST FILL IN THIS FOR COOKIE AUTH! /

2. $cfg['Servers'][$i]['host']: MariaDB/MySQL sunucunuzun ana bilgisayar adını belirtir. Genellikle localhost‘tur:

$cfg['Servers'][$i]['host'] = 'localhost';

3. phpMyAdmin’in Yapılandırma Depolama Alanı (Opsiyonel ama Önerilir):
phpMyAdmin, bazı gelişmiş özellikler (ilişkiler, izleme, yer imleri vb.) için kendi özel tablolarını bir veritabanında depolayabilir. Bu, kullanıcı deneyimini artırır. Bu özelliği etkinleştirmek için, phpMyAdmin dizininde bulunan examples/create_tables.sql dosyasını MariaDB sunucunuza aktarmanız gerekir.

MariaDB kabuğuna girin:

sudo mysql -u root -p

Parolanızı girin ve ardından SQL dosyasını içe aktarın (phpMyAdmin’in kendi verilerini depolayacağı phpmyadmin_db veritabanına):

SOURCE /usr/share/nginx/html/phpmyadmin/examples/create_tables.sql;

phpmyadmin_db veritabanını kullanacağımızdan emin olmak için önce seçelim:

USE phpmyadmin_db;
    SOURCE /usr/share/nginx/html/phpmyadmin/examples/create_tables.sql;

Çıkış yapın:

EXIT;

Şimdi config.inc.php dosyasında bu ayarları etkinleştirelim. Dosyanın sonuna doğru aşağıdaki satırları bulup yorum satırından çıkarın ve kullanıcı/veritabanı adlarını doğru şekilde ayarlayın:

$cfg['Servers'][$i]['pmadb'] = 'phpmyadmin_db';
    $cfg['Servers'][$i]['bookmarktable'] = 'pma__bookmarks';
    $cfg['Servers'][$i]['relation'] = 'pma__relation';
    $cfg['Servers'][$i]['table_info'] = 'pma__table_info';
    $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';
    $cfg['Servers'][$i]['pdf_pages'] = 'pma__pdf_pages';
    $cfg['Servers'][$i]['column_info'] = 'pma__column_info';
    $cfg['Servers'][$i]['history'] = 'pma__history';
    $cfg['Servers'][$i]['table_uiprefs'] = 'pma__table_uiprefs';
    $cfg['Servers'][$i]['tracking'] = 'pma__tracking';
    $cfg['Servers'][$i]['userconfig'] = 'pma__userconfig';
    $cfg['Servers'][$i]['recent'] = 'pma__recent';
    $cfg['Servers'][$i]['favorite'] = 'pma__favorite';
    $cfg['Servers'][$i]['users'] = 'pma__users';
    $cfg['Servers'][$i]['usergroups'] = 'pma__usergroups';
    $cfg['Servers'][$i]['navigationhiding'] = 'pma__navigationhiding';
    $cfg['Servers'][$i]['savedsearches'] = 'pma__savedsearches';
    $cfg['Servers'][$i]['central_columns'] = 'pma__central_columns';
    $cfg['Servers'][$i]['designer_settings'] = 'pma__designer_settings';
    $cfg['Servers'][$i]['export_templates'] = 'pma__export_templates';
    $cfg['Servers'][$i]['advisory_controllocation'] = 'pma__advisory_controllocation';

Ayrıca, phpMyAdmin’in bu tablolara erişimi için pmauser kullanıcısını da yapılandırabilirsiniz, ancak bu genellikle gerekli değildir çünkü phpMyAdmin’e giriş yaparken veritabanı kullanıcılarınızı kullanırsınız. Bu ayarlar, phpMyAdmin’in kendi dahili meta verilerini depolamak için kullanılır.

Dosyayı kaydedin ve kapatın.

Nginx Yapılandırması

Son adım, Nginx’i phpMyAdmin’i sunacak şekilde yapılandırmaktır. Bunun için özel bir Nginx sunucu bloğu oluşturabilir veya mevcut bir sanal ana bilgisayar yapılandırmasına ekleme yapabilirsiniz. phpMyAdmin’i ayrı bir alt alan adı (örneğin, phpmyadmin.your_domain.com) veya bir alt dizin (örneğin, your_domain.com/phpmyadmin) üzerinden erişilebilir kılabilirsiniz. Güvenlik nedeniyle, ayrı bir alt alan adı kullanmak veya erişim URL’sini gizlemek daha iyidir.

Bu örnekte, /etc/nginx/conf.d/phpmyadmin.conf adında yeni bir yapılandırma dosyası oluşturacağız:

sudo nano /etc/nginx/conf.d/phpmyadmin.conf

Aşağıdaki yapılandırmayı dosyaya yapıştırın. your_domain.com yerine kendi alan adınızı veya sunucunuzun IP adresini kullanın:

server {
    listen 80;
    server_name your_domain.com; # phpMyAdmin'e erişmek için kullanacağınız alan adı veya IP

    root /usr/share/nginx/html/phpmyadmin;
    index index.php index.html index.htm;

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

    location ~ \.php$ {
        try_files $uri =404;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_index index.php;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        include fastcgi_params;
    }

    # phpMyAdmin'in hassas yapılandırma dosyalarına doğrudan erişimi engelle
    location ~ /(config\.inc\.php|README|LICENSE|ChangeLog|INSTALL\.txt|setup|sql|doc|examples)$ {
        deny all;
    }

    # Gizli dosyalara (.ht* gibi) erişimi engelle
    location ~ /\.ht {
        deny all;
    }
}

Yapılandırma Açıklaması:
* listen 80;: Nginx’in 80 numaralı porttan gelen HTTP isteklerini dinlemesini sağlar.
* server_name your_domain.com;: Bu sunucu bloğunun hangi alan adına yanıt vereceğini belirtir.
* root /usr/share/nginx/html/phpmyadmin;: phpMyAdmin dosyalarının bulunduğu dizini belirtir.
* index index.php index.html index.htm;: Dizine yapılan isteklerde hangi dosyaların öncelikli olarak aranacağını belirtir.
* location / { ... }: Tüm istekleri işler ve dosya bulunamazsa 404 hatası döndürür.
* location ~ \.php$ { ... }: .php uzantılı tüm istekleri PHP-FPM’e yönlendirir. fastcgi_pass ile PHP-FPM soketine bağlantı kurar.
* location ~ /(config\.inc\.php|...) { deny all; }: Bu önemli güvenlik bloğu, phpMyAdmin’in yapılandırma dosyaları, belgeler ve kurulum dosyaları gibi hassas dosyalara doğrudan web erişimini engeller.
* location ~ /\.ht { deny all; }: Apache’den kalan .htaccess gibi gizli dosyalara erişimi engeller (Nginx .htaccess kullanmaz, ancak bu bir güvenlik önlemidir).

Dosyayı kaydedin ve kapatın.

Nginx yapılandırmanızın sözdizimi açısından doğru olduğunu kontrol edin:

sudo nginx -t

Eğer syntax is ok ve test is successful mesajlarını görürseniz, Nginx’i yeniden yükleyerek yeni yapılandırmayı etkinleştirin:

sudo systemctl reload nginx

Şimdi bir web tarayıcısı açın ve http://your_domain.com (veya sunucunuzun IP adresi) adresine giderek phpMyAdmin giriş sayfasını görmelisiniz. MariaDB’ye oluşturduğunuz pmauser veya başka bir veritabanı kullanıcısı ile giriş yapabilirsiniz.

phpMyAdmin Güvenliğini Sağlama

phpMyAdmin, veritabanlarınıza doğrudan erişim sağladığı için potansiyel bir güvenlik riskidir. Kurulumdan sonra, uygulamanızı ve veritabanlarınızı yetkisiz erişimden korumak için ek güvenlik önlemleri almanız kritik öneme sahiptir.

1. phpMyAdmin URL’sini Değiştirme

Varsayılan olarak your_domain.com/phpmyadmin gibi kolay tahmin edilebilir bir URL üzerinden erişilebilir olması, saldırganların hedefi olmanızı kolaylaştırır. URL’yi daha karmaşık ve tahmin edilemez bir isimle değiştirmek, “security by obscurity” (belirsizlik yoluyla güvenlik) sağlasa da, ilk savunma hattı olarak faydalıdır.

phpMyAdmin dizininin adını değiştirin:

sudo mv /usr/share/nginx/html/phpmyadmin /usr/share/nginx/html/my_secret_pma_dashboard

my_secret_pma_dashboard yerine kendi seçtiğiniz karmaşık bir isim kullanın.

Ardından, Nginx yapılandırma dosyasını (/etc/nginx/conf.d/phpmyadmin.conf) açın ve root yönergesini yeni dizin adını gösterecek şekilde güncelleyin:

root /usr/share/nginx/html/my_secret_pma_dashboard;

Dosyayı kaydedin ve Nginx’i yeniden yükleyin:

sudo systemctl reload nginx

Artık phpMyAdmin’e yeni URL’den (http://your_domain.com/my_secret_pma_dashboard) erişebilirsiniz.

2. Nginx ile Temel Kimlik Doğrulama (Basic Authentication)

Nginx’in kendi temel kimlik doğrulama özelliğini kullanarak phpMyAdmin’e erişimi daha da kısıtlayabilirsiniz. Bu, phpMyAdmin’in kendi giriş ekranından önce bir Nginx kullanıcı adı/parola istemi gösterir.

İlk olarak, httpd-tools paketini yükleyerek htpasswd aracını edinin:

sudo yum install httpd-tools -y

Ardından, phpMyAdmin için bir kullanıcı adı ve parola oluşturun. Parola dosyasını /etc/nginx/.htpasswd_phpmyadmin gibi güvenli bir yere kaydedin:

sudo htpasswd -c /etc/nginx/.htpasswd_phpmyadmin pmaadmin

pmaadmin yerine istediğiniz bir kullanıcı adını kullanabilirsiniz. Komut, sizden yeni bir parola girmenizi isteyecektir.

Şimdi Nginx yapılandırma dosyasını (/etc/nginx/conf.d/phpmyadmin.conf) açın ve server bloğunun içine aşağıdaki satırları ekleyin:

location / {
        # ... diğer ayarlar ...
        auth_basic "Restricted Access";
        auth_basic_user_file /etc/nginx/.htpasswd_phpmyadmin;
    }

Bu ayarlar, / konumuna yapılan tüm istekler için temel kimlik doğrulamasını etkinleştirir. phpMyAdmin’e erişmeye çalıştığınızda, önce bu Nginx kimlik doğrulama penceresini göreceksiniz.

Dosyayı kaydedin ve Nginx’i yeniden yükleyin:

sudo systemctl reload nginx

3. IP Adresi Kısıtlaması

Eğer phpMyAdmin’e sadece belirli IP adreslerinden erişmeniz gerekiyorsa, Nginx yapılandırmanıza IP tabanlı kısıtlamalar ekleyebilirsiniz. Bu, sadece izin verilen IP adreslerinden gelen bağlantılara izin verirken, diğer tüm bağlantıları engeller.

Nginx yapılandırma dosyasını (/etc/nginx/conf.d/phpmyadmin.conf) açın ve server bloğunun içine aşağıdaki satırları ekleyin (tercihen location / bloğunun içine):

location / {
        # ... diğer ayarlar ...
        allow YOUR_IP_ADDRESS; # Kendi IP adresinizi buraya yazın
        deny all;              # Diğer tüm IP adreslerini engelle
    }

Birden fazla IP adresine izin vermek için her biri için ayrı bir allow satırı kullanabilirsiniz.

location / {
        allow 192.168.1.100; # Ofis IP adresiniz
        allow 203.0.113.50;  # Ev IP adresiniz
        deny all;
    }

Dosyayı kaydedin ve Nginx’i yeniden yükleyin:

sudo systemctl reload nginx

4. SSL/TLS Kullanımı (HTTPS)

phpMyAdmin’e erişimi her zaman HTTPS üzerinden sağlamak zorunludur. Bu, veritabanı kullanıcı adları, parolaları ve veritabanı içeriği gibi hassas verilerin ağ üzerinden şifrelenmesini sağlar. Let’s Encrypt, ücretsiz SSL/TLS sertifikaları sağlayan popüler bir sertifika yetkilisidir.

CentOS 7 üzerinde Let’s Encrypt (Certbot aracılığıyla) kurmak için aşağıdaki adımları izleyin:

sudo yum install certbot python2-certbot-nginx -y

Ardından, Nginx için bir sertifika alın:

sudo certbot --nginx -d your_domain.com

your_domain.com yerine phpMyAdmin’e erişmek için kullandığınız alan adını yazın. Certbot, sizden e-posta adresi girmenizi ve hizmet koşullarını kabul etmenizi isteyecektir. Başarılı olursa, Nginx yapılandırma dosyanızı otomatik olarak HTTPS’ye yönlendirme ve SSL ayarlarını içerecek şekilde güncelleyecektir.

Bu işlemden sonra Nginx yapılandırma dosyanız aşağıdaki gibi görünecektir (Certbot tarafından otomatik olarak eklenen kısımlar):

server {
    listen 443 ssl; # HTTPS için 443 portunu dinle
    server_name your_domain.com;

    ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
    ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
    include /etc/letsencrypt/options-ssl-nginx.conf;
    ssl_dhparam /etc/letsencrypt/ssl-dhparams.pem;

    root /usr/share/nginx/html/my_secret_pma_dashboard; # Yeni dizin adınız
    index index.php index.html index.htm;

    # ... diğer location blokları ve güvenlik ayarları ...
}

server {
    listen 80;
    server_name your_domain.com;
    return 301 https://$host$request_uri; # HTTP isteklerini HTTPS'ye yönlendir
}

Nginx’i yeniden yükleyin:

sudo systemctl reload nginx

Artık phpMyAdmin’e https://your_domain.com/my_secret_pma_dashboard adresinden güvenli bir şekilde erişmelisiniz.

5. phpMyAdmin Yapılandırma Dosyası Güvenliği

config.inc.php dosyası, hassas bilgileri (blowfish secret gibi) içerir. Bu dosyanın izinlerini kısıtlayarak sadece Nginx kullanıcısının okuyabilmesini sağlamak önemlidir.

sudo chmod 600 /usr/share/nginx/html/my_secret_pma_dashboard/config.inc.php
sudo chown nginx:nginx /usr/share/nginx/html/my_secret_pma_dashboard/config.inc.php

Ayrıca, Nginx yapılandırmasına zaten eklediğimiz gibi, bu dosyanın web üzerinden doğrudan erişimini tamamen engellemek önemlidir:

location ~ /(config\.inc\.php|README|LICENSE|ChangeLog|INSTALL\.txt|setup|sql|doc|examples)$ {
        deny all;
    }

6. Gereksiz Dosyaları Kaldırma

phpMyAdmin kurulumu, belgeler, örnekler ve kurulum betikleri gibi bazı gereksiz dosyalar içerebilir. Bunlar potansiyel güvenlik açıkları yaratabilir veya gereksiz bilgiler sağlayabilir.

setup, examples, doc ve sql dizinlerini kaldırabilirsiniz:

sudo rm -rf /usr/share/nginx/html/my_secret_pma_dashboard/setup/
sudo rm -rf /usr/share/nginx/html/my_secret_pma_dashboard/examples/
sudo rm -rf /usr/share/nginx/html/my_secret_pma_dashboard/doc/
sudo rm -rf /usr/share/nginx/html/my_secret_pma_dashboard/sql/

Ayrıca, README, LICENSE, ChangeLog, INSTALL.txt gibi dosyaları da kaldırabilirsiniz.

7. SELinux Ayarları

CentOS’ta SELinux (Security-Enhanced Linux) varsayılan olarak etkindir ve güvenlik için ek bir katman sağlar. Eğer phpMyAdmin’e veya veritabanına erişimde sorun yaşıyorsanız, SELinux politikalarını ayarlamanız gerekebilir.

phpMyAdmin dosyalarının Nginx tarafından doğru bağlamda sunulduğundan emin olun:

sudo semanage fcontext -a -t httpd_sys_content_t "/usr/share/nginx/html/my_secret_pma_dashboard(/.*)?"
sudo restorecon -Rv /usr/share/nginx/html/my_secret_pma_dashboard

Eğer phpMyAdmin, MariaDB/MySQL’e bağlanırken SELinux’tan kaynaklanan bir izin hatası verirse (genellikle Can't connect to local MySQL server through socket hatası), Nginx’in ağ bağlantısı kurmasına izin vermeniz gerekebilir:

sudo setsebool -P httpd_can_network_connect_db on

Bu komut, Nginx’in veritabanı sunucusuna ağ üzerinden bağlanmasına izin verir. httpd_can_connect_php boolean’ı da PHP-FPM ile iletişim sorunları yaşanırsa kontrol edilebilir, ancak PHP-FPM soketi genellikle nginx kullanıcısı ve grubu altında çalıştığı için bu nadiren bir sorun olur.

8. Güncel Kalma

Yazılım güncellemeleri, güvenlik yamaları ve hata düzeltmeleri içerir. phpMyAdmin, Nginx, PHP ve MariaDB/MySQL’i düzenli olarak güncel tutmak, bilinen güvenlik açıklarına karşı korunmanın en temel ve en önemli yoludur.

Sistem paketlerini düzenli olarak güncelleyin:

sudo yum update -y

phpMyAdmin’in yeni sürümleri çıktığında, yukarıdaki kurulum adımlarını takip ederek (yeni dosyaları indirip mevcut dizine taşıyarak ve izinleri ayarlayarak) manuel olarak güncellemeniz gerekebilir. Her zaman en son kararlı sürümü kullanmaya özen gösterin.

Sonuç

Bu makalede, CentOS 7 sunucusu üzerinde Nginx ile phpMyAdmin’i nasıl kuracağınızı ve güvenliğini nasıl sağlayacağınızı ayrıntılı olarak ele aldık. Adım adım kurulum sürecinden, MariaDB, PHP-FPM ve Nginx yapılandırmalarına kadar her bir aşamayı titizlikle inceledik. phpMyAdmin’in başarılı bir şekilde çalışır duruma getirilmesinin ardından, uygulamanızı ve veritabanlarınızı olası saldırılardan korumak için bir dizi kritik güvenlik önlemi üzerinde durduk.

Özetle, phpMyAdmin kurulumunuzun güvenliğini sağlamak için şu temel adımları izlemelisiniz:

* URL’yi Gizleme: phpMyAdmin dizin adını tahmin edilemez bir isimle değiştirerek ilk savunma hattını oluşturun.
* Temel Kimlik Doğrulama: Nginx’in kendi temel kimlik doğrulama mekanizmasını kullanarak ek bir parola katmanı ekleyin.
* IP Kısıtlaması: Yalnızca belirli, güvenilir IP adreslerinden erişime izin vererek yetkisiz erişimi önleyin.
* HTTPS Kullanımı: Let’s Encrypt gibi araçlarla SSL/TLS sertifikaları kullanarak tüm trafiği şifreleyin.
* Dosya İzinleri ve Erişimi: Hassas yapılandırma dosyalarının izinlerini kısıtlayın ve web üzerinden doğrudan erişimi engelleyin.
* Gereksiz Dosyaları Kaldırma: Kurulumla gelen ve güvenlik riski oluşturabilecek gereksiz dosyaları temizleyin.
* SELinux Yapılandırması: Gerekirse SELinux politikalarını düzenleyerek sistem güvenliğini artırın.
* Düzenli Güncellemeler: Tüm yazılım bileşenlerini (phpMyAdmin, Nginx, PHP, MariaDB) düzenli olarak güncelleyerek bilinen güvenlik açıklarına karşı korunun.

Bu kapsamlı rehber sayesinde, CentOS 7 sunucunuzda Nginx ile phpMyAdmin’i hem işlevsel hem de güvenli bir şekilde kullanmaya başlayabilirsiniz. Unutmayın ki güvenlik, sürekli bir süreçtir ve en iyi uygulamaları düzenli olarak gözden geçirmek ve uygulamak hayati önem taşır. Veritabanı yönetiminizde 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

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