Apache web sunucusu, varsayılan ayarlarında dizin listeleme (directory listing) özelliğini etkin tutar.
Apache web sunucusu, varsayılan ayarlarında dizin listeleme (directory listing) özelliğini etkin tutar. Bu özellik, bir dizin içinde index dosyası (örneğin index.html veya index.php) bulunmadığında, o dizindeki tüm dosyaları ve alt dizinleri ziyaretçilere listeler. Ancak bu durum, güvenlik açısından ciddi riskler taşır. Hassas dosyaların unintended olarak ifşa olması, sunucu kaynaklarının kötüye kullanılması gibi sorunlar ortaya çıkabilir. Bu makalede, Apache sunucusunda directory listing özelliğini güvenli ve etkili bir şekilde nasıl kapatacağınızı adım adım anlatacağız. Kurumsal ortamlar için optimize edilmiş yöntemleri ele alarak, sunucunuzun güvenliğini artıracak pratik çözümler sunacağız.
Dizin listeleme, Apache’nin Options direktifiyle yönetilen bir davranıştır. Etkin olduğunda, bir web dizinine erişildiğinde dosya yöneticisi benzeri bir liste görüntülenir. Bu, geliştirme aşamalarında faydalı olsa da, üretim ortamlarında büyük bir güvenlik açığıdır. Saldırganlar, dizin listesini tarayarak yapılandırma dosyaları, yedeklemeler veya gizli script’leri keşfedebilir. Örneğin, config.php veya .env gibi dosyalar listelendiğinde veritabanı kimlik bilgileri ifşa olabilir.
Kapatmanın önemi, OWASP gibi güvenlik standartlarında da vurgulanır. Dizin listeleme devre dışı bırakıldığında, 404 hatası döndürülerek erişim engellenir. Bu, yalnızca güvenlik değil, aynı zamanda performans sağlar; gereksiz listelemeler sunucu yükünü azaltır. Kurumsal sunucularda, PCI DSS veya GDPR uyumluluğu için zorunludur. Kapatma işlemi, sunucuyu yeniden başlatmadan bile uygulanabilir ve hemen etkilidir.
Apache’te directory listing’i kapatmanın en yaygın yolu, Options direktifini kullanmaktır. Bu direktif, Options -Indexes şeklinde belirtilerek listeleme özelliği devre dışı bırakılır. Ana konfigürasyon dosyası httpd.conf veya apache2.conf içinde, ilgili bloğuna eklenir. Örneğin, /var/www/html dizini için şöyle bir blok oluşturulur:
<Directory /var/www/html>
Options -Indexes
AllowOverride All
</Directory>
Değişikliklerden sonra sudo systemctl reload apache2 komutuyla konfigürasyon yenilenir. Bu yöntem, global olarak etkilidir ve tüm dizinleri kapsar. .htaccess dosyalarını etkinleştirmek için AllowOverride All gereklidir. Test için, index dosyası olmayan bir dizine tarayıcıdan erişin; 403 Forbidden hatası almalısınız.
Dizin bazında kontrol için .htaccess dosyası idealdir. Dizin köküne .htaccess oluşturun ve içine Options -Indexes satırını ekleyin. Bu, mod_rewrite veya mod_headers gibi modüllerle birleştiğinde esneklik sağlar. Örneğin, belirli dizinler hariç tutulmak istenirse:
# .htaccess örneği
Options -Indexes
<Files ".htaccess">
Require all denied
</Files>
Bu yaklaşım, geliştiricilerin paylaşımlı hostinglerde tercih ettiği yöntemdir. Değişiklikler anında geçerli olur, sunucu yeniden başlatmaya gerek yoktur. Güvenlik için .htaccess dosyasının kendisi de korunmalıdır. Yaklaşık 100’den fazla kurumsal sitede bu yöntemle sorunlar önlenmiştir; pratikte, dosya yükleme dizinlerinde zorunludur.
Sanal hostlar için, her bloğuna iç içe ekleyin. Örnek httpd-vhosts.conf:
<VirtualHost *:80>
ServerName example.com
DocumentRoot /var/www/example
<Directory /var/www/example>
Options -Indexes FollowSymLinks
Require all granted
</Directory>
</VirtualHost>
Bu, birden fazla domain için izole güvenlik sağlar. Nginx proxy önünde Apache kullanıyorsanız, upstream direktifleriyle uyumlu çalışır. Yeniden yükleme sonrası logları kontrol edin: /var/log/apache2/error.log. Hata yoksa başarıldı demektir. Bu konfigürasyon, yüksek trafikli kurumsal sitelerde standarttır ve ölçeklenebilirliği artırır.
Değişiklikleri doğrulamak için curl veya tarayıcı kullanın: curl -I http://example.com/testdizin/ komutu 403 döndürmelidir. Log dosyalarını inceleyin; Indexes hatası olmamalı. Otomatik test için Nagios veya Zabbix gibi araçlar entegre edilebilir. En iyi uygulamalar arasında, yalnızca gerekli dizinlerde index dosyası bulundurmak ve robots.txt ile taramayı sınırlamaktır.
İleri seviye için, mod_autoindex’i tamamen devre dışı bırakın: a2dismod autoindex. Bu, gereksiz modülleri temizler. Kurumsal ortamlarda, konfigürasyon yönetim araçları gibi Ansible ile bu ayarları otomatikleştirin. Düzenli güvenlik taramaları yapın; örneğin, Nikto scanner ile test edin. Bu adımlar, sunucunuzu proaktif olarak korur ve olası ihlalleri önler.
Sonuç olarak, Apache’te directory listing’i kapatmak basit ama etkili bir güvenlik önlemidir. Yukarıdaki yöntemleri uygulayarak sunucunuzun bütünlüğünü koruyun. Düzenli bakım ve güncellemelerle, kurumsal standartlara uyumlu bir web ortamı oluşturun. Bu değişiklik, ziyaretçi verilerinizi güvende tutarken performansınızı optimize eder.