Het veilig beheren van webservers of exchange servers stelt netwerkbeheerders voor een probleem: hoewel online diensten zoals websites of e-mail via het publieke netwerk beschikbaar moeten zijn, maakt een directe verbinding met het internet het systeem kwetsbaar voor malware en handmatige aanvallen. Vaak wordt er daarom gebruikgemaakt van een intermediaire netwerkcomponent – een zogenaamde reverse proxy.
In principe is een reverse proxy een server die als communicatie-interface in het netwerk optreedt en aanvragen aanneemt en doorstuurt naar de doelcomputer. Een reverse proxy die dienst doet als server, ook wel een proxyserver genoemd, wordt in bedrijfsnetwerken gebruikt om clientapparaten een controleerbare toegang tot het internet te garanderen. De server die als proxy is geconfigureerd vormt in dit geval de enige verbinding met het publieke netwerk. Dit wordt een forward proxy genoemd.
Een forward proxy kanaliseert alle aanvragen van het interne netwerk en stuurt die met een eigen afzenderadres door naar de doelservers op internet. Antwoorden van de servers bereiken eerst de proxy voor ze worden verspreid naar de diverse clientapparaten. Die blijven daardoor anoniem, tenzij de gebruikte proxy een transparante proxy is. Om bandbreedte te besparen en de webpagina sneller te kunnen laden, worden proxyservers over het algemeen zo geprogrammeerd dat ze regelmatig aangevraagde content tijdelijk opslaan in de cache, zodat die informatie direct beschikbaar is zonder een nieuwe serveraanvraag.
Terwijl een forward proxy clientapparaten in een netwerk beschermt tegen invloeden uit het internet, werkt een reverse proxy, zoals de naam al doet vermoeden, in omgekeerde richting. Zo’n reverse proxyserver doet dienst als een extra veiligheidselement voor een of meerdere webservers door aanvragen van het internet te accepteren en door te sturen naar een backend server op de achtergrond.
Een reverse proxy als server kan als netwerkcommunicatie-interface verschillende functies overnemen die de veiligheid van de backend server waarborgen en het dataverkeer optimaliseren.
Een reverse proxy is een extra veiligheidsmaatregel die voor een of meerdere webservers ingeschakeld kan worden. Een webadres wordt in de omgekeerde richting van een gewone proxy omgezet. Een reverse proxy neemt plaatsvervangend de aanvragen van servers aan en leidt ze naar de bijbehorende client. De reverse proxy waarborgt daarbij een of meerdere clients de toegang tot een intern net.
Reverse proxy’s worden normaal gesproken beveiligd met een firewall in een privénetwerk of een demilitarized zone. De reverse proxy vormt daarbij, net als een forward proxy, de enige verbinding tussen internet en het privénetwerk. Alle aanvragen aan de backend server in de LAN passeren dus dezelfde communicatie-interface voor ze worden doorgestuurd naar de eigenlijke doelsystemen. Met zo’n bundeling is het mogelijk om het inkomende dataverkeer te controleren, meerdere servers onder dezelfde URL beschikbaar te stellen, aanvragen gelijkmatig te verdelen over de verschillende servers en het ophalen van gegevens te versnellen met behulp van caching. Reverse proxy's als server worden gebruikt voor de volgende toepassingen:
De Apache reverse proxy HTTP-server kan ook worden gebruikt als reverse proxy. De populairste webserver ter wereld beschikt over verschillende extensiemodules voor diverse proxyfuncties en kan worden geconfigureerd met slechts enkele coderegels. In de volgende stap-voor-staphandleiding leggen we uit hoe je een Apache installatie op het besturingssysteem Ubuntu uit kan breiden met de benodigde module en hoe je een configuratiebestand maakt voor een redirect.
De opensource Apache reverse proxy HTTP-server wordt gratis beschikbaar gesteld door de Apache Software Foundation. Een introductie in de webserver software kun je vinden in dit artikel.
Om een Apache reverse proxy HTTP-server te kunnen gebruiken als reverse proxy heb je de mod_proxy module nodig. Die voert de kernfuncties uit en kan worden uitgebreid met verschillende aanvullende modules:
Om de module mod_proxy inclusief alle aanvullende modules te installeren, hoef je enkel de volgende commandoregel in te voeren:
sudo apt-get install libapache2-mod-proxy-html
Deze tutorial richt zich op de basisfuncties van de Apache module mod_proxy. Een gedetailleerde beschrijving van de aanvullende modules en alle benodigde directives kun je vinden in de officiële documentatie van het Apache project.
Om afzonderlijke modules van de Apache reverse proxyfunctie te activeren gebruik je het commando a2enmod. Modules die al zijn geactiveerd, kunnen met a2dismod worden gedeactiveerd. Voor het maken van een eenvoudige reverse proxy voor een downstream webserver volstaat het om mod_proxy en mod_proxy_http te laden:
sudo a2enmod proxy
sudo a2enmod proxy_http
Nadat de module is geactiveerd, moet de Apache reverse proxy HTTP-server opnieuw worden opgestart:
sudo apache2 reload
Om te zorgen dat de reverse proxy aanvragen van internet kan ontvangen en kan doorsturen naar de juiste server in het lokale netwerk moet het configuratiebestand 000-default.conf in de map /etc/apache2/sites-enabled worden gedeactiveerd en worden vervangen door een virtual host bestand, zoals voorbeeld.conf. Het is raadzaam om voor elke doelserver met een eigen IP een apart virtual host bestand te maken volgens onderstaand schema:
<VirtualHost *:80>
ServerName domain.tld
ServerAlias www.domain.tld
ProxyRequests Off
ProxyPass / http://123.456.7.89/
ProxyPassReverse / http://123.456.7.89/
</VirtualHost>
Instructies voor de proxyfunctie worden gedefinieerd binnen de directive <VirtualHost>. De starttag bevat tevens het IP-adres inclusief poortnummer waarop Apache, geconfigureerd als reverse proxy, moet luisteren voor aanvragen. Wanneer alle IP-adressen daarbij zijn betrokken, wordt de tijdelijke aanduiding * zoals in het voorbeeld gebruikt. Aanduidingen binnen de VirtualHost-tags worden tevens aangegeven in de vorm van directives. In tegenstelling tot de VirtualHost-tag specificeren deze argumenten hoe inkomende aanvragen en antwoordpakketten moeten worden bewerkt. Vooral de directives ServerName, ProxyPass en ReversePass zijn daarbij essentieel.
Daarnaast zijn er twee andere directives in het voorbeeld: ServerAlias en ProxyRequests. Deze hebben geen basisfunctie voor de reverse proxyserver en zijn dus optioneel.
Als de regels voor de proxyfunctie zijn gedefinieerd, moet de configuratie worden geactiveerd via de terminal:
sudo a2ensite voorbeeld.conf
De Apache reverse proxy HTTP-server accepteert nu alle aanvragen aan domain.tld of www.domain.tld en stuurt die door in de vorm van proxy requests aan een backend server met het IP 123.456.7.89/.