Apache Sıkılaştırma için 10 Öneri

1- Apache Versiyon ve İşletim Sistemi Bilgisi Hatalarını Gizleyin

Apache’yi kaynağından veya yum, apt gibi paket yöneticisinden default kurulum yaptığınızda alabileceğiniz hatalar İşletim sistemi ve Apache versiyonu hakkında bilgileri gösterir.

apache hardening

Bu bilgilerin gösterilmesi yalnızca web sunucusu için değil sunucu içinde risk teşkil ediyor. Bunları kapatmak için bazı konfigürasyon ayarları yapmamız gerekiyor.

ServerSignature Off: Herhangi hata mesajlarını mod_proxy ftp dizin listeleri, mod_info çıkışı ve daha birçok gibi sunucu tarafından oluşturulan belgeler altında sunucu adı ve sürüm numarasını gösteren bir alt çizgi eklenmesine izin verir.

On: Sunucu tarafından oluşturulmuş belgelerde bir footer satırının eklenmesini sağlar.
Off: Footer bilgisi disable edilir.

ServerTokens: Sunucu işletim sistemi türünün ve etkinleştirilmiş Apache modüllerine ilişkin bilgilerin açıklamasını belirler.

#RHEL/CentOS/Fedora

vi /etc/httpd/conf/httpd.conf

#Debian/Ubuntu

vi /etc/apache2/apache2.conf

Yukarıda belirtilen dosyalardaki parametreler alttaki gibi düzenlenir.

ServerSignature Off
ServerTokens Prod

Değişikliklerin geçerli olması için servis yeniden başlatılır.

systemctl restart apache2

service apache2 restart

apache hardening

2. Dizin Listelemeyi Devre Dışı Bırakın

Default olarak Apache, index dosyasının yokluğunda kök dizininin tüm içeriğini listeler.

apache hardening

Apache2 veya httpd.conf dosyasından bunu kapatabiliriz.

apache hardening

Options -Indexes yazarak dizinlerin gösterilmesi kapatılır.

apache hardening

3. Düzenli Olarak Apache’yi Güncelleyin

Apache geliştirici topluluğu sürekli olarak güvenlik sorunları üzerinde çalışmakta ve güncellenmiş sürümünü yeni güvenlik seçenekleriyle birlikte yayınlamaktadır. Bu nedenle, web sunucunuz olarak Apache’nin en son sürümünü kullanmanız önerilir.

Apache sürümünü httpd -v yada apache2 -v komutuyla kontrol edebilirsiniz.

apache hardening

Sürümünüzü aşağıdaki komutla güncelleyebilirsiniz.

#Debian/Ubuntu
apt install apache2
#RHEL/CentOS/Fedora
yum update httpd

4. Gereksiz Modülleri Devre Dışı Bırakın

Kullanılmayan tüm modüllerin devre dışı bırakılması önerilir. Aşağıdaki komutu kullanarak web sunucusunun tüm derlenmiş modüllerini listeleyebilirsiniz.

Ubuntu için:

apache2ctl -M

Centos için:

grep LoadModule /etc/httpd/conf/httpd.conf

apache hardening

Varsayılan olarak etkinleştirilen ancak çoğu zaman gerekli olmayan modüllerin listesi: mod_imap, mod_include, mod_info, mod_userdir, mod_autoindex. Belirli bir modülü devre dışı bırakmak için, o satırın başına bir “#” ekleyebilir ve servisi yeniden başlatabilirsiniz.

5. Apache’yi Ayrı Kullanıcı ve Grup Olarak Çalıştırın

Varsayılan kurulum ile Apache, nobody veya daemon kullanıcısı ile işlemlerini yürütür. Güvenlik nedeniyle, kendi ayrıcalıklı olmayan(non-privileged) hesabında Apache’yi çalıştırmanız önerilir. Örneğin: prisma-apache.

groupadd prisma-apache
useradd -d /var/www -g prisma-apache -s /bin/nologin prisma-apache

Şimdi Apache’ye bu yeni kullanıcıyla çalışmasını ve bunu yapmasını söyleyebilmeniz için, /etc/apache2/apache2.conf dosyasına giriş yapmalı ve servisi yeniden başlatmalıyız.

Vi editörü ile /etc/httpd/conf/httpd.conf dosyasını açın ve “Kullanıcı” ile “Grup” anahtar kelimesini arayın ve kullanılacak kullanıcı adını ve grup adını belirterek bu işlemi yapın.

apache hardening

User prisma-apache
Group prisma-apache

6. Dizinlere erişimi kısıtlamak için Allow ve Deny Kullanın

Httpd.conf dosyasındaki “İzin Ver” ve “Reddet” seçenekleriyle dizinlere erişimi kısıtlayabiliriz. Bu örnekte, apache2.conf dosyasını ayarlayarak, kök dizini güvenli hale getireceğiz.

apache hardening

Options None: Bu seçenek, kullanıcıların isteğe bağlı özellikleri etkinleştirmesine izin vermez.
Order deny,allow: Bu, “Reddet” ve “İzin Ver” direktiflerinin işleneceği sıradır. Burada ilk önce “reddet” ve “izin ver” ibaresi olacaktır.
Deny from all: Hiç kimse kök dizine erişemez.

