Hosting Klasör Şifreleme Neden Gereklidir?
Birçok site yöneticisi, bir test ortamı veya yönetim paneli kurduktan sonra bu dizinlerin herhangi bir koruma olmadan herkese açık olduğunu fark eder. Klasör şifreleme, web sunucusu düzeyinde kimlik doğrulama (HTTP Basic Authentication) kullanarak yetkisiz erişimi önlemenin en basit ve en etkili yollarından biridir. Bu yöntem, uygulama düzeyindeki şifrelemenin aksine, programlama dili ve framework'ten bağımsız çalışır ve uygulamanızda bir güvenlik açığı olsa bile ek bir koruma katmanı oluşturur.
Bu makalede, popüler iki web sunucusu Apache ve Nginx üzerinde klasör şifreleme uygulamasını pratik ve gerçek örneklerle adım adım öğreteceğiz. Ayrıca bu yöntemin güvenliğini tehlikeye atabilecek yaygın hatalara da değineceğiz.
Birinci Yöntem: Apache'de .htaccess Dosyası ile Klasör Şifreleme
Apache, .htaccess dosyalarını kullanarak kimlik doğrulamayı kolayca ayarlamanıza olanak tanır. Bu yöntem, sunucunun ana yapılandırma dosyasına erişiminizin olmadığı paylaşımlı hostingler için oldukça uygundur.
Adım 1: Parola Dosyası Oluşturma
Öncelikle, kullanıcı adı ve hashlenmiş parolayı içeren bir dosya oluşturmalısınız. htpasswd aracı bu işlemi yapar. SSH erişiminiz varsa, aşağıdaki komutu çalıştırın:
htpasswd -c /home/kullanici/.htpasswd admin
Bu komut, belirtilen yolda .htpasswd adında yeni bir dosya oluşturur ve sizden admin kullanıcısının parolasını ister. Dosya zaten mevcutsa, üzerine yazmamak için -c seçeneğini kullanmayın.
Önemli Not: Parola dosyasını genel web dizininin (public_html) dışında tutun. Yukarıdaki örnekte, web üzerinden erişilemeyen /home/kullanici/ yoluna kaydettik.
Adım 2: .htaccess Dosyasını Ayarlama
Korumak istediğiniz klasöre (örneğin /public_html/admin/) bir .htaccess dosyası oluşturun ve içine aşağıdaki içeriği ekleyin:
AuthType Basic
AuthName "Yönetim Paneline Giriş"
AuthUserFile /home/kullanici/.htpasswd
Require valid-user
Komutların açıklaması:
AuthType Basic: Kimlik doğrulama türünü belirtir (Basic Authentication).AuthName: Kullanıcıya giriş penceresinde gösterilen mesaj.AuthUserFile: Parola dosyasının tam yolu.Require valid-user: Yalnızca parola dosyasında bulunan kullanıcılar giriş yapabilir.
Adım 3: Test ve Hata Ayıklama
Dosyaları kaydettikten sonra, korunan klasörün adresine tarayıcıdan gidin. Giriş penceresi görünmelidir. 500 Internal Server Error hatası alırsanız, muhtemelen AuthUserFile yolu yanlıştır veya Apache'de mod_auth_basic modülü etkin değildir.
Yaygın Hata: Birçok kullanıcı .htpasswd dosyasını public_html içine koyar. Bu tehlikelidir çünkü Apache doğru yapılandırılmamışsa, parola dosyası tarayıcıdan indirilebilir. Her zaman web kök dizininin dışına koyun.
İkinci Yöntem: Nginx'te Klasör Şifreleme
Nginx, kimlik doğrulama için farklı bir yöntem kullanır. Ayarları sunucu yapılandırma dosyasında (genellikle /etc/nginx/sites-available/ içinde) uygulamanız gerekir.
Adım 1: Parola Dosyası Oluşturma
Apache'de olduğu gibi htpasswd aracını kullanıyoruz. Araç yüklü değilse, aşağıdaki komutla yükleyin:
sudo apt install apache2-utils # Ubuntu/Debian için
Ardından parola dosyasını oluşturun:
sudo htpasswd -c /etc/nginx/.htpasswd admin
Adım 2: Sunucu Bloğunu Ayarlama
Site yapılandırma dosyanızı düzenleyin. Belirli bir klasörü (örneğin /test) korumak için location bloğu kullanıyoruz:
server {
listen 80;
server_name ornek.com;
location /test {
auth_basic "Test Ortamı - Lütfen Giriş Yapın";
auth_basic_user_file /etc/nginx/.htpasswd;
# Diğer ayarlar (örneğin proxy_pass veya root)
root /var/www/html;
index index.html;
}
# Sunucunun diğer ayarları
}
Değişiklikleri uyguladıktan sonra Nginx'i yeniden yükleyin:
sudo nginx -t # Yapılandırmanın doğruluğunu test etme
sudo systemctl reload nginx
Adım 3: Tüm Siteyi Koruma
Tüm siteyi parola ile korumak istiyorsanız, auth_basic komutlarını location içinde değil, server düzeyinde kullanın.
HTTP Basic Authentication Güvenlik ve Sınırlamalarının Karşılaştırması
Temel kimlik doğrulama (Basic Authentication), parolayı şifrelemez, yalnızca Base64 ile kodlar. Bu, HTTPS kullanmazsanız parolanın kolayca ele geçirilebileceği anlamına gelir. Bu nedenle:
- Mutlaka SSL/HTTPS kullanın. Sitenizde SSL sertifikası yoksa, parola ağ üzerinde düz metin olarak iletilir.
- Bu yöntem, yalnızca teknik ekibin erişebildiği dahili test ortamları veya yönetim panellerini korumak için uygundur.
- Genel kullanıcılar için OAuth veya Oturum tabanlı kimlik doğrulama gibi daha gelişmiş yöntemler kullanın.
Klasör Şifreleme için Pratik Kullanım Senaryoları
Test Ortamını Koruma (Staging)
Diyelim ki staging.ornek.com adresinde geliştirme aşamasında bir siteniz var. Klasör şifreleme ile yalnızca ekip üyelerinin görebilmesini sağlayabilirsiniz. Bu alan adının köküne bir .htaccess dosyası koymanız yeterlidir.
Yönetim Panelini Koruma
Yönetim paneliniz /admin yolundaysa, bu klasörü şifreleyerek ek bir güvenlik katmanı oluşturursunuz. Birisi WordPress veya Joomla şifresini bilse bile, panele erişmek için web sunucusu parolasını da girmesi gerekir.
İndirme Dizinlerini Koruma
Yalnızca belirli kullanıcıların erişmesi gereken özel dosyalar için indirme klasörünü şifreleyebilirsiniz. Bu yöntem, özel bir dosya yönetim sistemi uygulamaktan daha basittir.
Yaygın Hatalar ve Güvenlik İpuçları
- .htpasswd dosyasını public_html içine koymak: Daha önce de belirttiğimiz gibi, bu çok tehlikelidir. Parola dosyasını her zaman web kök dizininin dışında bir yola koyun.
- HTTPS kullanmamak: HTTP kullanırsanız, parola kolayca ele geçirilebilir. Mutlaka SSL sertifikası kullanın.
- .htaccess dosyasına erişimi kapatmayı unutmak: Apache'de
.htaccessdosyası varsayılan olarak web üzerinden erişilemez, ancak emin olmak için aşağıdaki komutu ekleyebilirsiniz:
<Files ".ht*">
Require all denied
</Files>
- Zayıf parola kullanmak: Büyük ve küçük harfler, sayılar ve sembollerin birleşiminden oluşan karmaşık parolalar kullanın.
Özet
Web sunucusu düzeyinde kimlik doğrulama kullanarak klasör şifreleme, hassas dizinleri korumak için hızlı, güvenilir ve uygulamadan bağımsız bir çözümdür. İster Apache ister Nginx kullanın, birkaç satır kodla sitenizin güvenliğini önemli ölçüde artırabilirsiniz. Unutmayın ki bu yöntem, uygulama düzeyindeki güvenliğin yerini almaz, ek bir savunma katmanıdır.
Hosting yönetiminiz için daha kapsamlı bir çözüm arıyorsanız, ServerNet barındırma hizmetleri bu ayarları kolayca uygulamanıza olanak tanır. Ancak uygulama detayları, hizmet türüne ve erişim seviyenize bağlıdır.