Zoeken op website

18 Apache Web Server-beveiligings- en verhardingstips


Apache-webserver is een van de populairste en meest gebruikte webservers voor het hosten van bestanden en websites. Het is eenvoudig te installeren en configureren om aan uw hostingbehoeften te voldoen. De standaardinstellingen zijn echter niet veilig om de broodnodige bescherming te bieden die uw site nodig heeft.

In deze handleiding bekijken we enkele tips en trucs voor het versterken van Apache-servers die u kunt implementeren om de beveiliging van uw webserver te versterken.

1. Apache-versie en besturingssysteeminformatie verbergen

Standaard geeft de Apache-webserver de versie weer voor het geval u op de verkeerde URL van een website surft. Hieronder ziet u een voorbeeld van een foutpagina die aangeeft dat de pagina niet op de site kan worden gevonden. De laatste regel geeft de Apache-versie, het host-besturingssysteem, het IP-adres en de poort aan waarnaar wordt geluisterd.

Het is nooit een goed idee om de informatie van uw webserver weer te geven, aangezien dit een goed geschenk kan zijn voor hackers tijdens hun verkenningsmissie. Om een beveiligingslaag toe te voegen en het moeilijker te maken voor hackers, wordt aanbevolen om de webserverinformatie te verbergen.

Om dit te doen, opent u het standaard Apache-configuratiebestand op op Debian gebaseerde distributies.

sudo vim /etc/apache2/apache2.conf

Voor op RHEL gebaseerde systemen zoals RHEL, Fedora, CentOS, Rocky en AlmaLinux sterk>.

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

Voeg de volgende regels toe aan het einde van het bestand.

ServerTokens Prod
ServerSignature Off

Sla de wijzigingen op en start de Apache-webserver opnieuw op.

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

Laad nu de site opnieuw en deze keer wordt de webserverinformatie niet weergegeven.

2. Schakel directoryvermelding in Apache uit

Standaard staat Apache directoryvermelding toe, en bezoekers kunnen de bestanden of directory's zien die u in uw Document Root-directory heeft.

Om dit te demonstreren, zullen we een map aanmaken met de naam test.

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

Vervolgens navigeren we naar de map en maken een paar bestanden.

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

Als we nu de URL http://localhost/test openen, kunnen we de directorylijst bekijken.

Om de directoryvermelding uit te schakelen, gaat u naar het hoofdconfiguratiebestand van Apache en zoekt u naar het attribuut ‘Directory’. Stel de parameter ‘Options‘ in op '-Indexes', zoals weergegeven.

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

Laad Apache opnieuw en deze keer worden de mappen niet langer weergegeven wanneer u de URL bezoekt.

3. Update Apache regelmatig

Het wordt altijd aanbevolen om al uw applicaties up-to-date te houden, omdat de nieuwste applicaties worden geleverd met bugfixes en beveiligingspatches die onderliggende kwetsbaarheden in oudere softwareversies aanpakken.

Daarom wordt het aanbevolen om uw applicaties regelmatig te upgraden naar de nieuwste versies.

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

4. Gebruik HTTPS-codering op Apache

Apache gebruikt standaard het HTTP-protocol, een zwak en onveilig protocol dat gevoelig is voor afluisteren. Om de veiligheid van uw site te verbeteren en, nog belangrijker, uw Google SEO-ranking te verbeteren, kunt u overwegen uw site te versleutelen met een SSL-certificaat.

Door dit te doen, schakelt het het standaard HTTP-protocol over naar HTTPS, waardoor het voor iedereen moeilijker wordt om de communicatie die heen en weer wordt verzonden vanaf de server, te onderscheppen en te ontcijferen.

Bekijk hoe u de Apache-webserver kunt beveiligen met Let's Encrypt SSL op Linux.

  • Hoe Apache te beveiligen met Let's Encrypt SSL-certificaat op RHEL
  • Hoe u Apache kunt beveiligen met gratis Let's Encrypt SSL-certificaat op Ubuntu en Debian

5. Schakel HTTP Strict Transport Security (HSTS) in voor Apache

Naast het versleutelen van uw website met een TLS/SSL-certificaat, kunt u overwegen om het HSTS-webbeveiligingsmechanisme te implementeren bovenop HTTPS.

