Vyhledávání na webu

18 Tipy pro zabezpečení a posílení webového serveru Apache


Webový server Apache je jedním z nejpopulárnějších a nejpoužívanějších webových serverů pro hostování souborů a webových stránek. Snadno se instaluje a konfiguruje tak, aby vyhovoval vašim potřebám hostingu. Výchozí nastavení však není bezpečné, aby nabízelo tolik potřebnou ochranu, kterou váš web potřebuje.

V této příručce se podíváme na některé tipy a triky pro posílení serveru Apache, které můžete implementovat k posílení zabezpečení svého webového serveru.

1. Jak skrýt informace o verzi Apache a OS

Ve výchozím nastavení webový server Apache zobrazuje svou verzi v případě, že prohlížíte nesprávnou adresu URL webové stránky. Níže je uveden příklad chybové stránky indikující, že stránku nelze na webu najít. Poslední řádek označuje verzi Apache, hostitelský OS, IP adresu a port, na kterém naslouchá.

Nikdy není dobrý nápad zobrazovat informace o vašem webovém serveru, protože to může být dobrý dárek pro hackery při jejich průzkumné misi. Chcete-li přidat vrstvu zabezpečení a ztížit to hackerům, doporučujeme skrýt informace o webovém serveru.

Chcete-li to provést, otevřete výchozí konfigurační soubor Apache v distribucích založených na Debianu.

sudo vim /etc/apache2/apache2.conf

Pro systémy založené na RHEL, jako jsou RHEL, Fedora, CentOS, Rocky a AlmaLinux silný>.

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

Přidejte následující řádky na konec souboru.

ServerTokens Prod
ServerSignature Off

Uložte změny a restartujte webový server Apache.

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

Nyní znovu načtěte stránku a tentokrát se informace o webovém serveru nezobrazí.

2. Zakažte výpis adresářů v Apache

Ve výchozím nastavení Apache umožňuje výpis adresářů a návštěvníci mohou vidět jakékoli soubory nebo adresáře, které máte v adresáři Document Root.

Abychom to demonstrovali, vytvoříme adresář s názvem test.

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

Dále přejdeme do adresáře a vytvoříme několik souborů.

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

Nyní, pokud přistoupíme k URL, http://localhost/test, budeme moci zobrazit výpis adresáře.

Chcete-li zakázat výpis adresářů, přejděte do hlavního konfiguračního souboru Apache a vyhledejte atribut „Directory“. Nastavte parametr 'Options' na '-Indexes' podle obrázku.

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

Znovu načtěte Apache a tentokrát, když navštívíte adresu URL, adresáře se již nebudou zobrazovat.

3. Pravidelně aktualizujte Apache

Vždy se doporučuje udržovat všechny vaše aplikace aktuální, protože nejnovější aplikace přicházejí s opravami chyb a bezpečnostními záplatami, které řeší základní zranitelnosti přítomné ve starších verzích softwaru.

Proto se doporučuje pravidelně aktualizovat aplikace na jejich nejnovější verze.

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

4. Použijte HTTPS šifrování na Apache

Apache ve výchozím nastavení používá protokol HTTP, což je slabý a nezabezpečený protokol, který je náchylný k odposlechu. Chcete-li zlepšit zabezpečení svého webu a ještě více zlepšit hodnocení Google SEO, zvažte šifrování webu pomocí certifikátu SSL.

Tím přepne výchozí protokol HTTP na HTTPS, a proto bude pro kohokoli těžší zachytit a dešifrovat komunikaci odesílanou ze serveru tam a zpět.

Podívejte se, jak zabezpečit webový server Apache pomocí Let’s Encrypt SSL v systému Linux.

  • Jak zabezpečit Apache pomocí Let's Encrypt SSL certifikátu na RHEL
  • Jak zabezpečit Apache pomocí bezplatného šifrování SSL certifikátu na Ubuntu a Debianu

5. Povolte HTTP Strict Transport Security (HSTS) pro Apache

Kromě šifrování webu pomocí certifikátu TLS/SSL zvažte implementaci mechanismu zabezpečení webu HSTS nad HTTPS.

