De Apache-webserver is een van de meest populaire en breed gebruikte webservers voor het hosten van bestanden en websites. Het is eenvoudig te installeren en te configureren om aan uw hostingbehoeften te voldoen. De standaardinstellingen zijn echter niet veilig genoeg om de broodnodige bescherming te bieden die uw site nodig heeft.
In deze handleiding bekijken we enkele tips en trucs voor het verharden van de Apache-server die u kunt implementeren om de beveiliging van uw webserver te versterken.
1. Hoe Apache-versie- en OS-informatie te verbergen
Standaard geeft de Apache-webserver zijn versie weer in geval van een verkeerde URL voor een website. Hieronder staat een voorbeeld van een foutpagina waarop wordt aangegeven dat de pagina niet kan worden gevonden op de site. De laatste regel geeft de Apache-versie, het host-OS, het IP-adres en de poort weer waarop het luistert.

Het is nooit een goed idee om de informatie van uw webserver weer te geven, omdat dit een mooi cadeau kan zijn voor hackers in hun verkenningstocht. Om een extra beveiligingslaag toe te voegen en het hackers moeilijker te maken, wordt aanbevolen om de webserverinformatie te verbergen.
Om dit te doen, opent u het standaard Apache-configuratiebestand op Debian-gebaseerde distributies.
$ sudo vim /etc/apache2/apache2.conf
Voor RHEL-gebaseerde systemen zoals RHEL, Fedora, CentOS, Rocky, en AlmaLinux.
$ 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 herstart de Apache webserver.
$ 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 zal de webserverinformatie niet worden weergegeven.

2. Schakel Directory Listing uit in Apache
Standaard staat Apache directory listing toe, en bezoekers kunnen alle bestanden of mappen zien die u mogelijk in uw Document Root map hebt.
Om dit te demonstreren, zullen we een map genaamd test aanmaken.
$ sudo mkdir -p /var/www/html/test
Vervolgens gaan we naar de map en maken we een paar bestanden aan.
$ cd /var/www/html/test $ sudo touch app.py main.py
Als we nu de URL http://localhost/test
openen, kunnen we de directory listing bekijken.

Om directory listing uit te schakelen, ga naar het hoofdconfiguratiebestand van Apache en zoek naar het ‘Directory‘ attribuut. Stel de ‘Options‘ parameter in op '-Indexes'
zoals getoond.
<Directory /opt/apache/htdocs> Options -Indexes </Directory>
Herlaad Apache, en deze keer zullen de mappen niet langer worden weergegeven wanneer u de URL bezoekt.