HTTP Strict Transport Security (HSTS) is een beleidsmechanisme dat websites beschermt tegen man-in-the-middle-aanvallen en het kapen van cookies. Dit gebeurt wanneer aanvallers het HTTPS-protocol downgraden naar het onveilige HTTP-protocol.

HSTS zorgt ervoor dat de webserver strikt kan verklaren dat webbrowsers er alleen mee mogen communiceren via HTTPS, en nooit via het HTTP-protocol.

Om HSTS in te schakelen, moet u ervoor zorgen dat uw website HTTPS gebruikt en een geldig TLS/SSL-certificaat heeft.

Schakel vervolgens de headersmodule voor Apache in:

sudo a2enmod headers

Laad vervolgens Apache opnieuw om de wijzigingen toe te passen.

sudo systemctl restart apache2

Open vervolgens het configuratiebestand van de virtuele host van uw domein.

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

Voeg vervolgens deze regel toe binnen het blok:

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

Dit ziet er als volgt uit.

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

De parameter max-age geeft webbrowsers de opdracht om het komende jaar alleen toegang tot uw site te krijgen via HTTPS (31536000=1 jaar).

Start ten slotte Apache opnieuw op, zodat het HSTS-beleid van kracht wordt.

sudo systemctl restart apache2

6. Schakel HTTP/2 in op Apache

In 2015 werd HTTP/2 uitgebracht, een nieuwe versie van het HTTP-protocol dat meerdere problemen wil aanpakken of oplossen die de makers van HTTP/1.1 niet hadden voorzien.

Hoewel HTTP/1.1 nog steeds op grote schaal wordt gebruikt, gaat het gepaard met prestatieproblemen die verband houden met het gebruik van meerdere TCP-verbindingen om meerdere verzoeken van de browser te verwerken, wat leidt tot hoge overhead aan resources aan de clientzijde. wat leidt tot verminderde netwerkprestaties.

Naarmate de complexiteit en functionaliteit van applicaties toenamen, werd HTTP/2 gemaakt om de tekortkomingen van HTTP/1.1 op te lossen, waaronder lange HTTP-headers, trage laadsnelheden van webpagina's en algemene prestaties degradatie.

HTTP/2 biedt meer bescherming en privacy dan zijn voorganger. Even belangrijk zijn de verbeterde prestaties door het gebruik van gemultiplexte gegevensstromen. Met HTTP/2 zorgt één enkele TCP-verbinding voor effectief bandbreedtegebruik, zelfs bij het verzenden van meerdere gegevensstromen.

Bekijk hoe u HTTP/2 op de Apache-webserver kunt inschakelen met behulp van:

  • Hoe HTTP/2 in Apache op Ubuntu in te schakelen

7. Beperk de toegang tot gevoelige mappen in Apache

Een andere beveiligingsmaatregel die u kunt nemen, is het beperken van de toegang tot mappen die mogelijk gevoelige informatie bevatten, zoals gebruikersgegevens, logboeken en configuratiebestanden.

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

    # Other virtual host settings

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

In de bovenstaande configuratie weigert Alles geweigerd de toegang aan iedereen die toegang probeert te krijgen tot bestanden in /sensitive_directory.

Sla de wijzigingen op en sluit het bestand af. Start Apache vervolgens opnieuw op zodat de wijzigingen van kracht worden.

8. Schakel de ServerSignature-richtlijn uit in Apache

De ServerSignature richtlijn in het Apache-configuratiebestand voegt een voettekst toe aan door de server gegenereerde documenten die informatie bevatten over de configuratie van uw webserver, zoals de versie en het besturingssysteem waarop deze draait. Het blootstellen van cruciale details over uw webserver aan kwaadwillende actoren vergroot de kans op een aanval aanzienlijk.

Om openbaarmaking van dergelijke informatie te voorkomen, moet u deze instructie uitschakelen in het Apache-configuratiebestand:

ServerSignature Off

Sla de wijzigingen op en start Apache opnieuw op, zodat de wijzigingen van kracht worden.

sudo systemctl restart apache2

9. Stel de ‘ServerTokens’-richtlijn in op ‘Prod’

De ‘ServerTokens’ richtlijn bepaalt welke informatie de server verzendt, inclusief de Apache-versie (hoofd- en secundaire versie), besturingssysteem en het type draaiende webserver.

De minste hoeveelheid informatie die u aan het publiek wilt blootstellen, is dat de webserver Apache is. Al het andere zou uw server alleen maar blootstellen aan potentiële aanvallen. Daarom wordt aanbevolen om de ‘ServerTokens‘ richtlijn in het Apache-configuratiebestand in te stellen op ‘prod‘.