HTTP Strict Transport Security (HSTS) je mechanismus zásad, který chrání webové stránky před útoky typu man-in-the-middle a zneužitím souborů cookie. K tomu dochází, když útočníci downgradují protokol HTTPS na nezabezpečený protokol HTTP.

HSTS umožňuje webovému serveru striktně deklarovat, že webové prohlížeče by s ním měly interagovat pouze prostřednictvím protokolu HTTPS, nikoli prostřednictvím protokolu HTTP.

Chcete-li povolit HSTS, ujistěte se, že váš web používá HTTPS a má platný certifikát TLS/SSL.

Dále povolte modul záhlaví pro Apache:

sudo a2enmod headers

Poté znovu načtěte Apache, aby se změny projevily.

sudo systemctl restart apache2

Dále přejděte do konfiguračního souboru virtuálního hostitele vaší domény.

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

Dále přidejte tento řádek do bloku :

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

Toto vypadá následovně.

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

Parametr max-age dává webovým prohlížečům pokyn, aby na váš web přistupovaly pouze pomocí HTTPS po dobu jednoho roku (31536000=1 rok).

Nakonec restartujte Apache, aby se zásady HSTS projevily.

sudo systemctl restart apache2

6. Povolte HTTP/2 na Apache

V roce 2015 byl vydán HTTP/2, což je nová verze protokolu HTTP, která se snaží řešit nebo vyřešit mnoho problémů, se kterými tvůrci HTTP/1.1 nepočítali.

I když je protokol HTTP/1.1 stále široce používán, je spojen s problémy s výkonem spojenými s používáním více připojení TCP ke zpracování více požadavků z prohlížeče, což vede k vysoké režii zdrojů na straně klienta, což vede ke snížení výkonu sítě.

S rostoucí složitostí a funkčností aplikací byl HTTP/2 vytvořen, aby vyřešil nedostatky HTTP/1.1, které zahrnují dlouhé HTTP hlavičky, pomalé načítání webových stránek a obecný výkon. degradace.

HTTP/2 poskytuje větší ochranu a soukromí než jeho předchůdce. Stejně důležité je zvýšení výkonu díky použití multiplexovaných toků dat. S HTTP/2 zajišťuje jediné připojení TCP efektivní využití šířky pásma, a to i při přenosu více toků dat.

Podívejte se, jak povolit HTTP/2 na webovém serveru Apache pomocí:

  • Jak povolit HTTP/2 v Apache na Ubuntu

7. Omezte přístup k citlivým adresářům v Apache

Dalším bezpečnostním opatřením, které můžete provést, je omezit přístup k adresářům, které mohou obsahovat citlivé informace, jako jsou uživatelská data, protokoly a konfigurační soubory.

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

    # Other virtual host settings

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

Ve výše uvedené konfiguraci zakáže Vyžadovat vše odepřeno přístup každému, kdo se pokouší o přístup k souborům v /sensitive_directory.

Uložte změny a ukončete soubor. Poté restartujte Apache, aby se změny projevily.

8. Zakažte směrnici ServerSignature v Apache

Direktiva ServerSignature v konfiguračním souboru Apache připojí zápatí k dokumentům generovaným serverem, které obsahují informace o konfiguraci vašeho webového serveru, jako je verze a operační systém, na kterém běží. Vystavení zásadních podrobností o vašem webovém serveru škodlivým činitelům výrazně zvýší šance na útok.

Chcete-li zabránit vystavení takových informací, musíte tuto direktivu zakázat v konfiguračním souboru Apache:

ServerSignature Off

Uložte změny a znovu restartujte Apache, aby se změny projevily.

sudo systemctl restart apache2

9. Nastavte směrnici „ServerTokens“ na „Prod“

Direktiva „ServerTokens“ řídí, jaké informace server odesílá, včetně verze Apache (hlavní a vedlejší verze), OS a typu spuštěného webového serveru.

