Apache 403 Forbidden Hatası Nedir? Nasıl Çözülür?
Apache 403 hatası dosya izinleri veya .htaccess kısıtlamasından kaynaklanır. İzin düzeltme ve konfigürasyon adımlarıyla çözün.
Apache 403 Forbidden Hatası Nedir?
Apache 403 Forbidden hatası, web sunucusunun talep edilen kaynağa erişmek için istemcinin gerekli yetkiye sahip olmadığını bildirdiği bir HTTP yanıt kodudur. 401 Unauthorized hatasından farklı olarak, 403 hatasında kimlik doğrulama bile erişimi sağlamaz; sunucu kaynağın varlığını kabul etmekte ancak erişimi kesinlikle reddetmektedir.
Bu hata son derece geniş bir yelpazeden kaynaklanabilir. Dosya sistemi izinlerinin yanlış yapılandırılması (örneğin dizin izinlerinin 700 veya dosya izinlerinin 600 olması), .htaccess dosyasındaki erişim kısıtlamaları, mod_security kurallarının tetiklenmesi, DirectoryIndex yönergesinin eksik olması, IP tabanlı kısıtlamalar veya SELinux politikaları 403 hatasına yol açabilir. Sorunu teşhis etmek için Apache hata loglarını incelemek her zaman ilk adım olmalıdır.
Olası Nedenler
- Yanlış dosya/dizin izinleri: Dizinler en az 755, dosyalar en az 644 olmalıdır.
- .htaccess kısıtlaması: Deny from all veya Options -Indexes direktifleri.
- DirectoryIndex eksikliği: index.html veya index.php dizinde yok ve dizin listeleme kapalı.
- mod_security engeli: WAF kuralları isteği kötü amaçlı olarak değerlendirdi.
- IP kısıtlaması: Allow/Deny direktifleri veya Require ip ile belirli IP'ler engellendi.
- SELinux context hatası: Dosyaların SELinux güvenlik etiketi yanlış ayarlanmış.
Çözüm Adımları
Apache Ortamında Hata Logu İnceleme
403 hatasının gerçek sebebini Apache error log dosyasından öğrenin.
# Ubuntu/Debian
sudo tail -50 /var/log/apache2/error.log
# CentOS/AlmaLinux
sudo tail -50 /var/log/httpd/error_log
# Belirli bir site için
sudo tail -50 /var/log/apache2/siteniz-error.log
# Gerçek zamanlı log takibi
sudo tail -f /var/log/apache2/error.log | grep 403
Dosya ve Dizin İzinlerini Düzeltme
Dosya sistemi izinleri 403 hatasının en yaygın nedenidir. Apache işlemi (www-data veya apache) dosyaları okuyabilmelidir.
# Apache kullanıcısını öğren
ps aux | grep apache | head -3
# Genellikle www-data (Debian) veya apache (CentOS)
# Web kök dizininin iznini kontrol et
ls -la /var/www/html/
ls -la /var/www/html/index.php
# Dizinleri 755 yap
find /var/www/html -type d -exec chmod 755 {} \;
# Dosyaları 644 yap
find /var/www/html -type f -exec chmod 644 {} \;
# Sahipliği www-data'ya ver
sudo chown -R www-data:www-data /var/www/html
# Belirli dosyayı kontrol et
stat /var/www/html/index.php
.htaccess Sorunlarını Giderme
.htaccess dosyasındaki yanlış direktifler 403'e neden olabilir. Dosyayı geçici olarak devre dışı bırakarak test edin.
cd /var/www/html
# .htaccess'i geçici olarak yedekle ve yeniden adlandır
sudo mv .htaccess .htaccess.bak
# Siteyi test et - 403 gittiyse .htaccess suçlu
# .htaccess içeriğini kontrol et
cat .htaccess.bak | grep -i "deny\|forbidden\|require\|order"
# Yaygın sorunlu direktifler:
# Options -Indexes → Dizin listelemesini kapatır (sorun değil)
# Deny from all → HERKESİ engeller (sorun!)
# Require ip 1.2.3.4 → Sadece bu IP erişebilir
# AllowOverride direktifinin açık olduğunu kontrol et
sudo grep -r "AllowOverride" /etc/apache2/
Apache VirtualHost Yapılandırması
VirtualHost konfigürasyonundaki Require ve Options direktiflerini kontrol edin.
sudo nano /etc/apache2/sites-available/siteniz.conf
<VirtualHost *:80>
ServerName siteniz.com
DocumentRoot /var/www/html/siteniz
<Directory /var/www/html/siteniz>
Options Indexes FollowSymLinks
AllowOverride All
Require all granted
</Directory>
ErrorLog ${APACHE_LOG_DIR}/siteniz-error.log
CustomLog ${APACHE_LOG_DIR}/siteniz-access.log combined
</VirtualHost>
sudo apachectl configtest
sudo systemctl reload apache2
DirectoryIndex Eksikliği
Dizinde index dosyası yoksa ve dizin listeleme kapalıysa 403 oluşur.
# Dizinde index dosyası var mı?
ls /var/www/html/
# DirectoryIndex direktifini kontrol et
grep -r "DirectoryIndex" /etc/apache2/
# Apache konfigürasyonuna ekle
sudo nano /etc/apache2/apache2.conf
# DirectoryIndex index.php index.html index.htm
# Veya VirtualHost bloğuna:
# DirectoryIndex index.php index.html
sudo systemctl restart apache2
mod_security Engel Kaldırma
WAF (Web Application Firewall) olan mod_security meşru istekleri engelliyor olabilir.
# mod_security log dosyası
sudo tail -50 /var/log/apache2/modsec_audit.log
# Belirli bir kural ID'sini devre dışı bırak (örn: 949110)
sudo nano /etc/apache2/mods-enabled/security2.conf
# SecRuleRemoveById 949110
# Tüm site için mod_security'yi geçici kapat (test için)
sudo nano /etc/apache2/sites-available/siteniz.conf
# SecRuleEngine Off
sudo systemctl restart apache2
cPanel Ortamında 403 Çözümü
cPanel hosting kullanıyorsanız dosya izinleri ve .htaccess cPanel araçlarıyla düzeltilebilir.
# cPanel > File Manager > Select All > Change Permissions
# Dizinler: 755, Dosyalar: 644
# cPanel > Error Logs > 403 hata detaylarını gör
# cPanel > ModSecurity > Engellenen IP'leri görüntüle ve kaldır
# SSH ile hızlı çözüm
chmod 755 ~/public_html
find ~/public_html -type d -exec chmod 755 {} \;
find ~/public_html -type f -exec chmod 644 {} \;
SELinux Context Düzeltme (CentOS/AlmaLinux)
SELinux aktifse dosyaların httpd_sys_content_t etiketine sahip olması gerekir.
# SELinux durumu
getenforce
# Dosyanın SELinux etiketini kontrol et
ls -lZ /var/www/html/index.php
# Doğru etiketi uygula
sudo restorecon -Rv /var/www/html/
# Veya manuel olarak
sudo chcon -R -t httpd_sys_content_t /var/www/html/
# PHP yazma izni gereken dizinler için
sudo chcon -R -t httpd_sys_rw_content_t /var/www/html/wp-content/uploads/
Özet ve Önleyici Tedbirler
- Web uygulama dosyalarını her zaman dizinler 755, dosyalar 644 izniyle tutun.
- .htaccess değişikliklerinden önce yedek alın;
apachectl configtestile sözdizimini doğrulayın. - mod_security kurallarını gerçek zamanlı izleyin; yanlış pozitif tespitlerinde kural ID'sini devre dışı bırakın.
- CentOS/AlmaLinux'ta
restoreconkomutunu dosya yüklemelerinden sonra çalıştırın. - Apache VirtualHost konfigürasyonlarında her zaman açık
Require all granteddirektifini kullanın. - Düzenli olarak Apache hata loglarını inceleyin; olağan dışı 403 artışlarını fark edin.
İlgili Makaleler
- Apache .htaccess ile Yönlendirme Güvenlik ve Optimizasyon
- Apache Web Sunucusu Nasıl Kurulur? Ubuntu ve AlmaLinux Rehberi
- WordPress Sonsuz Yönlendirme Döngüsü Çözümü (Too Many Redirects)
- WordPress 500 Internal Server Error Nasıl Çözülür?
- Linux Firewall: firewalld ve UFW ile HTTP, HTTPS ve SSH Kuralları
Yorumlar
Henüz yorum yok. İlk yorumu siz yapın!