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?
Bu rehberde Apache HTTP Server'ı kuracak ve temel sertleştirme ayarlarını uygulayacaksınız: sürüm bilgisini gizleme, TRACE yöntemini kapatma, dizin listelemeyi devre dışı bırakma, gereksiz modülleri kapatma ve güvenlik başlıkları. Hosting ve sunucu yöneticilerine yöneliktir; yaklaşık 40 dakika sürer.
Apache esnek ve modülerdir; bu esneklik, varsayılan kurulumda gereğinden fazla bilgi ve özellik açık kalabileceği anlamına gelir. Aşağıdaki adımlar saldırı yüzeyini küçültür. Debian/Ubuntu ve AlmaLinux/Rocky arasında paket ve dizin adları farklıdır; ikisi de gösterilmiştir.
Gereksinimler
- Debian/Ubuntu veya AlmaLinux/Rocky Linux sunucu ve sudo yetkisi
- 80 ve 443 portları için güvenlik duvarı izni
- Yapılandırma yedeği: Debian/Ubuntu için
sudo cp -r /etc/apache2 /etc/apache2.yedek, AlmaLinux/Rocky içinsudo cp -r /etc/httpd /etc/httpd.yedek - HTTPS için geçerli sertifika (kurulumu bu rehberin kapsamı dışındadır)
Adım adım Apache kurulumu ve sertleştirme
1. Apache'yi kurun
Debian/Ubuntu için paket ve servis adı apache2'dir:
sudo apt update
sudo apt install apache2
sudo systemctl enable --now apache2AlmaLinux/Rocky için paket ve servis adı httpd'dir:
sudo dnf install httpd
sudo systemctl enable --now httpd
sudo firewall-cmd --permanent --add-service=http --add-service=https
sudo firewall-cmd --reload2. Sertleştirme dosyasını oluşturun
Ayarları ana dosyayı değiştirmek yerine ayrı bir dosyaya yazmak güncellemelerde ezilmelerini önler. Debian/Ubuntu'da /etc/apache2/conf-available/sertlestirme.conf, AlmaLinux/Rocky'de /etc/httpd/conf.d/sertlestirme.conf dosyasını oluşturun. Debian/Ubuntu'da security.conf içinde benzer satırlar varsa çakışmayı önlemek için orada düzenleme yapabilirsiniz.
ServerTokens Prod
ServerSignature Off
TraceEnable Off
FileETag None
Timeout 60
KeepAliveTimeout 5
LimitRequestBody 10485760ServerTokens Prod, yanıt başlığında yalnızca Apache adını bırakır; TraceEnable Off, TRACE yöntemini kapatır. LimitRequestBody değerini uygulamanızın yükleme ihtiyacına göre ayarlayın.
3. Dizin listeleme ve kök dizin erişimini kısıtlayın
Kök dizine varsayılan olarak erişimi reddedin, yalnızca belge kök dizininde gerekli seçenekleri açın. Dizin yolunu kendi yapınıza göre düzenleyin.
<Directory />
AllowOverride None
Require all denied
</Directory>
<Directory /var/www/html>
Options -Indexes -Includes -ExecCGI +FollowSymLinks
AllowOverride None
Require all granted
</Directory>AllowOverride None, .htaccess dosyalarının işlenmesini kapatır; performans ve güvenlik için iyidir. Uygulamanız .htaccess gerektiriyorsa yalnızca gereken kategorileri (örneğin FileInfo) açın.
4. Gizli dosyaları koruyun
<FilesMatch '^\.'>
Require all denied
</FilesMatch>5. Güvenlik başlıklarını etkinleştirin
Başlıklar için mod_headers gerekir. Debian/Ubuntu'da modülü etkinleştirin; AlmaLinux/Rocky'de varsayılan olarak yüklüdür.
sudo a2enmod headersHeader always set X-Content-Type-Options nosniff
Header always set X-Frame-Options SAMEORIGIN
Header always set Referrer-Policy strict-origin-when-cross-origin6. Gereksiz modülleri kapatın
Kullanmadığınız modüller saldırı yüzeyini büyütür. Hangi modüllerin yüklü olduğuna bakın ve gereksizleri devre dışı bırakın. Debian/Ubuntu için örnek (yalnızca kullanmıyorsanız):
apache2ctl -M
sudo a2dismod status autoindexDebian/Ubuntu'da a2dismod bazı modüller (örneğin autoindex) için ek onay isteyebilir; uyarıyı okuyup bilerek ilerleyin. AlmaLinux/Rocky'de modüller /etc/httpd/conf.modules.d/ altındaki dosyalarda LoadModule satırlarını yorum satırı yaparak kapatılır. Bir modülün gerekli olup olmadığından emin değilseniz kapatmadan önce test ortamında deneyin.
7. Dosyayı etkinleştirin, test edin ve yeniden yükleyin
Debian/Ubuntu için:
sudo a2enconf sertlestirme
sudo apache2ctl configtest
sudo systemctl reload apache2AlmaLinux/Rocky için:
sudo apachectl configtest
sudo systemctl reload httpdDoğrulama
Yapılandırmanın geçerli olduğunu ve ayarların etkili olduğunu kontrol edin.
curl -sI http://localhost
curl -X TRACE -i http://localhostconfigtest çıktısı Syntax OK dönmelidir. İlk komutta Server: Apache satırında sürüm numarası görünmemeli ve güvenlik başlıkları listelenmelidir. TRACE isteği 405 (veya 403) ile reddedilmelidir. Dizin listelemeyi, içinde indeks dosyası olmayan bir klasöre gidip 403 alarak doğrulayın.
Sık karşılaşılan sorunlar
- Syntax error: yanlış yazılmış yönerge veya eksik modül. Hata mesajındaki dosya ve satıra bakın.
- Header yönergesi bilinmiyor: mod_headers yüklü değildir; Debian/Ubuntu'da
a2enmod headersçalıştırın. - 403 Forbidden:
Require all deniedayarı belge kök dizinini de kapsıyor ya da dosya sahipliği ve izinleri hatalıdır. SELinux açıksa dosya bağlamını da kontrol edin. - .htaccess çalışmıyor: AllowOverride None olarak ayarlandı; gereken kategoriyi açın.
- Servis yeniden yüklenmiyor:
journalctl -u apache2(RHEL'dehttpd) ile bakın.
Güvenlik ve bakım notları
- Apache ve işletim sistemi paketlerini düzenli güncelleyin.
- Web sunucusunu root olarak çalıştırmayın; paket varsayılan kullanıcısını (www-data veya apache) koruyun.
- Belge kök dizini sahiplik ve izinlerini en az yetkiyle ayarlayın; web kullanıcısına yazma izni yalnızca gereken klasörlere verin.
- Günlükleri izleyin ve döndürün; olağandışı istekleri takip edin.
- Gerektiğinde mod_security gibi bir WAF modülünü değerlendirin ve önce yalnızca algılama modunda deneyin.
- Sanal sunucuları ayırın ve varsayılan siteyi kaldırın veya kısıtlayın.
Sık sorulan sorular
Apache mi Nginx mi daha güvenli?
İkisi de doğru yapılandırıldığında ve güncel tutulduğunda güvenlidir. Seçim uygulamanızın ihtiyaçlarına ve ekibin deneyimine bağlıdır; güvenliği belirleyen yapılandırma ve bakımdır.
.htaccess dosyalarını tamamen kapatmalı mıyım?
Sunucu yapılandırmasına erişiminiz varsa kapatmak performans ve güvenlik için iyidir. Paylaşımlı hosting veya .htaccess'e dayanan uygulamalarda gerekli kategorileri sınırlı biçimde açın.
ServerTokens Prod yeterli mi?
Sürüm bilgisini gizler ama gerçek güvenlik sağlamaz. Güncel paketler, minimum yetki ve doğru yapılandırma asıl korumadır.
İlgili sözlük terimleri
Bu kategorideki diğer rehberler
- Postfix ile giden e-posta yönlendirme (smarthost) ve temel güvenlikPostfix ile giden e-postaları kimlik doğrulamalı SMTP röle (smarthost) üzerinden TLS ile gönderme, yalnızca yerel kullanım için güvenli yapılandırma ve açık röle kontrolü rehberi.
- logrotate yapılandırması: günlük döndürme, sıkıştırma ve saklamalogrotate ile günlük dosyalarını döndürme, sıkıştırma ve saklama süresini ayarlama; özel uygulama günlükleri için yapılandırma yazma, test etme ve sık hataları çözme rehberi.
- GoAccess ile Nginx/Apache web log analiziGoAccess ile Nginx ve Apache erişim günlüklerini terminalde ve HTML rapor olarak analiz etme, log formatı seçimi, gz arşivlerini okuma, zamanlanmış rapor ve erişim koruması rehberi.
- Memcached kurulumu ve güvenliğiMemcached önbellek sunucusunu Debian ve RHEL tabanlı sistemlere kurma, UDP kapatma, bind adresi ve güvenlik duvarıyla erişimi kısıtlama ve SASL notlarını içeren güvenli kurulum rehberi.