Nejmenší množství informací, které byste chtěli zpřístupnit veřejnosti, je, že webový server je Apache. Cokoli jiného by pouze vystavilo váš server potenciálním útokům. Proto se doporučuje nastavit direktivu ‚ServerTokens‘ v konfiguračním souboru Apache na ‚prod‘.

ServerTokens Off

Jako vždy uložte změny a nezapomeňte restartovat Apache.

10. Zabezpečte Apache pomocí Fail2ban

Fail2ban je open source aplikace pro prevenci narušení, která chrání linuxové systémy před vnějšími hrozbami včetně DoS a útoků hrubou silou. Funguje tak, že neustále monitoruje protokoly systému, zda neobsahují hanebnou aktivitu, a zakazuje hostitelům, kteří odpovídají vzorům napodobujícím chování při útoku.

Fail2ban lze nakonfigurovat tak, aby chránil Apache před útoky DoS neustálým sledováním protokolů Apache pro neúspěšné pokusy o přihlášení a dočasným zákazem problematických IP adres.

Podívejte se, jak nainstalovat Fail2ban v systému Linux pomocí:

  • Jak používat Fail2ban k zabezpečení vašeho linuxového serveru

11. Deaktivujte nepotřebné moduly

Moduly Apache jsou jednoduše programy, které se načítají za účelem rozšíření funkčnosti webového serveru Funkce rozšířené o moduly zahrnují základní ověřování, ukládání obsahu do mezipaměti, šifrování, zabezpečení atd.

Vždy se doporučuje deaktivovat všechny moduly, které se aktuálně nepoužívají, aby se minimalizovala šance, že se stanou obětí útoku.

Chcete-li zobrazit všechny povolené moduly, spusťte příkaz

apache2ctl -M

Chcete-li zkontrolovat, zda je povolen konkrétní modul, například modul pro přepis, spusťte příkaz.

apache2ctl -M | grep rewrite

Chcete-li modul zakázat, spusťte příkaz:

sudo a2dismod rewrite 

12. Použijte moduly mod_security a mod_evasive k zabezpečení Apache

Můžete povolit moduly mod_security a mod_evasive a zabezpečit Apache proti útokům hrubou silou nebo DDoS útokům.

  • Modul mod_security funguje jako firewall webové aplikace (WAF) a blokuje podezřelý a nechtěný provoz na vašem webu.
  • Modul mod_evasive chrání váš server před hrubou silou a útoky typu Denial of Service (DoS).

Přečtěte si více o tom, jak chránit Apache pomocí modulů mod_security a mod_evasive.

13. Omezené nežádoucí služby v Apache

Chcete-li dále zabezpečit Apache, zvažte zakázání určitých služeb, jako jsou symbolické odkazy a spouštění CGI, pokud nejsou aktuálně vyžadovány. Ve výchozím nastavení se Apache řídí symbolickými odkazy, můžeme tuto funkci vypnout, stejně jako funkci -Includes a CGI na jednom řádku.

Chcete-li to provést, přidejte řádek '-ExecCGI -FollowSymLinks -Includes' pro direktivu „Options“ v části „Directory“.

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

Toho lze dosáhnout také na úrovni adresáře. Zde například vypínáme spouštění souborů include a Cgi pro adresář “/var/www/html/mydomain1”.

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

Uložte změny a restartujte Apache.

14. Omezte velikost nahrávání souborů v Apache

Dalším způsobem zabezpečení vašeho webového serveru je omezení celkové velikosti těla požadavku HTTP odeslaného na webový server z klienta. Můžete jej nastavit v kontextu serveru, adresáře, souboru nebo umístění.

Pokud například chcete povolit nahrávání souboru do konkrétního adresáře, řekněte adresář /var/www/domain.com/wp-uploads a omezte velikost nahrávaného souboru na 4 miliony=4194304Bytes, přidejte následující direktivu do svého konfiguračního souboru Apache nebo souboru .htaccess.

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

Uložte změny a nezapomeňte restartovat Apache.

Můžete jej nastavit v kontextu serveru, adresáře, souboru nebo umístění. Direktiva odvrací abnormální chování klientských požadavků, které může být někdy formou útoku DoS (denial-of-service).

15. Povolte přihlašování do Apache

