Güvenlik Yapılandırması
XOOPS Güvenlik Yapılandırması
Section titled “XOOPS Güvenlik Yapılandırması”XOOPS kurulumunuzu yaygın web güvenlik açıklarına karşı korumaya yönelik kapsamlı kılavuz.
Güvenlik Kontrol Listesi
Section titled “Güvenlik Kontrol Listesi”Sitenizi başlatmadan önce şu güvenlik önlemlerini uygulayın:
- Dosya izinleri doğru ayarlanmış (644/755)
- Kaldırılan veya korunan yükleme klasörü
- mainfile.php değişiklikten korundu
- SSL/HTTPS tüm sayfalarda etkin
- Yönetici klasörü yeniden adlandırıldı veya korundu
- Web’den erişilemeyen hassas dosyalar
- .htaccess kısıtlamaları mevcut
- Otomatik düzenli yedeklemeler
- Güvenlik başlıkları yapılandırıldı
- CSRF koruması etkin
- SQL enjeksiyon korumaları aktif
- Modules/extensions güncellendi
Dosya Sistemi Güvenliği
Section titled “Dosya Sistemi Güvenliği”Dosya İzinleri
Section titled “Dosya İzinleri”Uygun dosya izinleri güvenlik açısından kritik öneme sahiptir.
İzin Yönergeleri
Section titled “İzin Yönergeleri”| Yol | permissions | Sahibi | Nedeni |
|---|---|---|---|
| anadosya.php | 644 | kök | DB kimlik bilgilerini içerir |
| *.php dosyaları | 644 | kök | Yetkisiz değişiklikleri önleyin |
| Dizinler | 755 | kök | Okumaya izin ver, yazmayı engelle |
| cache/ | 777 | www-veri | Web sunucusu yazmalıdır |
| şablonlar_c/ | 777 | www-veri | Derlenmiş templates |
| yüklemeler/ | 777 | www-veri | user yüklemeleri |
| var/ | 777 | www-veri | Değişken veriler |
| yükle/ | Kaldır | - | Kurulumdan sonra sil |
| yapılandırmalar/ | 755 | kök | Okunabilir, yazılamaz |
İzin Komut Dosyasını Ayarlama
Section titled “İzin Komut Dosyasını Ayarlama”#!/bin/bashXOOPS_PATH="/var/www/html/xoops"WEB_USER="www-data"
# Set ownershipecho "Setting ownership..."chown -R $WEB_USER:$WEB_USER $XOOPS_PATH
# Set restrictive default permissionsecho "Setting base permissions..."find $XOOPS_PATH -type d -exec chmod 755 {} \;find $XOOPS_PATH -type f -exec chmod 644 {} \;
# Make specific directories writableecho "Setting writable directories..."chmod 777 $XOOPS_PATH/cachechmod 777 $XOOPS_PATH/templates_cchmod 777 $XOOPS_PATH/uploadschmod 777 $XOOPS_PATH/var
# Protect sensitive filesecho "Protecting sensitive files..."chmod 644 $XOOPS_PATH/mainfile.phpchmod 444 $XOOPS_PATH/mainfile.php.dist # If it exists (read-only)
# Verify permissionsecho "Verifying permissions..."ls -la $XOOPS_PATH | grep -E "mainfile|cache|uploads|var|templates_c"
echo "Security hardening completed!"Komut dosyasını çalıştırın:
chmod +x /usr/local/bin/xoops-secure.sh/usr/local/bin/xoops-secure.shKurulum Klasörünü Kaldır
Section titled “Kurulum Klasörünü Kaldır”CRITICAL: Kurulumdan sonra kurulum klasörü kaldırılmalıdır!
# Option 1: Delete completelyrm -rf /var/www/html/xoops/install/
# Option 2: Rename and keep for referencemv /var/www/html/xoops/install/ /var/www/html/xoops/install.bak/
# Verify removalls -la /var/www/html/xoops/ | grep installHassas Dizinleri Koruyun
Section titled “Hassas Dizinleri Koruyun”Hassas klasörlere web erişimini engellemek için .htaccess dosyaları oluşturun:
Dosya: /var/www/html/xoops/var/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
<IfModule mod_autoindex.c> Options -Indexes</IfModule>Dosya: /var/www/html/xoops/templates_c/.htaccess
<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar)$"> Deny from all</FilesMatch>
Options -IndexesDosya: /var/www/html/xoops/cache/.htaccess
Options -Indexes<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>Yükleme Dizinini Koruyun
Section titled “Yükleme Dizinini Koruyun”Yüklemelerde komut dosyalarının yürütülmesini önleyin:
Dosya: /var/www/html/xoops/uploads/.htaccess
# Prevent script execution<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7|phps|pht|phar|pl|py|jsp|asp|aspx|cgi|sh|bat|exe)$"> Deny from all</FilesMatch>
# Prevent directory listingOptions -Indexes
# Additional protection<IfModule mod_rewrite.c> RewriteEngine On RewriteBase /xoops/uploads/
# Block suspicious files RewriteCond %{REQUEST_URI} \.(php|phtml|php3|php4|php5|php6|php7)$ [NC] RewriteRule ^.*$ - [F,L]</IfModule>SSL/HTTPS Yapılandırma
Section titled “SSL/HTTPS Yapılandırma”Kullanıcılarla sunucunuz arasındaki tüm trafiği şifreleyin.
SSL Sertifikasını Alın
Section titled “SSL Sertifikasını Alın”Seçenek 1: Let’s Encrypt’ten Ücretsiz Sertifika
# Install Certbotapt-get install certbot python3-certbot-apache
# Obtain certificate (auto-configures Apache)certbot certonly --apache -d your-domain.com -d www.your-domain.com
# Verify certificate installedls /etc/letsencrypt/live/your-domain.com/Seçenek 2: Ticari SSL Sertifikası
SSL sağlayıcı veya kayıt şirketiyle iletişime geçin:
- SSL sertifikasını satın alın
- Alan adı sahipliğini doğrulayın
- Sertifika dosyalarını sunucuya yükleyin
- Web sunucusunu yapılandırın
Apache SSL Yapılandırma
Section titled “Apache SSL Yapılandırma”HTTPS sanal ana bilgisayar oluşturun:
Dosya: /etc/apache2/sites-available/xoops-ssl.conf
<VirtualHost *:443> ServerName your-domain.com ServerAlias www.your-domain.com DocumentRoot /var/www/html/xoops
# SSL Configuration SSLEngine on SSLProtocol TLSv1.2 TLSv1.3 SSLCipherSuite HIGH:!aNULL:!MD5 SSLCertificateFile /etc/letsencrypt/live/your-domain.com/cert.pem SSLCertificateKeyFile /etc/letsencrypt/live/your-domain.com/privkey.pem SSLCertificateChainFile /etc/letsencrypt/live/your-domain.com/chain.pem
# Security Headers Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" Header always set X-Content-Type-Options "nosniff" Header always set X-Frame-Options "SAMEORIGIN" Header always set X-XSS-Protection "1; mode=block" Header always set Referrer-Policy "no-referrer-when-downgrade" Header always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'"
<Directory /var/www/html/xoops> Options -Indexes +FollowSymLinks AllowOverride All Require all granted </Directory>
# Restrict install folder <Directory /var/www/html/xoops/install> Deny from all </Directory>
# Logging ErrorLog ${APACHE_LOG_DIR}/xoops_ssl_error.log CustomLog ${APACHE_LOG_DIR}/xoops_ssl_access.log combined</VirtualHost>
# Redirect HTTP to HTTPS<VirtualHost *:80> ServerName your-domain.com ServerAlias www.your-domain.com Redirect 301 / https://your-domain.com/</VirtualHost>Yapılandırmayı etkinleştirin:
# Enable SSL modulea2enmod ssl
# Enable sitea2ensite xoops-ssl
# Disable non-SSL site if existsa2dissite 000-default
# Test configurationapache2ctl configtest# Should output: Syntax OK
# Restart Apachesystemctl restart apache2Nginx SSL Yapılandırma
Section titled “Nginx SSL Yapılandırma”Dosya: /etc/nginx/sites-available/xoops
# HTTP to HTTPS redirectserver { listen 80; listen [::]:80; server_name your-domain.com www.your-domain.com;
location / { return 301 https://$server_name$request_uri; }}
# HTTPS serverserver { listen 443 ssl http2; listen [::]:443 ssl http2;
server_name your-domain.com www.your-domain.com; root /var/www/html/xoops; index index.php index.html;
# SSL Certificate Configuration ssl_certificate /etc/letsencrypt/live/your-domain.com/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/your-domain.com/privkey.pem;
# Modern SSL Configuration ssl_protocols TLSv1.2 TLSv1.3; ssl_ciphers HIGH:!aNULL:!MD5; ssl_prefer_server_ciphers on; ssl_session_cache shared:SSL:10m; ssl_session_timeout 10m;
# HSTS Header add_header Strict-Transport-Security "max-age=31536000; includeSubDomains; preload" always;
# Security Headers add_header X-Content-Type-Options "nosniff" always; add_header X-Frame-Options "SAMEORIGIN" always; add_header X-XSS-Protection "1; mode=block" always; add_header Referrer-Policy "no-referrer-when-downgrade" always; add_header Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'" always;
# Restrict install folder location ~ ^/(install|upgrade)/ { deny all; }
# Deny access to sensitive files location ~ /\. { deny all; }
# PHP-FPM backend location ~ \.php$ { fastcgi_pass unix:/run/php-fpm.sock; fastcgi_index index.php; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; }
# Static files caching location ~* \.(js|css|png|jpg|gif|ico|svg)$ { expires 30d; add_header Cache-Control "public, immutable"; }
# URL rewriting location / { try_files $uri $uri/ /index.php?$query_string; }
# Logging access_log /var/log/nginx/xoops_access.log; error_log /var/log/nginx/xoops_error.log;}Yapılandırmayı etkinleştirin:
ln -s /etc/nginx/sites-available/xoops /etc/nginx/sites-enabled/nginx -tsystemctl restart nginxHTTPS Kurulumunu Doğrulayın
Section titled “HTTPS Kurulumunu Doğrulayın”# Test SSL configurationopenssl s_client -connect your-domain.com:443 -tls1_2
# Check certificate validityopenssl x509 -in /etc/letsencrypt/live/your-domain.com/cert.pem -noout -text
# SSL/TLS test online# https://www.ssllabs.com/ssltest/# https://www.testssl.sh/Otomatik Yenile Let’s Encrypt Sertifikası
Section titled “Otomatik Yenile Let’s Encrypt Sertifikası”# Enable auto-renewalsystemctl enable certbot.timersystemctl start certbot.timer
# Test renewal processcertbot renew --dry-run
# Manual renewal if neededcertbot renew --force-renewalWeb Uygulaması Güvenliği
Section titled “Web Uygulaması Güvenliği”SQL Enjeksiyonuna Karşı Koruyun
Section titled “SQL Enjeksiyonuna Karşı Koruyun”XOOPS parametreli sorgular kullanır (varsayılan olarak güvenlidir), ancak her zaman:
// UNSAFE - Never do this!$query = "SELECT * FROM users WHERE name = '" . $_GET['name'] . "'";
// SAFE - Use prepared statements$database = XoopsDatabaseFactory::getDatabaseConnection();$sql = "SELECT * FROM " . $database->prefix('users') . " WHERE name = ?";$result = $database->query($sql, array($_GET['name']));Siteler Arası Komut Dosyası Çalıştırmayı (XSS) Önleme
Section titled “Siteler Arası Komut Dosyası Çalıştırmayı (XSS) Önleme”user girişini her zaman sterilize edin:
// UNSAFEecho $_GET['user_input'];
// SAFE - Use XOOPS sanitization functionsecho htmlspecialchars($_GET['user_input'], ENT_QUOTES, 'UTF-8');
// Or use XOOPS functions$text_sanitizer = new xoops_text_sanitizer();echo $text_sanitizer->stripSlashesGPC($_GET['user_input']);Siteler Arası İstek Sahteciliği (CSRF) Önleme
Section titled “Siteler Arası İstek Sahteciliği (CSRF) Önleme”XOOPS, CSRF jeton korumasını içerir. Her zaman belirteçleri ekleyin:
<!-- In forms --><form method="post"> {xoops_token form=update} <input type="text" name="field"> <input type="submit"></form>Yükleme Klasöründe PHP Yürütmeyi Devre Dışı Bırak
Section titled “Yükleme Klasöründe PHP Yürütmeyi Devre Dışı Bırak”Saldırganların PHP’yi yüklemesini ve çalıştırmasını önleyin:
# Create .htaccess in uploads foldercat > /var/www/html/xoops/uploads/.htaccess << 'EOF'<FilesMatch "\.(php|phtml|php3|php4|php5|php6|php7)$"> Deny from all</FilesMatch>php_flag engine offEOF
# Alternative: Disable execution globally in uploadschmod 444 /var/www/html/xoops/uploads/ # Read-onlyGüvenlik Başlıkları
Section titled “Güvenlik Başlıkları”Önemli HTTP güvenlik başlıklarını yapılandırın:
# Strict-Transport-Security (HSTS)# Forces HTTPS for 1 yearHeader always set Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
# X-Content-Type-Options# Prevents MIME type sniffingHeader always set X-Content-Type-Options "nosniff"
# X-Frame-Options# Prevents clickjacking attacksHeader always set X-Frame-Options "SAMEORIGIN"
# X-XSS-Protection# Browser XSS protectionHeader always set X-XSS-Protection "1; mode=block"
# Referrer-Policy# Controls referrer informationHeader always set Referrer-Policy "strict-origin-when-cross-origin"
# Content-Security-Policy# Controls resource loadingHeader always set Content-Security-Policy "default-src 'self'; script-src 'self' 'unsafe-inline'; style-src 'self' 'unsafe-inline'; img-src 'self' data: https:; font-src 'self'"Yönetici Paneli Güvenliği
Section titled “Yönetici Paneli Güvenliği”Yönetici Klasörünü Yeniden Adlandırın
Section titled “Yönetici Klasörünü Yeniden Adlandırın”Yönetici klasörünü yeniden adlandırarak koruyun:
# Rename admin foldermv /var/www/html/xoops/admin /var/www/html/xoops/myadmin123
# Update admin access URL# Old: http://your-domain.com/xoops/admin/# New: http://your-domain.com/xoops/myadmin123/XOOPS’yi yeniden adlandırılmış klasörü kullanacak şekilde yapılandırın:
Mainfile.php’yi düzenleyin:
// Change this linedefine('XOOPS_ADMIN_PATH', '/var/www/html/xoops/myadmin123');Yönetici için IP Beyaz Listesine Ekleme
Section titled “Yönetici için IP Beyaz Listesine Ekleme”Yönetici erişimini belirli IP’lerle kısıtlayın:
Dosya: /var/www/html/xoops/myadmin123/.htaccess
# Allow only specific IPs<RequireAll> Require ip 192.168.1.100 # Your office IP Require ip 203.0.113.50 # Your home IP Deny from all</RequireAll>Veya Apache 2.2 ile:
Order Deny,AllowDeny from allAllow from 192.168.1.100 203.0.113.50Güçlü Yönetici Kimlik Bilgileri
Section titled “Güçlü Yönetici Kimlik Bilgileri”Yöneticiler için güçlü şifreler uygulayın:
- En az 16 karakter kullanın
- Büyük harf, küçük harf, sayı ve simgeleri karıştırın
- Şifrenizi düzenli olarak değiştirin (90 günde bir)
- Bir şifre yöneticisi kullanın
- Varsa iki faktörlü kimlik doğrulamayı etkinleştirin
Yönetici Etkinliğini İzleyin
Section titled “Yönetici Etkinliğini İzleyin”Yönetici oturum açma günlüğünü etkinleştirin:
Yönetici Paneli > Sistem > Tercihler > user Ayarları
Log Admin Logins: YesLog Failed Login Attempts: YesAlert Email on Admin Login: YesGünlükleri düzenli olarak inceleyin:
# Check database for login attemptsmysql -u xoops_user -p xoops_db << EOFSELECT uid, uname, DATE_FROM_UNIXTIME(user_lastlogin) as last_loginFROM xoops_users WHERE uid = 1;EOFDüzenli Bakım
Section titled “Düzenli Bakım”Güncelleme XOOPS ve modules
Section titled “Güncelleme XOOPS ve modules”XOOPS’yi ve tüm modülleri güncel tutun:
# Check for updates in admin panel# Admin > Modules > Check for Updates
# Or via command linecd /var/www/html/xoops# Download and install latest version# Follow upgrade guideOtomatik Güvenlik Taraması
Section titled “Otomatik Güvenlik Taraması”#!/bin/bash# Security audit script
# Check file permissionsecho "Checking file permissions..."find /var/www/html/xoops -type f ! -perm 644 ! -name "*.htaccess" | head -10
# Check for suspicious filesecho "Checking for suspicious files..."find /var/www/html/xoops -type f -name "*.php" -newer /var/www/html/xoops/install/ 2>/dev/null
# Check database for suspicious activityecho "Checking for failed login attempts..."mysql -u xoops_user -p xoops_db << EOFSELECT count(*) as attempts FROM xoops_audittrail WHERE action LIKE '%login%' AND status = 0;EOFDüzenli Yedeklemeler
Section titled “Düzenli Yedeklemeler”Günlük yedeklemeleri otomatikleştirin:
#!/bin/bash# Daily backup script
BACKUP_DIR="/backups/xoops"RETENTION=30 # Keep 30 days
# Backup databasemysqldump -u xoops_user -p xoops_db | gzip > $BACKUP_DIR/db_$(date +%Y%m%d).sql.gz
# Backup filestar -czf $BACKUP_DIR/files_$(date +%Y%m%d).tar.gz /var/www/html/xoops --exclude=cache --exclude=templates_c
# Remove old backupsfind $BACKUP_DIR -type f -mtime +$RETENTION -delete
echo "Backup completed at $(date)"Cron ile zamanlama:
# Edit crontabcrontab -e
# Add line (runs daily at 2 AM)0 2 * * * /usr/local/bin/xoops-backup.sh >> /var/log/xoops_backup.log 2>&1Güvenlik Kontrol Listesi Şablonu
Section titled “Güvenlik Kontrol Listesi Şablonu”Düzenli güvenlik denetimleri için bu şablonu kullanın:
Weekly Security Checklist========================
Date: ___________Checked by: ___________
File System:[ ] Permissions correct (644/755)[ ] Install folder removed[ ] No suspicious files[ ] mainfile.php protected
Web Security:[ ] HTTPS/SSL working[ ] Security headers present[ ] Admin panel restricted[ ] File upload restrictions active[ ] Login attempts logged
Application:[ ] XOOPS version current[ ] All modules updated[ ] No error messages in logs[ ] Database optimized[ ] Cache cleared
Backups:[ ] Database backed up[ ] Files backed up[ ] Backup tested[ ] Offsite copy verified
Issues Found:1. ___________2. ___________3. ___________
Actions Taken:1. ___________2. ___________Güvenlik Kaynakları
Section titled “Güvenlik Kaynakları”- Sunucu Gereksinimleri
- Temel Yapılandırma
- Performans Optimizasyonu
- OWASP İlk 10: https://owasp.org/www-project-top-ten/
Etiketler: #güvenlik #ssl #https #sertleştirme #en iyi uygulamalar
İlgili Makaleler:
- ../Installation/Installation
- ../../06-Publisher-Module/User-Guide/Basic-Configuration
- Sistem Ayarları
- ../Installation/Upgrading-XOOPS