3. Apache regelmatig bijwerken
Het wordt altijd aanbevolen om al uw applicaties up-to-date te houden, omdat de nieuwste applicaties bugfixes en beveiligingspatches bevatten die onderliggende kwetsbaarheden aanpakken die aanwezig zijn in oudere softwareversies.
Het wordt daarom aanbevolen om uw applicaties regelmatig bij te werken naar hun 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-encryptie op Apache
Apache gebruikt standaard het HTTP-protocol, dat een zwak en onveilig protocol is dat gevoelig is voor afluisteren. Om de beveiliging van uw site te verbeteren en meer nog, uw Google SEO-ranking te verbeteren, overweeg uw site te versleutelen met behulp van een SSL-certificaat.
Hierdoor wordt het standaard HTTP-protocol gewijzigd in HTTPS, waardoor het moeilijker wordt voor iemand om communicatie die heen en weer wordt gestuurd 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 Apache te 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, overweeg de implementatie van het HSTS-webbeveiligingsmechanisme bovenop HTTPS.
HTTP Strict Transport Security (HSTS) is een beleidsmechanisme dat websites beschermt tegen man-in-the-middle-aanvallen & cookiekaping. Dit gebeurt wanneer aanvallers het HTTPS-protocol degraderen naar het onveilige HTTP-protocol.
HSTS stelt de webserver in staat strikt te verklaren dat webbrowsers alleen via HTTPS met het moeten communiceren, en nooit via het HTTP-protocol.
Om HSTS in te schakelen, zorg ervoor dat uw website draait op HTTPS en een geldig TLS/SSL-certificaat heeft.
Vervolgens, schakel de headers-module in voor Apache:
$ sudo a2enmod headers
Vernieuw vervolgens Apache om de wijzigingen toe te passen.
$ sudo systemctl restart apache2
Daarna, open het configuratiebestand van de virtuele host van uw domein.
$ sudo vim /etc/apache2/sites-available/mydomain.conf
Voeg vervolgens deze regel toe binnen het <VirtualHost *:443>
-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 instrueert webbrowsers om uw site alleen te bezoeken met HTTPS gedurende het komende jaar (31536000 = 1 jaar).
Herstart tot slot Apache zodat het HSTS-beleid van kracht wordt.
$ sudo systemctl restart apache2
6. Schakel HTTP/2 in op Apache
In 2015 werd HTTP/2 uitgebracht, wat een nieuwe versie is van het HTTP-protocol dat meerdere problemen aanpakt of oplost die de makers van HTTP/1.1 niet voorzagen.
Terwijl HTTP/1.1 nog steeds veel wordt gebruikt, wordt het geassocieerd met prestatieproblemen die verband houden met het gebruik van meerdere TCP-verbindingen om meerdere verzoeken van de browser te verwerken, wat leidt tot een hoge resource-overhead aan de kant van de client, wat resulteert in verminderde netwerkprestaties.
Toen de toepassingen complexer en functioneler werden, 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 prestatievermindering.
HTTP/2 biedt meer bescherming en privacy dan zijn voorganger. Even belangrijk is verbeterde prestaties door het gebruik van gemultiplexte gegevensstromen. Met HTTP/2 zorgt een enkele TCP-verbinding voor effectief bandbreedtegebruik, zelfs bij het verzenden van meerdere gegevensstromen.
Bekijk hoe je HTTP/2 kunt inschakelen op de Apache-webserver met:
7. Beperk toegang tot gevoelige mappen in Apache
Nog een beveiligingsmaatregel die je zou kunnen nemen, is de toegang beperken tot mappen die mogelijk gevoelige informatie bevatten, zoals gebruikersgegevens, logs 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 verbiedt Vereisen alles geweigerd
de toegang voor iedereen die probeert bestanden in /gevoelige_map te openen.
Sla de wijzigingen op en verlaat het bestand. Start vervolgens Apache opnieuw op om de wijzigingen van kracht te laten worden.
8. Schakel de ServerSignature Directive uit in Apache
De ServerSignature directive 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 het draait. Het blootstellen van cruciale details over uw webserver aan kwaadwillende actoren zal de kans op een aanval aanzienlijk vergroten.
Om blootstelling van dergelijke informatie te voorkomen, moet u deze directive uitschakelen in het Apache configuratiebestand:
ServerSignature Off
Sla de wijzigingen op en herstart opnieuw Apache om de wijzigingen van kracht te laten worden.
$ sudo systemctl restart apache2
9. Stel de ‘ServerTokens’ Directive in op ‘Prod’
De ‘ServerTokens‘ directive controleert welke informatie de server verzendt, inclusief Apache-versie (hoofd- en subversie), besturingssysteem en het type webserver dat wordt uitgevoerd.
De minste hoeveelheid informatie die u aan het publiek zou willen blootstellen, is dat de webserver Apache is. Alles wat daarbuiten valt, zou uw server alleen maar blootstellen aan potentiële aanvallen. Daarom wordt aanbevolen om de ‘ServerTokens‘ directive in het Apache configuratiebestand in te stellen op ‘prod‘.
ServerTokens Off
Zoals altijd, sla de wijzigingen op en zorg ervoor dat Apache opnieuw wordt opgestart.
10. Beveilig Apache met Fail2ban
Fail2ban is een open-source inbraakpreventie-applicatie die Linux-systemen beschermt tegen externe bedreigingen, waaronder DoS- en brute-force-aanvallen. Het werkt door voortdurend systeemlogs te controleren op kwaadaardige activiteit en hosts te verbannen die overeenkomen met patronen die aanvalsgedrag nabootsen.
Fail2ban kan geconfigureerd worden om Apache te beschermen tegen DoS-aanvallen door voortdurend Apache-logs te controleren op mislukte aanmeldingspogingen en tijdelijk de betreffende IP-adressen te blokkeren.
Bekijk hoe je Fail2ban installeert op Linux met behulp van:
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 worden uitgebreid door modules zijn onder andere basisauthenticatie, inhoudscaching, versleuteling, beveiliging, enzovoort.
Het wordt altijd aanbevolen om alle modules die momenteel niet in gebruik zijn uit te schakelen om de kans op het slachtoffer worden van een aanval te minimaliseren.
Om alle ingeschakelde modules te bekijken, voer het commando uit
$ apache2ctl -M

