Komutları üretim sunucusunda çalıştırmadan önce yedek alın ve mümkünse bir test ortamında deneyin. Yönetim erişiminizi (SSH, panel) kaybetmemek için ayar değişikliklerinde açık bir ikinci oturum bulundurun.
Bu rehberde ne yapacağız?
Apache veya LiteSpeed kullanan paylaşımlı hostinglerde sunucu yapılandırmasına erişemeseniz bile .htaccess güvenlik kuralları ile sitenizi ek bir katmanla koruyabilirsiniz. Bu rehberde dizin listelemeyi kapatacak, hassas dosyaları gizleyecek, güvenlik başlıklarını ekleyecek ve HTTPS yönlendirmesi kuracaksınız.
Rehber, web sitesi veya hosting yöneticilerine yöneliktir. Tahmini süre 20-30 dakikadır. Kurallar Apache 2.4 sözdizimine göredir; Nginx .htaccess dosyasını okumaz, o durumda aynı mantık sunucu yapılandırmasına yazılmalıdır.
Gereksinimler
- Apache (veya .htaccess uyumlu LiteSpeed) kullanan bir hosting ve dosya erişimi
- Sitenin kök dizininde (genellikle public_html) .htaccess dosyasını düzenleme yetkisi
- Mevcut .htaccess dosyasının yedeği; hatalı bir satır siteyi 500 hatasına düşürebilir
- Başlık kuralları için mod_headers modülünün etkin olması (çoğu hostingde etkindir)
Adım adım .htaccess ile güvenlik kuralları
1. Mevcut dosyanın yedeğini alın
Her değişiklikten önce dosyanın bir kopyasını saklayın. Sorun çıkarsa kopyayı geri yüklemek siteyi hemen kurtarır.
cp .htaccess .htaccess.yedek2. Dizin listelemeyi kapatın
İndeks dosyası olmayan bir dizine girildiğinde dosya listesinin görünmesi bilgi sızdırır. Aşağıdaki satır bunu engeller.
Options -Indexes
ServerSignature Off3. Hassas dosyalara erişimi engelleyin
Yapılandırma, ortam ve yedek dosyalarının tarayıcıdan okunabilmesi ciddi bir risktir. Aşağıdaki kural gizli noktalı dosyaları ve bazı hassas dosya türlerini engeller. WordPress kullanıyorsanız wp-config.php de listededir. FilesMatch yalnızca dosya adına bakar; .git gibi dizinlerin içeriği için ayrı bir RedirectMatch satırı gerekir.
<FilesMatch ^(wp-config[.]php|[.]env|[.]htaccess|[.]htpasswd)$>
Require all denied
</FilesMatch>
<FilesMatch [.](bak|sql|log|ini|sh|swp)$>
Require all denied
</FilesMatch>
RedirectMatch 404 /[.](git|svn)(/|$)Not: Bazı uygulamalar ini veya log uzantılı dosyalara ihtiyaç duyabilir; kuralı ekledikten sonra siteyi test edin.
4. Temel güvenlik başlıklarını ekleyin
Güvenlik başlıkları tarayıcıya ek koruma talimatları verir. Başlıkları IfModule içinde tanımlamak, modül yoksa hata alınmasını önler.
<IfModule mod_headers.c>
Header always set X-Content-Type-Options nosniff
Header always set X-Frame-Options SAMEORIGIN
Header always set Referrer-Policy strict-origin-when-cross-origin
Header always set Permissions-Policy geolocation=(),microphone=(),camera=()
</IfModule>Content-Security-Policy başlığı siteye özeldir; yanlış yazılırsa sayfayı bozar. Önce Content-Security-Policy-Report-Only ile deneyin.
5. HTTPS yönlendirmesi uygulayın
SSL sertifikanız kuruluysa tüm http isteklerini https’e kalıcı olarak yönlendirin. WordPress gibi uygulamaların kendi yeniden yazma blokları varsa bu satırları onların üstüne ekleyin.
RewriteEngine On
RewriteCond %{HTTPS} off
RewriteRule ^ https://%{HTTP_HOST}%{REQUEST_URI} [L,R=301]Proxy veya CDN arkasındaysanız https algılaması farklı çalışabilir ve yönlendirme döngüsü oluşabilir; bu durumda sağlayıcınızın belgesine bakın.
6. Gereksiz uç noktaları engelleyin
WordPress sitelerinde kullanmadığınız xmlrpc.php dosyası brute-force için sık hedeflenir. Kullanmıyorsanız erişimi kapatın. Uygulama bu dosyaya bağımlıysa (örneğin bazı mobil uygulamalar) kuralı eklemeyin.
<Files xmlrpc.php>
Require all denied
</Files>7. Yüklenen dizinde betik çalışmasını engelleyin
WordPress gibi sistemlerde yükleme klasöründe PHP çalışması, zararlı dosya yüklenmesi durumunda tehlikelidir. Yükleme klasörüne ayrı bir .htaccess ekleyin; kural phtml ve phar gibi PHP olarak çalışabilen uzantıları da kapsar.
<FilesMatch [.](php[0-9]?|phtml|phar)$>
Require all denied
</FilesMatch>Bu dosyayı yalnızca yüklemelerin tutulduğu dizine (WordPress için wp-content/uploads) koyun.
Doğrulama
Kuralların çalıştığını test edin.
curl -I https://siteniz.example/
curl -I https://siteniz.example/wp-config.php
curl -I https://siteniz.example/.git/config
curl -I http://siteniz.example/Beklenen sonuç: ilk istekte güvenlik başlıklarının görünmesi, wp-config.php için 403, .git/config için 404 yanıtı ve http adresinin 301 ile https’e yönlenmesidir. Ardından siteyi tarayıcıda gezip bozulma olmadığını doğrulayın.
Sık karşılaşılan sorunlar
- 500 Internal Server Error: Eklediğiniz satırlardan biri hatalıdır veya modül yoktur; yedeği geri yükleyin ve satırları tek tek ekleyin, hata günlüğüne bakın.
- Yönlendirme döngüsü: CDN veya proxy kaynaklı https algılama sorunudur; yönlendirme koşulunu sağlayıcıya uygun düzenleyin.
- Kurallar etkisiz: Sunucuda AllowOverride kapalı olabilir; hosting sağlayıcınızla görüşün.
- Eklenti veya tema bozuldu: Çok geniş dosya engelleme kuralı kaynak dosyaları engelliyor olabilir; kuralı daraltın.
Güvenlik ve bakım notları
- .htaccess tek başına yeterli koruma değildir; güncelleme ve güçlü parola ile birlikte kullanın.
- Dosyayı yalnızca gerekli kullanıcının yazabileceği şekilde koruyun.
- Kuralları bir bakım notunda belgeleyin; yıllar sonra neden eklendiği anlaşılsın.
- Büyük değişiklikleri önce test ortamında deneyin.
- Güvenlik başlıklarını periyodik olarak tarayıcı veya çevrimiçi başlık denetimiyle gözden geçirin.
- Mümkünse aynı kuralları sunucu yapılandırmasına taşıyın; bu daha hızlıdır.
Sık sorulan sorular
.htaccess dosyası sitemi yavaşlatır mı?
Apache her istekte dosyayı okur, ancak makul boyutta bir dosyanın etkisi ihmal edilebilir. Çok büyük kural setleri varsa sunucu yapılandırmasına taşımak daha verimlidir.
Nginx’te .htaccess çalışır mı?
Hayır. Nginx bu dosyayı okumaz; aynı kurallar sunucu veya location bloklarında yazılmalıdır. LiteSpeed ise .htaccess ile uyumludur.
Hatalı bir kural siteyi bozarsa ne yapmalıyım?
Yedek dosyayı geri yükleyin veya son eklediğiniz satırı silin. Hata günlüğü hangi satırın sorun çıkardığını genellikle gösterir.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- MariaDB yavaş sorgu günlüğü ve temel optimizasyonMariaDB yavaş sorgu günlüğünü açın, yavaş sorguları dumpslow ile analiz edin, EXPLAIN ile indeks eksiklerini bulun ve temel optimizasyonla veritabanı yükünü güvenle azaltın.
- CDN veya ters vekil arkasında gerçek istemci IP adresini alma (Nginx ve Apache)CDN veya ters vekil arkasında Nginx ve Apache günlüklerinde, PHP ve güvenlik araçlarında gerçek istemci IP adresini görmek için realip ve remoteip modüllerini güvenli biçimde yapılandırın.
- OPcache, gzip/brotli ve önbellek başlıklarıyla web performansıOPcache ile PHP başlangıç maliyetini düşürün, gzip ve brotli sıkıştırmasını Nginx ile Apache üzerinde açın ve doğru Cache-Control başlıklarıyla web performansını ölçülebilir biçimde artırın.
- php.ini güvenlik ayarlarıphp.ini güvenlik ayarlarını uygulayın: expose_php, disable_functions, open_basedir, hata gösterimi, oturum çerezleri ve dosya yükleme limitlerini PHP-FPM üzerinde güvenle sıkılaştırın.