Protokolování poskytuje všechny podrobnosti o požadavcích klientů a jakékoli další informace týkající se výkonu vašeho webového serveru. To poskytuje užitečné informace v případě, že se něco pokazí. Povolení protokolů Apache, zejména v souborech virtuálního hostitele, vám umožní určit problém v případě, že se s webovým serverem něco pokazí.

Chcete-li povolit protokolování, musíte zahrnout modul mod_log_config, který poskytuje dvě hlavní direktivy protokolování.

  • ErrorLog – Určuje cestu k souboru protokolu chyb.
  • CustomLog – Vytváří a formátuje soubor protokolu.

Tyto atributy můžete použít v souboru virtuálního hostitele v sekci virtuálního hostitele k povolení protokolování.

<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>

Direktiva {APACHE_LOG_DIR} v systémech Debianu je definována jako cesta /var/log/apache2.

16. Spusťte Apache jako samostatný uživatel a skupina

Běžným bezpečnostním postupem je spuštění Apache jako samostatného uživatele a skupiny. Tímto způsobem můžete izolovat proces webového serveru od ostatních systémových procesů a minimalizovat potenciální škody v případě kompromitace webového serveru.

Nejprve budete chtít vytvořit nového uživatele a skupinu speciálně pro Apache.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Dále budete muset upravit konfigurační soubor Apache a určit nového uživatele a skupinu.

User apacheuser
Group apachegroup

Protože měníte uživatele a skupinu, kterou Apache spouští, možná budete muset aktualizovat vlastnictví webových adresářů a souborů, abyste zajistili, že je Apache bude moci stále číst.

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

Po provedení těchto změn restartujte Apache, abyste je použili:

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

17. Chraňte DDOS útoky a kalení

No, je pravda, že svůj web před DDoS útoky úplně ochránit nemůžete. Zde je však několik pokynů, které vám mohou pomoci je zmírnit a zvládnout.

  • TimeOut – Tato direktiva umožňuje zadat dobu, po kterou bude server čekat na dokončení určitých událostí, než vrátí chybu. Výchozí hodnota je 300 sekund. U webů náchylných k DDoS útokům je vhodné tuto hodnotu udržovat na nízké úrovni. Vhodné nastavení však do značné míry závisí na povaze požadavků, které vaše webové stránky obdrží. Poznámka: Nízký časový limit může způsobit problémy s některými skripty CGI.
  • MaxClients – Tato direktiva nastavuje limit počtu připojení, která mohou být obsluhována současně. Všechna nová připojení nad tento limit budou zařazena do fronty. Je k dispozici v Prefork a Worker MPMs. Výchozí hodnota je 256.
  • KeepAliveTimeout – Tato direktiva určuje dobu, po kterou bude server čekat na následný požadavek, než uzavře připojení. Výchozí hodnota je 5 sekund.
  • LimitRequestFields – Tato direktiva nastavuje limit počtu polí záhlaví požadavku HTTP přijatých klienty. Výchozí hodnota je 100. Pokud dochází k DDoS útokům kvůli nadměrnému počtu záhlaví požadavků HTTP, doporučujeme tuto hodnotu snížit.
  • LimitRequestFieldSize – Tato direktiva nastavuje limit velikosti pro hlavičku požadavku HTTP.

18. Provádějte pravidelné kontroly zranitelnosti

Dalším způsobem ochrany vašeho webového serveru je provádění pravidelných testů skenování zranitelnosti. To pomáhá identifikovat potenciální bezpečnostní mezery, které by mohli zneužít hackeři k získání přístupu k citlivým souborům nebo k zavedení malwaru.

Nástroje pro skenování zranitelnosti také pomáhají upozornit na nezabezpečená nastavení konfigurace a pomáhají při auditování souladu. Mezi oblíbené nástroje pro skenování zranitelnosti patří Acutenix, Nessus, Neexpose, Sucuri a mnoho dalších.

Závěr

Toto jsou některé z tipů na posílení Apache, které můžete implementovat na svůj webový server, abyste poskytli další vrstvu ochrany a zabránili průnikům.