ServerTokens Off

Sla zoals altijd de wijzigingen op en zorg ervoor dat u Apache opnieuw opstart.

10. Beveilig Apache met Fail2ban

Fail2ban is een open-source applicatie voor inbraakpreventie die Linux-systemen beschermt tegen externe bedreigingen, waaronder DoS en brute-force-aanvallen. Het werkt door systeemlogboeken voortdurend te controleren op snode activiteiten en door hosts te verbieden die overeenkomen met patronen die aanvalsgedrag nabootsen.

Fail2ban kan worden geconfigureerd om Apache te beschermen tegen DoS-aanvallen door de Apache-logboeken voortdurend te controleren op mislukte inlogpogingen en door overtredende IP's tijdelijk te verbannen.

Bekijk hoe je Fail2ban op Linux installeert met behulp van:

  • Hoe Fail2ban te gebruiken om uw Linux-server te beveiligen

11. Schakel onnodige modules uit

Apache-modules zijn eenvoudigweg programma's die worden geladen om de functionaliteit van de webserver uit te breiden. Functies die door modules worden uitgebreid, omvatten basisauthenticatie, inhoudcaching, encryptie, beveiliging, enz.

Het wordt altijd aanbevolen om alle modules die momenteel niet in gebruik zijn, uit te schakelen om de kans dat u het slachtoffer wordt van een aanval te minimaliseren.

Voer de opdracht uit om alle ingeschakelde modules te bekijken

apache2ctl -M

Om te controleren of een specifieke module is ingeschakeld, bijvoorbeeld de herschrijfmodule, voert u de opdracht uit.

apache2ctl -M | grep rewrite

Om de module uit te schakelen, voert u de opdracht uit:

sudo a2dismod rewrite 

12. Gebruik de modules mod_security en mod_evasive om Apache te beveiligen

U kunt de modules mod_security en mod_evasive inschakelen om Apache te beveiligen tegen brute-force-aanvallen of DDoS-aanvallen.

  • De mod_security module fungeert als een webapplicatiefirewall (WAF) en blokkeert verdacht en ongewenst verkeer naar uw site.
  • De mod_evasive module beschermt uw server tegen brute force en denial of service-aanvallen (DoS).

Lees meer over hoe u Apache kunt beschermen met behulp van de modules mod_security en mod_evasive.

13. Beperkte ongewenste services in Apache

Om Apache verder te beveiligen, kunt u overwegen bepaalde services uit te schakelen, zoals symbolische links en CGI-uitvoering, als deze momenteel niet nodig zijn. Standaard volgt Apache symlinks, we kunnen deze functie uitschakelen, evenals de functie -Includes en CGI op één regel.

Om dit te doen, voegt u de regel '-ExecCGI -FollowSymLinks -Includes' toe voor de 'Options' richtlijn in de sectie 'Directory'.

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

Dit kan ook op directoryniveau worden bereikt. Hier schakelen we bijvoorbeeld de uitvoering van Includes- en Cgi-bestanden uit voor de map “/var/www/html/mydomain1”.

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

Sla de wijzigingen op en start Apache opnieuw.

14. Beperk de uploadgrootte van bestanden in Apache

Een andere manier om uw webserver te beveiligen is door de totale grootte van de HTTP-verzoektekst te beperken die vanaf een client naar de webserver wordt verzonden. U kunt dit instellen in de context van server, per map, per bestand of per locatie.

Als u bijvoorbeeld het uploaden van bestanden naar een specifieke map wilt toestaan, zegt u de map /var/www/domain.com/wp-uploads en beperkt u de grootte van het geüploade bestand tot 4M=4194304Bytes, voeg de volgende instructie toe aan uw Apache-configuratiebestand of .htaccess-bestand.

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

Sla de wijzigingen op en vergeet niet Apache opnieuw te starten.

U kunt dit instellen in de context van server, per map, per bestand of per locatie. De richtlijn weert abnormaal klantverzoekgedrag af, dat soms een vorm van Denial-of-Service (DoS)-aanval kan zijn.

15. Schakel inloggen bij Apache in

