18 Apache Web Sunucusu Güvenliği ve Sağlamlaştırma İpuçları


Apache web sunucusu, dosyaları ve web sitelerini barındırmak için en popüler ve yaygın olarak kullanılan web sunucularından biridir. Barındırma ihtiyaçlarınızı karşılayacak şekilde kurulumu ve yapılandırılması kolaydır. Ancak varsayılan ayarlar sitenizin ihtiyaç duyduğu korumayı sağlayacak kadar güvenli değildir.

Bu kılavuzda, web sunucunuzun güvenliğini güçlendirmek için uygulayabileceğiniz bazı Apache sunucusu güçlendirme ipuçlarına ve püf noktalarına bakıyoruz.

1. Apache Sürümü ve İşletim Sistemi Bilgisi Nasıl Gizlenir

Varsayılan olarak Apache web sunucusu, bir web sitesinin yanlış URL'sine göz atmanız durumunda kendi sürümünü görüntüler. Aşağıda sayfanın sitede bulunamadığını belirten bir hata sayfası örneği verilmiştir. Son satır Apache sürümünü, ana bilgisayar işletim sistemini, IP adresini ve dinlediği bağlantı noktasını gösterir.

Web sunucunuzun bilgilerini görüntülemek hiçbir zaman iyi bir fikir değildir çünkü bu, bilgisayar korsanlarına keşif görevlerinde iyi bir hediye olabilir. Bir güvenlik katmanı eklemek ve bilgisayar korsanlarının işini zorlaştırmak için web sunucusu bilgilerinin gizlenmesi önerilir.

Bunu yapmak için Debian tabanlı dağıtımlarda varsayılan Apache yapılandırma dosyasını açın.

sudo vim /etc/apache2/apache2.conf

RHEL, Fedora, CentOS, Rocky ve AlmaLinux gibi RHEL tabanlı sistemler için güçlü>.

sudo vim /etc/httpd/conf/httpd.conf

Dosyanın sonuna aşağıdaki satırları ekleyin.

ServerTokens Prod
ServerSignature Off

Değişiklikleri kaydedin ve Apache web sunucusunu yeniden başlatın.

