Skip to content

Apache hardening

Wanneer je de beveiliging van je Apache HTTPD webserver wilt verbeteren kun je diverse acties uitvoeren. Je kunt de configuratie van de webserver aanscherpen, maar ook addionele beveiligings-modules installeren. In dit artikel leg ik puntsgewijs uit welke aanpassingen jij kunt maken om je webserver nog beter te beveiligen.

Verbergen van versienummer en besturingssysteem

De standaardconfiguratie van Apache op CentOS Linux 7 geeft nogal wat gegevens prijs aan iedere bezoeker. Zo worden de softwareversie van Apache HTTPD zelf, maar ook van ingeschakelde modules, weergegeven in de Response Headers van een verzoek. Een voorbeeld van de betreffende Response Header met server informatie is:

Server: Apache/2.4.6 (CentOS) OpenSSL/1.0.2k-fips mod_fcgid/2.3.9

Je kunt op je pc/server zelf eenvoudige de _Response Headers raadplegen op één van de volgende manieren:

Voer onderstaande curl commando uit op je pc of server:

curl --head domain.tld

Voer onderstaande nmap commando uit op je pc of server:

nmap -sV --script=http-headers -p 443 domain.tld

Je kunt Reponse Headers ook raadplegen via de Chrome DevTools. Dit is een extensie van je Chrome browser welke je kunt openen met F12.

  • Open Chrome (web browser)
  • Druk F12, of via Menu naar Hulpprogramma's voor ontwikkelaars
  • Open tabblad Network
  • Selecteer filter Document
  • Ververs de webpagina CTRL + R
  • Selecteer het opgevraagde document
  • Onder het document, open tabblad Headers
  • Kijk onder Response Headers

Het formaat van deze gegevens, en waar deze getoond worden wordt binnen Apache HTTPD geconfigureerd met de volgende instellingen:

  • ServerSignature - Instellen van footer text in diverse documenten (errors, listings, etc.)
  • ServerTokens - Instellen van de Server Response Header

Op een CentOS Linux 7 machine stel je bovenstaande instellingen in via het centrale configuratiebestand van Apache HTTPD. Wanneer deze instellingen nog niet aanwezig zijn, voeg je ze onderaan toe:

vim /etc/httpd/conf/httpd.conf
ServerSignature Off
ServerTokens ProductOnly

Meer info over de genoemde instellingen


Uitschakelen ongebruikte modules

Standaard wordt Apache HTTPD op CentOS Linux voorzien van een forse lijst aan voorgeïnstalleerde en geactiveerde modules. Deze modules voorzien Apache HTTPD van een breed scala aan extra functionaliteit. Maar mogelijk ook functionaliteit die je op je webserver helemaal niet gebruikt. Door ongebruikte modules uit te schakelen draag je bij aan een betere beveiliging van de server, want wat niet aan staat kan ook niet misbruikt worden. Daarbij kost iedere module ook rekenkracht en werkgeheugen. Ook hierop kun je dus wellicht wat besparen.

Binnen een standaardinstallatie staan de meeste modules opgesomd in een apart bestand genaamd 00-base.conf:

cat /etc/httpd/conf.modules.d/00-base.conf
LoadModule access_compat_module modules/mod_access_compat.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
...

Maar welke modules gebruik je nog, en welke kun je veilig uitschakelen? Daar is geen eenvoudig antwoord op mogelijk. Afhankelijk van wat voor websites je draait kunnen er heel verschillende modules benodigd zijn. Om je toch een beetje op weg te helpen hierbij een korte omschrijving van de standaard modules:

mod_access_compat

Compatibiliteitsmodule voor de ondersteuning van de verouderde Order, Deny, Allow instellingen. Deze module is opgevolgd door o.a. mod_authz_core. De module mod_access_compat kun je uitschakelen als je de verouderde instellingen niet gebruikt. Gebruik je die wel, dan zijn ze eenvoudig te updaten naar de moderne varianten.

mod_actions

Module voor het koppelen van CGI-scripts aan bepaalde MIME content types of HTTP-methods. Wordt in de praktijk heel weinig gebruikt, omdat tegenwoordig meestal andere scripttalen worden ingezet.

mod_alias

Koppelt een URL pad aan een intern pad. Wordt o.a. gebruikt in autoindex.conf en welcome.conf waar je ook beide zonder kunt.

mod_allowmethods

Eenvoudige bepalen welke HTTP Methods gebruikt mogen worden voor een opgegeven locatie.

mod_autoindex

Genereert automatisch directory indexes wwanneer er geen index-bestand wordt aangetroffen. Potentieel risico om hiermee te veel data prijs te geven. Heeft tegenwoordig in weinig situaties nut.

mod_cache & mod_cache_disk

Caching filter voor Apache HTTPD welke in de praktijk vaak door alternatieven wordt vervangen.

mod_data

Converteert een response naar een data URL. Dit zou kunnen worden gebruikt om te voorkomen dat voor kleinere afbeelding steeds nieuwe requests verstuurd worden. Deze module converteert afbeeldingen dan naar een base64-gecodeerde URL.

mod_dbd

Deze module kan SQL-databaseverbindingen faciliteren voor andere modules. Dit zijn zeer specifieke gevallen die je in de praktijk nauwelijks tegenkomt.

mod_dumpio

Een debug module waarmee alle input en output van Apache kan worden opgeslagen in logbestanden. Dit kan om enorme hoeveelheden data gaan en zou je alleen gebruiken in zeer specialistische debug situaties. Meestal kan deze module dus gewoon uitgeschakeld worden.

mod_echo

Echo is alles wat deze module doet. Gebruik je nooit.

mod_ext_filter

Kan voorzien in een extern filter waar output eerst doorheen gehaald wordt.

mod_include

Werd vroeger (tot ca. 2005) nog vrij veel gebruikt onder de naam Server Side Includes, als voorloper van includes via scripttalen als PHP. Tegenwoordig wordt het nauwelijks meer gebruik.

mod_negotiation

Bepaalt wat voor document het best verstuurd kan worden, op basis van de eigenschappen van een client.

mod_remoteip

Deze module gebruikt het Remote IP, welke mogelijk is verborgen achter prox-headers of load balancers. Dit wordt alleen in zeer specifieke situaties gebruikt.

mod_substitute

Vervangt op basis van regular expressions of strings een waarde in een response body.

mod_suexec

Kan CGI scripts uitvoeren als andere gebruiker/groep, in combinatie met suexec.

mod_userdir

Deze module verzorgt toegang via een webadres tot bestanden in gebruikersmappen. Hiermee worden automatisch mappings gebruikt voor alle gebruikers op je systeem. Vroeger werd dit wel eens gedaan, maar tegenwoordig kom je deze situatie nooit meer tegen.

mod_version

Hiermee kun je in één configuratiebestand verschillende instellingen doen voor verschillende versies van Apache HTTPD. Dit zou handig kunnen zijn wanneer hier verschillen in optreden, maar praktisch los je dit altijd anders op.

mod_vhost_alias

Wordt gebruikt om dynamisch gegenereerde vhosts te beheren. Voor het genereren worden waarden gebruikt uit het HTTP-request. Dit is een potentieel beveiligingsrisico.

Overige modules

Naast de modules in het standaardbestand 00-base.conf kun je zeer waarschijnlijk ook alle modules uit de volgende bestanden uitschakelen. Deze heb je alleen in zeer specifieke situaties nodig:

  • 00-dav.conf - WebDAV
  • 00-lua.conf - Lua script processing
  • 01-cgi.conf - Uitvoer van CGI scripts
  • 01-fcgid.conf - Uitvoer van CGI scripts