Peter Freitag’in apache konfigürasyonunda yapılacak bazı düzenlemeler hakkındaki, Apache Security kitabından da alıntılar içeren önerileri. Yalnız önerilerin bir garantisi yoktur. Sunucunuzu daha performanslı hale getirecektir fakat bütün önerileri yaptıktan sonra sunucunuz %100 güvenli olacak diye bir garanti yok.
Ayrıca önerilerin bazıları sizin ortamınızda performansı düşürebilir veya problemlere yol açabilir. Önerilen değişikliklerin ortamınıza uyup uymayacağına karar vermek size kalıyor.

1) İlk olarak en son yamaları geçtiğinize emin olun
Eğer kapınız açık ise pencerelere kilit koymanın bir mantığı yoktur. Aynı şekilde, eğer gerekli yamaları kurmadıysanız, diğer önerilere yamaları geçtikten sonra bakın.

2) Apache sürüm numarasını ve diğer bilgileri gizleyin
Varsayılan olarak, bütün Apache kurulumları bütün dünyaya hangi Apache sürümünü, işletim sistemini çalıştırdığınızı ve hatta hangi Apache modüllerinin sunucuda kurulu olduğunu söyleyecektir. Saldırganlar bu bilgileri kullanırlar. Ayrıca varsayılan ayarları ellemediğinizi belirten bir mesaj da verilmiş olur.

httpd.conf dosyasında aşağıdaki iki direktifi vermeniz gerekiyor:
ServerSignature Off
ServerTokens Prod

ServerSignature direktifi 404 sayfaları, klasör listeleri gibi apache tarafından yaratılan sayfaların en altında bilgilerin görüntülenmesi ile ilgilidir.
ServerTokens direktifi ise Apache’nin HTTP cevap başlığında Server kısmına ne yazacağını belirler. Bunu Prod’a set ederek HTTP cevabında aşağıdaki şekilde cevap verdirmek mümkün:
Server: Apache
Eğer fazla paranoyaksanız bunu da kaynak kodunda değişiklik yaparak veya mod_security kullanarak (aşağıda anlatılıyor) değiştirebilirsiniz.

3) Apache’yi kendi kullanıcı hesabı ve grubunda çalıştırın
Çeşitli apache kurulumları nobody kullanıcı hesabı ile çalışır. Eğer hem Apache hem de Eposta sunucunuzun da nobody kullanıcı hesabı ile çalıştırıldığını varsayarsak, Apache’ye yapılan başarılı bir saldırı sonrası eposta sunucusunun da ele geçirilmesi veya bunun tersi mümkün olabilir.
User apache
Group apache

4) Web klasörünün dışındaki dosyalara erişimi engelleyin
Apache’nin web ana klasörü dışındaki dosyalara erişimini istemeyiz. Bütün web sitelerinizin aynı klasör altında olduğunu varsayarsak (örnekte /web olarak geçiyor) aşağıdaki gibi bir ayar yapmalısınız:

Order Deny,Allow
Deny from all
Options None
AllowOverride None

Order Allow,Deny
Allow from all

Not: Options None ve AllowOverride None set ettiğimiz için bu sunucunun tüm override işlemlerini kapatacaktır. Bu sebeple Option veya Override gerektiren her bir klasör için elle ekleme yapmanız gerekir.

5) Klasör içeriği görüntülemeyi kapatın
Bunu bir Directory tag’i içerisinde Options ile yapabilirsiniz. Options’ı None veya -Indexes olarak set edin:
Options -Indexes

6) Sunucu tarafı dahil etmeleri (server side include) kapatın
Bu da Directory tag’i içerisinde Options ile yapılıyor. Options’ı None veya -Includes olacak şekilde ayarlayın:
Options -Includes

7) CGI çalıştırmayı kapatın
Eğer CGI kullanmıyorsanız Directory tag’i içerisinde Options’da set ederek kapatın. Options’ı None veya -ExecCGI olarak set edin:
Options -ExecCGI

8- Apache’nin sembolik linkleri takip etmesine izin vermeyin

Bu da Directory tag’i içerisinde Options ile yapılıyor. Options’ı None veya -FollowSymLinks olacak şekilde ayarlayın:
Options -FollowSymLinks

9) Bütün Options özelliklerinin kapatılması
Bütün Options’ları kapatmak istiyorsanız,
Options None
olarak set edin. Birden fazla özellik kapatmak isterseniz aynı satır içerisinde boşluk vererek belirtin:
Options -ExecCGI -FollowSymLinks -Indexes

10) .htaccess dosyaları için desteğin kaldırılması
Bu Directory tag’i içerisinde AllowOverride direktifi ile yapılıyor. None olacak şekilde ayarlayın:
AllowOverride None

Eğer Overrides’a ihtiyacınız varsa indirilemediklerinden (download) ve/veya isimlerini .htaccess’den başka bir şeye değiştirin. Örneğin .httpdoverride olarak değiştirelim ve .ht ile başlayan bütün dosyaların indirilmesini engelleyelim:
AccessFileName .httpdoverride

Order allow,deny
Deny from all
Satisfy All

11) mod_security çalıştırın
mod_security, Apache Security kitabının da yazarı olan Ivan Ristic tarafından hazırlanmış yararlı bir Apache modülüdür.
mod_security ile aşağıdakileri yapabilirsiniz:
* Basit filtreleme
* Regular Expression tabanlı filtreleme
* URL kodlama kontrolü
* Unicode kodlama kontrolü
* Denetim (Auditing)
* Null byte saldırısı önleme
* Upload hafıza sınırları
* Sunucu kimliği maskeleme
* Dahili chroot desteği
* ve dahası

