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
- https://httpd.apache.org/docs/2.4/mod/core.html#serversignature
- https://httpd.apache.org/docs/2.4/mod/core.html#servertokens
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
- WebDAV00-lua.conf
- Lua script processing01-cgi.conf
- Uitvoer van CGI scripts01-fcgid.conf
- Uitvoer van CGI scripts