7. Apache’nin Sembolik Bağlantıları Takip Etmesini Devre Dışı Bırakın

Apache, varsayılan olarak symlinkleri takip eder, bu özelliği FollowSymLinks ile Seçenekler yönergesinde kapatabiliriz. Bunu yapmak için config dosyasında aşağıdaki ayarı yapmamız gerekiyor.

Options -FollowSymLinks

Ve belirli bir kullanıcı veya web sitesinin FollowSymLinks’in etkinleştirmesi gerekiyorsa, bu web sitesinden “.htaccess” dosyasına bir kural yazabiliriz.

# Enable symbolic links
Options +FollowSymLinks

Not: “.htaccess” dosyasındaki “AllowOverride All” içindeki yeniden yazma kurallarını etkinleştirmek için, ana yapılandırmada genel olarak mevcut olmalıdır.

8. Apache Log Dosyalarını Aktifleştirin

Apache, işletim sisteminizin logların bağımsız olarak oturum açmanıza izin verir. Apache loglarını etkinleştirmek akıllıcadır, çünkü Web sunucunuzla etkileşime giren kullanıcıların girdiği komutlar gibi birçok bilgi sağlar. Bunu yapmak için mod_log_config modülünü eklemeniz gerekir. Apache ile ilgili üç ana kayıtla ilgili direktif vardır.

TransferLog: Bir log dosyası oluşturma.
LogFormat: Özel bir biçim belirtme.
CustomLog: Bir log dosyası oluşturma ve biçimlendirme.

Bunları virtual host içinde kullanabilirsiniz. Bunu virtual host bölümünde belirtmeniz gerekiyor. Örneğin, log kaydetmesi etkinleştirilmiş virtual host yapılandırılması.

<VirtualHost *:80>
DocumentRoot /var/www/html/prismacsi-apache.com/
ServerName www.example.com
DirectoryIndex index.htm index.html index.php
ServerAlias example.com
ErrorDocument 404 /story.php
ErrorLog /var/log/apache2/primacsi-apache.com_error_log
CustomLog /var/log/apache2/prismacsi-apache.com_access_log combined
</VirtualHost>

9. İstek Boyutunu Limitleyin

Varsayılan olarak, Apache’nin HTTP isteğinin toplam boyutu üzerinde hiçbir sınırı yoktur, yani sınırsızdır ve bir web sunucusundaki büyük isteklere izin verdiğinizde, Dos saldırılarının kurbanı olabilirsiniz. Bir Apache yönergesi “LimitRequestBody” nin istek boyutunu dizin etiketi ile sınırlayabiliriz.
Değeri, bir istek gövdesinde izin verilen 0 (sınırsız) ile 2147483647 (2GB) arasında bayt olarak ayarlayabilirsiniz. Bu sınırı site ihtiyaçlarınız doğrultusunda ayarlayabilirsiniz. Yüklemeye izin verdiğiniz bir siteniz olduğunu ve belirli bir dizinin yükleme boyutunu sınırlamak istediğinizi varsayalım.
Bu örnekte, user_uploads, kullanıcılar tarafından yüklenen dosyaları içeren bir dizindir. Bunun için 100 bin sınır veriyoruz.

<Directory “/var/www/prismacsi-apache/user_uploads”>
LimitRequestBody 100000
</Directory>

10. DDoS Atakları için Önlem Alın

Web sitenizi DDoS saldırılarına karşı tamamen koruyamayacağımız doğru. Ama bazı önlemler alabiliriz.

TimeOut: Bu direktif, sunucunun başarısız olması için belirli olayların tamamlanması için bekleyeceği süreyi ayarlamanıza olanak tanır. Varsayılan değeri 300 saniyedir. DDOS saldırılarına tabi olan sitelerde bu değeri düşük tutmak iyi bir şeydir. Bu değer tamamen web sitenizde aldığınız istek türüne bağlıdır. Not: Gelen CGI komut dosyaları ile sorun oluşturabilir.
LimitRequestFieldSize: HTTP Request başlığında boyut limiti belirlememize yardımcı olur.
KeepAliveTimeout: Bağlantının kapanmasından önce sunucunun bir sonraki istek için bekleyeceği süre. Varsayılan değer 5 saniyedir.
LimitRequestFields: İstemcilerin kabul edeceği HTTP isteğinin header alanlarının sayısı üzerinde bir sınır belirlememize yardımcı olur. Varsayılan değeri 100’dür. Çok sayıda http isteği headerının bir sonucu olarak DDos saldırıları oluşuyorsa bu değerin düşürülmesi önerilir.
MaxClients: Bu direktif, aynı anda sunulacak bağlantılar üzerindeki sınırı ayarlamanıza izin verir. Her yeni bağlantı bu sınırdan sonra sıraya alınacaktır. Hem MPM hem de Prefork ve Worker ile kullanılabilir. Varsayılan değeri 256’dır.

Blog postu ile ilgili bir sorunuz varsa bizimle iletişime geçebilirsiniz.

Hakan Eren ŞAN

Size nasıl yardımcı olalım?

İhtiyacınız olan her an Prisma danışmanları yanı başınızda. Bizimle 7/24 iletişime geçebilirsiniz.


Sızma testi hizmetlerimizi incelediniz mi?