12) Gereksiz modülleri kapatın
Apache tipik olarak çeşitli modüllerle birlikte kurulmaktadır. Apache modül dokümantasyonuna göz atarak hangi modülün ne yaptığını öğrenin. Aktif durumda olan bazı modüllere ihtiyacınız olmayabilir.
httpd.conf dosyasında LoadModüle içeren satırlara bakın. Bir modülü devre dışı bırakmak için basitçe satırın başına bir # işareti koyun (comment out). Modülleri aratmak için
grep LoadModule httpd.conf
komutunu çalıştırın.
Genelde aktif olan fakat ihtiyaç duyulmayan modüllere örnek olarak,
mod_imap, mod_include, mod_info, mod_userdir, mod_status, mod_cgi, mod_autoindex
verilebilir.

13) Apache’nin konfigürasyon ve çalıştırılabilir dosyalarına sadece root’un okuma izni olsun
Eğer Apache kurulumunuzun /usr/local/apache olduğunu varsayarsak:
chown -R root:root /usr/local/apache
chmod -R o-rwx /usr/local/apache

14) Timeout değerini düşürün
Timeout (zaman aşımı) süresi varsayılan olarak 300 saniyeye ayarlıdır. Servis kullanımı engelleme saldırılarının (DoS) potansiyel etkilerini azaltmak için bunu düşürebilirsiniz:
Timeout 45

15) Büyük boyutlu isteklerin sınırlanması
Apache bir http isteğinin boyutunu sınırlamanıza izin veren çeşitli direktifler sunar. Bu özellik de servis kullanımı engelleme saldırılarının etkilerini azaltmak için kullanılabilir.
Başlangıç olarak LimitRequestBody direktifi kullanılabilir. Bu direktif varsayılan olarak unlimited/sınırsız olarak ayarlıdır. Eğer 1mb’ın üzerinde dosya gönderimine izin vermiyorsanız bunu:
LimitRequestBody 1048576
olarak set edebilirsiniz. Eğer dosya gönderimlerine (upload) izin vermiyorsanız daha da düşük tutabilirsiniz.
Bakılabilecek diğer direktifler ise LimitRequestFields, LimitRequestFieldSize ve LimitRequestLine. Bu direktifler çoğu sunucu için varsayılan olarak makul değerlere ayarlıdır fakat ihtiyaçlarınıza göre değişiklik yapabilirsiniz. Detaylı bilgi için Apache dokümanına göz atın.

16) XML Body boyutunu sınırlamak
Eğer mod_dav kullanıyorsanız bir XML isteğinin gövedesinin maksimum boyutunu sınırlamak isteyebilirsiniz. LimitXMLRequestBody sadece Apache 2’de var ve varsayılan değeri 1 milyon byte (yaklaşık 1mb). Çoğu makalede eğer WebDAV kullanıyor ve büyük dosyalar upload ediliyorsa, bu değeri 0’a set ederek boyut sınırlamasının kaldırılmasından bahsedilir. Fakat sadece kaynak (source) kontrol için kullanıyorsanız bu değeri 10mb gibi bir değerle sınırlayabilirsiniz:
LimitXMLRequestBody 10485760

17) Aynı anda kullanım (concurrency) sınırlaması
Apache aynı anda yapılan istekleri işleme ile ilgili olarak çeşitli konfigürasyon ayarları sunar. MaxClients isteklere hizmet için maksimum olarak kaç child process’in yaratılacağını belirler. Eğer sunucunuzun çok sayıda concurrent isteği karşılayacak kadar hafızası yoksa bu değeri yüksek tutmak isteyebilirsiniz.
MaxSpaceServer, MaxRequestsPerChild ve Apache2 deki ThreadsPerChild, ServerLimit, ve MaxSpareThreads direktifleri de işletim sistemi ve donanımınıza uyacak şekilde ayarlanabilir.

18) Erişimleri IP’ye göre kısıtlama
Eğer sadece belirli bir ağdan veya IP adresinden erişilmesi gereken kaynaklarınız varsa bunu apache konfigürasyonunda ayarlayabilirsiniz. Örneğin intranet’inize sadece 176.16 ağından erişim yapılmasını istiyorsanız:

Order Deny,Allow
Deny from all
Allow from 176.16.0.0/16

veya IP kısıtlaması:
Order Deny,Allow
Deny from all
Allow from 127.0.0.1

19) KeepAlive ayarları
Apache dokümantasyonuna göre HTTP Keep Alive özelliği istemci performansını %50 oranında artırmaktadır. Bu sebeple bu ayarları değiştirirken dikkatli olun, servis kullanımı engelleme saldırısına karşı az bir koruma sağlarken performans’dan önemli ölçüde ödün verebilirsiniz.
KeepAlive varsayılan olarak aktiftir ve açık bırakabilirsiniz, fakat varsayılan olarak 100 olan MaxKeepAliveRequests değerini ve 15’e ayarlı olan KeepAliveTimeout değerini değiştirebilirsiniz.Log dosyalarınızı analiz ederek uygun değerleri bulmaya çalışın.

20) Apache’yi chroot ortamında çalıştırın
chroot programları kendi ayrıştırılmış hapishanelerinde (jail) çalıştırmanızı sağlar. Bu da bir servisin kırılma durumunda sunucudaki diğer şeyleri etkilemesini engeller.

Yukarıda mod_security modülünün kendisinin chroot desteği olduğunu söylemiştim. Bu modül sayesinde aşağıdaki direktifi eklemek yeterli:
SecChrootDir /chroot/apache

Fakat bazı uyarılar da yapılıyor, ayrıntılı bilgi için mod_security dokümanına göz atın.

Kaynak: http://www.petefreitag.com/item/505.cfm