Logboekregistratie biedt alle details over klantverzoeken en alle andere informatie met betrekking tot de prestaties van uw webserver. Dit levert nuttige informatie op voor het geval er iets misgaat. Door Apache-logboeken in te schakelen, vooral in virtuele hostbestanden, kunt u een probleem opsporen voor het geval er iets misgaat met de webserver.

Om loggen in te schakelen, moet u de module mod_log_config toevoegen, die twee belangrijke logrichtlijnen biedt.

  • ErrorLog – Specificeert het pad van het foutenlogbestand.
  • CustomLog – Creëert en formatteert een logbestand.

U kunt deze kenmerken gebruiken in een virtueel hostbestand in de sectie virtuele host om logboekregistratie in te schakelen.

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

De {APACHE_LOG_DIR} richtlijn in Debian-systemen wordt gedefinieerd als /var/log/apache2 pad.

16. Voer Apache uit als een afzonderlijke gebruiker en groep

Het uitvoeren van Apache als een afzonderlijke gebruiker en groep is een veel voorkomende beveiligingspraktijk. Door dit te doen, kunt u het webserverproces isoleren van andere systeemprocessen en potentiële schade minimaliseren als de webserver wordt aangetast.

Eerst wilt u een nieuwe gebruiker en groep speciaal voor Apache aanmaken.

sudo groupadd apachegroup
sudo useradd -g apachegroup apacheuser

Vervolgens moet u het Apache-configuratiebestand bewerken om de nieuwe gebruiker en groep op te geven.

User apacheuser
Group apachegroup

Omdat u de gebruiker en groep wijzigt die Apache uitvoert, moet u mogelijk het eigendom van webmappen en bestanden bijwerken om ervoor te zorgen dat Apache ze nog steeds kan lezen.

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

Nadat u deze wijzigingen heeft aangebracht, start u Apache opnieuw op om ze toe te passen:

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

17. Bescherm DDOS-aanvallen en verharding

Het is waar dat u uw website niet volledig kunt beschermen tegen DDoS-aanvallen. Hier volgen echter enkele richtlijnen die u kunnen helpen deze te beperken en te beheren.

  • TimeOut – Met deze richtlijn kunt u opgeven hoe lang de server moet wachten totdat bepaalde gebeurtenissen zijn voltooid voordat er een fout wordt geretourneerd. De standaardwaarde is 300 seconden. Voor sites die gevoelig zijn voor DDoS-aanvallen is het raadzaam om deze waarde laag te houden. De juiste instelling hangt echter grotendeels af van de aard van de verzoeken die uw website ontvangt. Opmerking: een lage time-out kan problemen veroorzaken bij sommige CGI-scripts.
  • MaxClients – Deze richtlijn stelt de limiet in voor het aantal verbindingen dat tegelijkertijd kan worden bediend. Alle nieuwe verbindingen die deze limiet overschrijden, worden in de wachtrij geplaatst. Het is beschikbaar in zowel de Prefork als de Worker MPM's. De standaardwaarde is 256.
  • KeepAliveTimeout – Deze richtlijn specificeert hoe lang de server zal wachten op een volgend verzoek voordat de verbinding wordt gesloten. De standaardwaarde is 5 seconden.
  • LimitRequestFields – Deze richtlijn stelt een limiet in voor het aantal HTTP-verzoekheadervelden dat door clients wordt geaccepteerd. De standaardwaarde is 100. Als DDoS-aanvallen plaatsvinden vanwege een overmatig aantal HTTP-verzoekheaders, wordt aanbevolen deze waarde te verlagen.
  • LimitRequestFieldSize – Deze richtlijn stelt een groottelimiet in voor de HTTP-verzoekheader.

18. Voer regelmatig kwetsbaarheidsscans uit

Een andere manier om uw webserver te beveiligen is door regelmatig kwetsbaarheidsscans uit te voeren. Dit helpt bij het identificeren van potentiële gaten in de beveiliging die door hackers kunnen worden uitgebuit om toegang te krijgen tot gevoelige bestanden of om malware te injecteren.

Tools voor het scannen op kwetsbaarheden helpen ook om onveilige configuratie-instellingen aan het licht te brengen en helpen bij het controleren op naleving. Populaire tools voor het scannen op kwetsbaarheden zijn onder meer Acutenix, Nessus, Nexpose, Sucuri en nog veel meer.

Conclusie

Dit zijn enkele van de Apache-hardeningstips die u op uw webserver kunt implementeren om een extra beschermingslaag te bieden en indringers op afstand te houden.