sudo systemctl restart apache2   [On Debian, Ubuntu and Mint]
sudo systemctl restart httpd     [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

Şimdi siteyi yeniden yükleyin; bu sefer web sunucusu bilgileri görüntülenmeyecektir.

2. Apache'de Dizin Listelemeyi Devre Dışı Bırakın

Varsayılan olarak, Apache dizin listelemeye izin verir ve ziyaretçiler Belge Kökü dizininizde bulunan dosya veya dizinleri görebilir.

Bunu göstermek için test adında bir dizin oluşturacağız.

sudo mkdir -p /var/www/html/test

Daha sonra dizine gidip birkaç dosya oluşturacağız.

cd /var/www/html/test
sudo touch app.py main.py

Artık http://localhost/test URL'sine erişirsek dizin listesini görüntüleyebileceğiz.

Dizin listelemeyi devre dışı bırakmak için Apache'nin ana yapılandırma dosyasına gidin ve 'Dizin' özelliğini arayın. 'Seçenekler' parametresini gösterildiği gibi '-Indexes' olarak ayarlayın.

<Directory /opt/apache/htdocs>
Options -Indexes
</Directory>

Apache'i yeniden yükleyin; bu sefer URL'yi ziyaret ettiğinizde dizinler artık görüntülenmeyecektir.

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

En yeni uygulamalar, eski yazılım sürümlerinde mevcut olan temel güvenlik açıklarını gideren hata düzeltmeleri ve güvenlik yamalarıyla birlikte geldiğinden, tüm uygulamalarınızı her zaman güncel tutmanız önerilir.

Bu nedenle uygulamalarınızı düzenli olarak en son sürümlerine yükseltmeniz önerilir.

sudo apt update && sudo apt upgrade [On Debian, Ubuntu and Mint]
sudo dnf upgrade                    [On RHEL/CentOS/Fedora and Rocky/AlmaLinux]

4. Apache'de HTTPS Şifrelemesini Kullanın

Apache, varsayılan olarak, gizlice dinlenmeye açık, zayıf ve güvensiz bir protokol olan HTTP protokolünü kullanır. Sitenizin güvenliğini artırmak ve daha da önemlisi Google SEO sıralamanızı iyileştirmek için sitenizi bir SSL sertifikası kullanarak şifrelemeyi düşünün.

Bunu yaparak, varsayılan HTTP protokolünü HTTPS olarak değiştirir ve böylece herhangi birinin sunucudan ileri geri gönderilen iletişime müdahale etmesini ve şifresini çözmesini zorlaştırır.

Linux'ta Let's Encrypt SSL kullanarak Apache web sunucusunun güvenliğini nasıl sağlayacağınızı öğrenin.

  • RHEL'de Let's Encrypt SSL Sertifikası ile Apache'nin Güvenliği Nasıl Sağlanır?
  • Ubuntu ve Debian'da Ücretsiz Let's Encrypt SSL Sertifikası ile Apache'nin Güvenliği Nasıl Sağlanır?

5. Apache için HTTP Katı Aktarım Güvenliğini (HSTS) etkinleştirin

Web sitenizi bir TLS/SSL sertifikasıyla şifrelemenin yanı sıra, HTTPS'nin üzerine HSTS web güvenlik mekanizmasını uygulamayı düşünün.

HTTP Sıkı Aktarım Güvenliği (HSTS), web sitelerini ortadaki adam saldırılarına ve çerezlerin ele geçirilmesine karşı koruyan bir politika mekanizmasıdır. Bu durum, saldırganların HTTPS protokolünü güvenli olmayan HTTP protokolüne düşürmesi durumunda meydana gelir.

HSTS, web sunucusunun, web tarayıcılarının kendisiyle yalnızca HTTPS aracılığıyla etkileşim kurması gerektiğini, hiçbir zaman HTTP protokolü aracılığıyla etkileşimde bulunmaması gerektiğini kesin olarak beyan etmesini sağlar.

HSTS'yi etkinleştirmek için web sitenizin HTTPS çalıştırdığından ve geçerli bir TLS/SSL sertifikasına sahip olduğundan emin olun.

Ardından Apache için başlık modülünü etkinleştirin:

sudo a2enmod headers

Daha sonra değişiklikleri uygulamak için Apache'i yeniden yükleyin.

sudo systemctl restart apache2

Ardından alan adınızın sanal ana bilgisayar yapılandırma dosyasına erişin.

sudo vim /etc/apache2/sites-available/mydomain.conf

Daha sonra bloğunun içine şu satırı ekleyin:

Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"

Bu aşağıdaki gibi görünüyor.

<VirtualHost *:443>
        # .....
        # ....
        Header always set Strict-Transport-Security "max-age=31536000; includeSubDomains"
</VirtualHost>

max-age parametresi, web tarayıcılarına önümüzdeki bir yıl boyunca sitenize yalnızca HTTPS kullanarak erişmeleri talimatını verir (31536000=1 yıl).

Son olarak, HSTS politikasının etkili olması için Apache'i yeniden başlatın.

sudo systemctl restart apache2

6. Apache'de HTTP/2'yi etkinleştirin

2015 yılında, HTTP/1.1'in yaratıcılarının öngörmediği birçok sorunu ele almayı veya çözmeyi amaçlayan, HTTP protokolünün yeni bir sürümü olan HTTP/2 piyasaya sürüldü.

HTTP/1.1 hâlâ yaygın olarak kullanılıyor olsa da, tarayıcıdan gelen birden çok isteği işlemek için birden çok TCP bağlantısının kullanılmasıyla ilişkili performans sorunlarıyla ilişkilendirilir; bu da istemci tarafında yüksek kaynak yüküne yol açar. ağ performansının düşmesine neden olur.

Uygulamaların karmaşıklığı ve işlevselliği arttıkça HTTP/2, HTTP/1.1'in uzun HTTP başlıkları, yavaş web sayfası yükleme hızları ve genel performans gibi eksikliklerini çözmek için oluşturuldu. bozulma.

HTTP/2 önceki sürüme göre daha fazla koruma ve gizlilik sağlar. Aynı derecede önemli olan, çoklanmış veri akışlarının kullanımı yoluyla performansın arttırılmasıdır. HTTP/2 ile tek bir TCP bağlantısı, birden fazla veri akışını iletirken bile bant genişliğinin etkili kullanımını sağlar.

Aşağıdakileri kullanarak Apache web sunucusunda HTTP/2'yi nasıl etkinleştireceğinizi öğrenin:

  • Ubuntu'da Apache'de HTTP/2 Nasıl Etkinleştirilir?

7. Apache'de Hassas Dizinlere Erişimi Kısıtlayın

Alabileceğiniz diğer bir güvenlik önlemi, kullanıcı verileri, günlükler ve yapılandırma dosyaları gibi hassas bilgiler içerebilecek dizinlere erişimi sınırlamaktır.

<VirtualHost *:80>
    ServerName example.com
    DocumentRoot /var/www/html

    # Other virtual host settings

    <Directory /var/www/html/sensitive_directory>
        Require all denied
    </Directory>
</VirtualHost>

Yukarıdaki yapılandırmada Tümünün reddedilmesini gerektir, /hassas_dizin içindeki dosyalara erişmeye çalışan herkesin erişimini reddeder.

Değişiklikleri kaydedin ve dosyadan çıkın. Daha sonra değişikliklerin geçerli olması için Apache'yi yeniden başlatın.

8. Apache'de ServerSignature Yönergesini devre dışı bırakın

Apache yapılandırma dosyasındaki ServerSignature yönergesi, sunucu tarafından oluşturulan belgelere, web sunucunuzun sürümü ve üzerinde çalıştığı işletim sistemi gibi yapılandırması hakkında bilgi taşıyan bir altbilgi ekler. Web sunucunuzla ilgili önemli ayrıntıların kötü niyetli aktörlerin eline geçmesi, saldırı olasılığını önemli ölçüde artıracaktır.

Bu tür bilgilerin açığa çıkmasını önlemek için Apache yapılandırma dosyasındaki bu yönergeyi devre dışı bırakmanız gerekir:

ServerSignature Off

Değişiklikleri kaydedin ve değişikliklerin geçerli olması için Apache'i bir kez daha yeniden başlatın.

sudo systemctl restart apache2

9. 'ServerTokens' Yönergesini 'Prod' olarak ayarlayın

'ServerTokens' yönergesi, Apache sürümü (ana ve alt sürüm), işletim sistemi ve çalışan web sunucusunun türü dahil olmak üzere sunucunun hangi bilgileri gönderdiğini kontrol eder.

Kamuya ifşa etmek isteyeceğiniz en az bilgi, web sunucusunun Apache olduğudur. Aksi takdirde sunucunuz yalnızca potansiyel saldırılara maruz kalır. Bu nedenle Apache yapılandırma dosyasındaki 'ServerTokens' yönergesinin 'prod' olarak ayarlanması önerilir.

ServerTokens Off

Her zaman olduğu gibi değişiklikleri kaydedin ve Apache'yi yeniden başlattığınızdan emin olun.

10. Apache'yi Fail2ban ile güvenli hale getirin

Fail2ban, Linux sistemlerini DoS ve kaba kuvvet saldırıları gibi harici tehditlerden koruyan açık kaynaklı bir izinsiz giriş önleme uygulamasıdır. Kötü amaçlı faaliyetlere karşı sistem günlüklerini sürekli izleyerek ve saldırı davranışını taklit eden kalıplarla eşleşen ana bilgisayarları yasaklayarak çalışır.

Fail2ban, başarısız oturum açma girişimlerine karşı Apache günlüklerini sürekli izleyerek ve rahatsız edici IP'leri geçici olarak yasaklayarak Apache'yi DoS saldırılarından koruyacak şekilde yapılandırılabilir.

Aşağıdakileri kullanarak Fail2ban'ı Linux'a nasıl yükleyeceğinizi öğrenin:

  • Linux Sunucunuzu Güvenli Hale Getirmek İçin Fail2ban Nasıl Kullanılır?

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

Apache modülleri, web sunucusunun işlevselliğini genişletmek için yüklenen basit programlardır. Modüller tarafından genişletilen işlevler arasında temel kimlik doğrulama, içerik önbelleğe alma, şifreleme, güvenlik vb. bulunur.

Bir saldırıya kurban gitme olasılığını en aza indirmek için, şu anda kullanılmayan tüm modüllerin devre dışı bırakılması her zaman önerilir.

Tüm etkin modülleri görüntülemek için şu komutu çalıştırın:

apache2ctl -M

Belirli bir modülün (örneğin, yeniden yazma modülü) etkinleştirilip etkinleştirilmediğini kontrol etmek için komutu çalıştırın.

apache2ctl -M | grep rewrite

Modülü devre dışı bırakmak için şu komutu çalıştırın:

sudo a2dismod rewrite 

12. Apache'nin Güvenliğini Sağlamak için mod_security ve mod_evasive Modüllerini kullanın

Apache'yi kaba kuvvet saldırılarına veya DDoS saldırılarına karşı korumak için mod_security ve mod_evasive modüllerini etkinleştirebilirsiniz.

  • mod_security modülü bir web uygulaması güvenlik duvarı (WAF) gibi davranır ve sitenize gelen şüpheli ve istenmeyen trafiği engeller.
  • mod_evasive modülü, sunucunuzu kaba kuvvet ve hizmet reddi saldırılarına (DoS) karşı korur.

Apache'nin mod_security ve mod_evasive modüllerini kullanarak nasıl korunacağı hakkında daha fazlasını okuyun.

13. Apache'de Kısıtlı İstenmeyen Hizmetler

Apache'in güvenliğini daha da artırmak için, şu anda gerekli değilse sembolik bağlantılar ve CGI yürütme gibi belirli hizmetleri devre dışı bırakmayı düşünün. Apache varsayılan olarak sembolik bağlantıları takip eder, bu özelliğin yanı sıra -Includes özelliğini ve CGI'yi tek satırda kapatabiliriz.

Bunu yapmak için, 'Dizin' bölümündeki 'Seçenekler' yönergesine '-ExecCGI -FollowSymLinks -Includes' satırını ekleyin.

<Directory /your/website/directory>
Options -ExecCGI -FollowSymLinks -Includes
</Directory>

Bu aynı zamanda dizin düzeyinde de gerçekleştirilebilir. Örneğin burada “/var/www/html/mydomain1” dizini için Include ve Cgi dosya yürütmelerini kapatıyoruz.

<Directory "/var/www/html/mydomain1">
	Options -Includes -ExecCGI
</Directory>

Değişiklikleri kaydedin ve Apache'yi yeniden başlatın.

14. Apache'de Dosya Yükleme Boyutunu Sınırlayın

Web sunucunuzu güvence altına almanın bir başka yolu, bir istemciden web sunucusuna gönderilen HTTP istek gövdesinin toplam boyutunu sınırlamaktır. Bunu sunucu bağlamında, dizin başına, dosya başına veya konum başına ayarlayabilirsiniz.

Örneğin, belirli bir dizine dosya yüklemeye izin vermek istiyorsanız /var/www/domain.com/wp-uploads dizini deyin ve yüklenen dosyanın boyutunu 4 milyon ile sınırlayın=4194304Bytes, aşağıdaki yönergeyi Apache yapılandırma dosyanıza veya .htaccess dosyanıza ekleyin.

<Directory "/var/www/domain.com/wp-uploads">
	LimitRequestBody  4194304
</Directory>

Değişiklikleri kaydedin ve Apache'yi yeniden başlatmayı unutmayın.

Bunu sunucu bağlamında, dizin başına, dosya başına veya konum başına ayarlayabilirsiniz. Yönerge, bazen bir tür hizmet reddi (DoS) saldırısı olabilen anormal istemci isteği davranışını ortadan kaldırır.

15. Apache'de Oturum Açmayı Etkinleştirin

Günlüğe kaydetme, istemci istekleriyle ilgili tüm ayrıntıları ve web sunucunuzun performansıyla ilgili diğer bilgileri sağlar. Bu, bir şeylerin ters gitmesi durumunda yararlı bilgiler sağlar. Apache günlüklerini, özellikle sanal ana bilgisayar dosyalarında etkinleştirmek, web sunucusunda bir şeyler ters gittiğinde sorunu tam olarak belirlemenize olanak tanır.

Günlük kaydını etkinleştirmek için iki ana günlük kaydı yönergesi sağlayan mod_log_config modülünü eklemeniz gerekir.

  • ErrorLog – Hata günlüğü dosyasının yolunu belirtir.
  • CustomLog – Bir günlük dosyası oluşturur ve biçimlendirir.

Günlüğe kaydetmeyi etkinleştirmek için bu öznitelikleri sanal ana bilgisayar bölümündeki bir sanal ana bilgisayar dosyasında kullanabilirsiniz.

<VirtualHost 172.16.25.125:443>
        ServerName example.com
        DocumentRoot /var/www/html/example/
        ErrorLog ${APACHE_LOG_DIR}/error.log
        CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Debian sistemlerinde {APACHE_LOG_DIR yönergesi /var/log/apache2 yolu olarak tanımlanır.

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

Apache'i ayrı bir kullanıcı ve grup olarak çalıştırmak yaygın bir güvenlik uygulamasıdır. Bunu yaparak, web sunucusu sürecini diğer sistem süreçlerinden izole edebilir ve web sunucusunun tehlikeye girmesi durumunda olası hasarı en aza indirebilirsiniz.

İlk olarak, özellikle Apache için yeni bir kullanıcı ve grup oluşturmak isteyeceksiniz.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Daha sonra, yeni kullanıcıyı ve grubu belirtmek için Apache yapılandırma dosyasını düzenlemeniz gerekecektir.

User apacheuser
Group apachegroup

Apache'nin çalıştırdığı kullanıcıyı ve grubu değiştireceğiniz için, Apache'nin bunları hâlâ okuyabildiğinden emin olmak için web dizinlerinin ve dosyaların sahipliğini güncellemeniz gerekebilir.

sudo chown -R apacheuser:apachegroup /var/www/html

Bu değişiklikleri yaptıktan sonra bunları uygulamak için Apache'yi yeniden başlatın:

sudo systemctl restart httpd      # For RHEL/CentOS
sudo systemctl restart apache2    # For Debian/Ubuntu

17. DDOS Saldırılarını ve Sertleştirmeyi Koruyun

Web sitenizi DDoS saldırılarına karşı tam olarak koruyamayacağınız doğru. Ancak bunları hafifletmenize ve yönetmenize yardımcı olabilecek bazı yönergeleri burada bulabilirsiniz.

  • TimeOut – Bu yönerge, sunucunun bir hata döndürmeden önce belirli olayların tamamlanması için bekleyeceği süreyi belirtmenize olanak tanır. Varsayılan değer 300 saniyedir. DDoS saldırılarına açık siteler için bu değerin düşük tutulması tavsiye edilir. Ancak uygun ayar büyük ölçüde web sitenizin aldığı isteklerin niteliğine bağlıdır. Not: Düşük bir zaman aşımı bazı CGI komut dosyalarında sorunlara neden olabilir.
  • MaxClients – Bu yönerge, aynı anda sunulabilecek bağlantı sayısına ilişkin sınırı belirler. Bu sınırı aşan tüm yeni bağlantılar sıraya alınacaktır. Hem Prefork hem de Worker MPM'lerde mevcuttur. Varsayılan değer 256'dır.
  • KeepAliveTimeout – Bu yönerge, sunucunun bağlantıyı kapatmadan önce sonraki bir istek için bekleyeceği süreyi belirtir. Varsayılan değer 5 saniyedir.
  • LimitRequestFields – Bu yönerge, istemciler tarafından kabul edilen HTTP istek başlığı alanlarının sayısına bir sınır koyar. Varsayılan değer 100'dür. DDoS saldırıları, HTTP istek başlıklarının aşırı sayıda olması nedeniyle gerçekleşiyorsa bu değerin düşürülmesi önerilir.
  • LimitRequestFieldSize – Bu yönerge, HTTP istek başlığı için bir boyut sınırı belirler.

18. Düzenli Güvenlik Açığı Taramaları Yapın

Web sunucunuzu korumanın bir başka yolu da düzenli olarak güvenlik açığı tarama testleri yapmaktır. Bu, bilgisayar korsanlarının hassas dosyalara erişim sağlamak veya kötü amaçlı yazılım eklemek için kullanabileceği potansiyel güvenlik açıklarının belirlenmesine yardımcı olur.

Güvenlik açığı tarama araçları aynı zamanda güvenli olmayan yapılandırma ayarlarının belirlenmesine ve uyumluluk denetiminin yapılmasına da yardımcı olur. Popüler güvenlik açığı tarama araçları arasında Acutenix, Nessus, Nexpose, Sucuri ve çok daha fazlası bulunur.

Çözüm

Bunlar, ekstra bir koruma katmanı sağlamak ve izinsiz girişleri uzak tutmak için web sunucunuza uygulayabileceğiniz Apache güçlendirme ipuçlarından bazılarıdır.