Om te controleren of een specifieke module is ingeschakeld, bijvoorbeeld de rewrite-module, voer het commando uit.
$ apache2ctl -M | grep rewrite

Om de module uit te schakelen, voer het commando uit:
$ sudo a2dismod rewrite

12. Gebruik mod_security en mod_evasive-modules om Apache te beveiligen
Je kunt de mod_security– en mod_evasive-modules inschakelen om Apache te beschermen tegen brute force-aanvallen of DDoS-aanvallen.
- De mod_security-module fungeert als een web application firewall (WAF) en blokkeert verdacht en ongewenst verkeer naar je site.
- De mod_evasive-module beschermt je server tegen brute force- en denial of service-aanvallen (DoS).
Lees meer over hoe u Apache kunt beschermen met behulp van de mod_security- en mod_evasive-modules.
13. Beperk ongewenste services in Apache
Om Apache verder te beveiligen, overweeg om bepaalde services uit te schakelen zoals symbolische koppelingen en CGI-uitvoering indien momenteel niet vereist. Standaard volgt Apache symbolische koppelingen, we kunnen deze functie uitschakelen evenals de -Includes
functie en CGI in één regel.
Voeg hiervoor de regel '-ExecCGI -FollowSymLinks -Includes'
toe aan de ‘Opties’ richtlijn in de ‘Directory‘ sectie.
<Directory /your/website/directory> Options -ExecCGI -FollowSymLinks -Includes </Directory>
Dit kan ook op mapniveau worden bereikt. Bijvoorbeeld, hier schakelen we Includes en Cgi-bestandsuitvoering uit voor de “/var/www/html/mydomain1” map.
<Directory "/var/www/html/mydomain1"> Options -Includes -ExecCGI </Directory>
Sla de wijzigingen op en herstart Apache.
14. Beperk de bestandsgrootte bij het uploaden in Apache
Nog een manier om uw webserver te beveiligen is door de totale grootte van het HTTP-verzoeklichaam dat van een client naar de webserver wordt gestuurd, te beperken. U kunt dit instellen in de context van de server, per map, per bestand of per locatie.
Bijvoorbeeld, als u bestandsupload wilt toestaan naar een specifieke map, zeg /var/www/domain.com/wp-uploads map, en de grootte van het geüploade bestand wilt beperken tot 4M = 4194304Bytes, voeg dan de volgende richtlijn toe aan uw Apache-configuratiebestand of .htaccess bestand.
<Directory "/var/www/domain.com/wp-uploads"> LimitRequestBody 4194304 </Directory>
Wijzigingen opslaan en vergeet niet om Apache opnieuw te starten.
U kunt het instellen in de context van de server, per-directory, per-bestand of per-locatie. De directive weerhoudt abnormaal clientverzoekgedrag dat soms een vorm van denial-of-service (DoS) aanval kan zijn.
15. Loggen inschakelen in Apache
Loggen biedt alle details over clientverzoeken en alle andere informatie met betrekking tot de prestaties van uw webserver. Dit levert nuttige informatie op als er iets misgaat. Het inschakelen van Apache-logs, vooral in virtuele hostbestanden, stelt u in staat om een probleem te lokaliseren als er iets misgaat met de webserver.
Om loggen in te schakelen, moet u de module mod_log_config opnemen, die twee hoofdlogdirectieven biedt.
- ErrorLog – Specificeert het pad van het foutenlogbestand.
- CustomLog – Maakt en formatteert een logbestand.
U kunt deze attributen gebruiken in een virtueel hostbestand in de virtuele hostsectie om logging 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}
directive in Debian-systemen is gedefinieerd als het pad /var/log/apache2.
16. Voer Apache uit als een aparte gebruiker en groep
Apache uitvoeren als een aparte gebruiker en groep is een veelvoorkomende beveiligingspraktijk. Hierdoor kunt u het proces van de webserver isoleren van andere systeemprocessen en mogelijke schade minimaliseren als de webserver wordt gecompromitteerd.
Eerst wil je een nieuwe gebruiker en groep aanmaken specifiek voor Apache.
$ sudo groupadd apachegroup $ sudo useradd -g apachegroup apacheuser
Vervolgens moet je het Apache configuratiebestand bewerken om de nieuwe gebruiker en groep te specificeren.
User apacheuser Group apachegroup
Aangezien je de gebruiker en groep verandert waarmee Apache draait, moet je mogelijk de 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
Na het maken van deze wijzigingen, herstart Apache om ze toe te passen:
$ sudo systemctl restart httpd # For RHEL/CentOS $ sudo systemctl restart apache2 # For Debian/Ubuntu
17. Bescherming tegen DDOS-aanvallen en verharding
Het is waar dat je je website niet volledig kunt beschermen tegen DDoS-aanvallen. Hier zijn echter enkele richtlijnen die je kunnen helpen om ze te beperken en te beheren.
- TimeOut – Deze directive stelt je in staat om de duur te specificeren waarvoor de server zal wachten op bepaalde gebeurtenissen om te voltooien 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 je website ontvangt. Opmerking: Een lage time-out kan problemen veroorzaken met sommige CGI-scripts.
- MaxClients – Deze directive stelt de limiet in voor het aantal verbindingen dat gelijktijdig kan worden bediend. Nieuwe verbindingen boven deze limiet worden in de wachtrij geplaatst. Het is beschikbaar in zowel de Prefork als Worker MPMs. De standaardwaarde is 256.
- KeepAliveTimeout – Deze directive specificeert de duur waarvoor de server zal wachten op een volgend verzoek voordat de verbinding wordt verbroken. De standaardwaarde is 5 seconden.
- LimitRequestFields – Deze richtlijn stelt een limiet in voor het aantal HTTP-verzoekkopteksten dat door clients wordt geaccepteerd. De standaardwaarde is 100. Als DDoS-aanvallen plaatsvinden als gevolg van een overmatig aantal HTTP-verzoekkopteksten, wordt aanbevolen om deze waarde te verlagen.
- LimitRequestFieldSize – Deze richtlijn stelt een groottebeperking in voor de HTTP-verzoekkoptekst.
18. Voer regelmatig kwetsbaarheidsscans uit
Nog een manier om uw webserver te beschermen is door regelmatig kwetsbaarheidsscans uit te voeren. Dit helpt bij het identificeren van potentiële beveiligingslekken die door hackers kunnen worden misbruikt om toegang te krijgen tot gevoelige bestanden of malware te injecteren.
Kwetsbaarheidsscantools helpen ook bij het aanwijzen van onveilige configuratie-instellingen en bij het auditen voor naleving. Populaire kwetsbaarheidsscantools zijn onder andere Acutenix, Nessus, Nexpose, Sucuri en nog veel meer.
Conclusie
Dit zijn enkele van de Apache-beveiligingstips die u kunt implementeren op uw webserver om een extra beschermingslaag te bieden en indringers op afstand te houden.