in

Server beveiligen doe je optimaal met deze tips

Serverbeveiliging is allerminst een statisch gegeven en daarom bepalen we in dit artikel een security-strategie. Het begrip server definiëren we vrij ruim: elk apparaat waarop services actief zijn en dus door clients benaderbaar. Je server beveiligen doe je als volgt.

De basis van je beveiliging wordt al tijdens de eerste serversetup gelegd (vooral als je het begrip ‘server’ toch in de nauwe zin interpreteert), maar ook na de installatie en configuratie moet je voortdurend je server(verkeer) monitoren en beveiligingsmaatregelen optimaliseren.

Elke degelijke beveiligingsstrategie omvat meerdere lagen. Niet alleen zijn er verschillende aspecten waarmee je rekening moet houden, de manier waarop je het ene onderdeel configureert of beveiligt kan bovendien een impact hebben op het andere: van het besturingssysteem via services en applicaties tot gebruikers- en netwerkbeheer.

Op deze pagina gaan we voorbij aan de voor de hand liggende veiligheidsaspecten en gaan we ervan uit dat je:

– Je fysieke servers afdoende afgeschermd hebt tegen ongeautoriseerde toegang;

– Dat je regelmatig zorgt voor updates van firmware, besturingssysteem, drivers en applicaties;

– Dat er – voor zover mogelijk – up-to-date antimalware-software draait;

– En dat je gebruikers bewust maakt van de risico’s.

We gaan er tevens van uit dat je in een robuuste serververbinding voorziet via ssh-verbindingen, bij voorkeur met sleutelverificatie.

Draai alleen wat je nodig hebt

Het liefst draaien er op je systeem alleen applicaties of pakketten die strikt nodig zijn voor de beoogde service(s), zoals php, MongoDB en ngix of .NET framework en IIS. Services (ofwel ‘serverrollen’ in de Microsoft-terminologie) en applicaties die overtollig zijn, verwijder je voor zover mogelijk, zodat automatisch ook de server-footprint en daarmee het aanvalsvlak verkleint.

In Linux doe je dat bij voorkeur via het pakketbeheersysteem van je distributies, zoals yum of dnf (in bijvoorbeeld CentOS, Fedora en Redhat) en apt (in bijvoorbeeld Debian en Ubuntu). In Windows kan dat onder meer vanuit het Configuratiescherm, hoewel er ook externe tools zijn die installaties automatisch kunnen monitoren om ze naderhand grondiger te kunnen verwijderen (zoals Iobit Uninstaller). 

Of je controleert zelf bestands- en registerwijzigingen tijdens een installatie, bijvoorbeeld met Process Monitor. Dat geeft je tegelijk een nuttige inkijk in de systeemaanpassingen die een nieuwe applicatie of service zoal doorvoert.

Wat Windows betreft ga je best ook na welke achtergrondservices zoal actief zijn: druk op Windows-toets+R en voer services.msc uit. Let hierbij goed op de afhankelijkheden (je vindt die via de eigenschappen van een service) en schakel nooit zomaar wat services uit.

Server hardening

Het uitschakelen van overtollige componenten en toegangsmachtigingen vormen een belangrijk onderdeel van wat ‘server hardening’ genoemd wordt. Dat is automatisch makkelijker voor elkaar te krijgen wanneer je het aantal serverrollen per server zoveel mogelijk beperkt. Een webserver bijvoorbeeld hoort eigenlijk niet thuis op een machine waarop je ook een databaseserver draait, vooral omdat beide servers verschillende beveiligingsniveaus vereisen. Dat hebben inmiddels al veel internetbedrijven ontdekt waarvan de gebruikersdatabase werd gehackt, zoals de webshop Allekabels.nl medio april 2021. 

Test via www.haveibeenpwned.com vooral of jouw eigen e-mailadres weleens buit gemaakt is bij zo’n hack. Een webserver hoort namelijk per definitie zichtbaar te zijn op internet, terwijl een database normaliter alleen bereikbaar hoeft te zijn voor een webserver of een andere applicatieserver. Eén primaire functie per server is trouwens al lang een officiële vereiste volgens PCI-DSS 2.2.1, een richtlijn in de creditcardindustrie.

Met een fysiek systeem voor elke service lijkt systeemsegmentering een dure grap te worden, maar je kunt ook elke server in een eigen virtuele machine onderbrengen. Dat kan via onder meer via hosted systeemvirtualisatie, waarbij de virtuele machine als een virtueel gastsysteem binnen het host-besturingssysteem draait (bijvoorbeeld met het gratis VirtualBox). 

Maar een baremetal-hypervisor, rechtstreeks op de kale pc geïnstalleerd, tussen de hardware en het besturingssysteem, is robuuster en krachtiger. Gratis is bijvoorbeeld VMware vSphere Hypervisor (ESXI-architectuur). Beschik je over Windows 10 Pro of hoger, dan kun je Hyper-V activeren, bijvoorbeeld door Windows PowerShell als administrator op te starten en het volgende commando uit te voeren:

Enable-WindowsOptionalFeature -Online -FeatureName Microsoft-Hyper-V -All

Na een herstart start je de applicatie Hyper-V beheer op.

Firewall-instellingen

Voor zover mogelijk heb je op je host uiteraard ook een firewall draaien. Het liefst configureer je die volgens het principe van ‘least privilege’ en sta je uitsluitend noodzakelijke verbindingen toe. Gebruik liever niet een firewallregel als deze (die elke bron toegang geeft tot je MySQL-database):

permit tcp any db-server 3306

Maar gebruik bij voorkeur onderstaande regel, zodat alleen een specifiek ip-adres toegang krijgt:

permit tcp <ip-adres> db-server 3306

Draait je server op Windows en gebruik je de ingebouwde firewall (die op zich prima is), weet dan dat je die zowel vanaf de Opdrachtprompt (netsh advfirewall firewall) als vanuit een grafische interface kunt aansturen (druk op Windows-toets+R en voer wf.msc uit). Of je gebruikt een externe en gratis beheertool in als Malwarebytes Windows Firewall Control.

Zo’n applicatiefirewall op de host zelf is absoluut raadzaam, maar nog veiliger is wanneer je een aanvullende perimeterfirewall gebruikt die aan de rand van je (thuis)netwerk werkt.

Je eigen router heeft vast enkele basale firewallfuncties ingebouwd, maar eventueel kun je alternatieve routerfirmware zoals OpenWrt of DD-WRT overwegen, die over meer flexibele firewallfuncties beschikken. Of je installeert je eigen security-appliance met een gratis tool als OPNsense (Community Edition) of Sophos XG Firewall Home Edition.

Vind je deze configuraties te complex, dan kun je ook de aanschaf van een hardware-appliance overwegen. Die zijn vaak stevig geprijsd (met abonnementen), maar er zijn ook betaalbare alternatieven zoals de Turris Shield. Deze registreert netwerkaanvallen en vult de bijbehorende ip-adressen continu aan in een blacklist (circa 99 euro).

Poortbeheer

Op Linux kun je je firewall (iptables) nog op een andere manier aanvullen: met behulp van de kernel-security-module SELinux (Security-Enhanced Linux). Deze firewall is standaard op CentOS- en Fedora-aanwezig, maar je kunt hem ook zelf installeren met het commando:

apt-get install selinux

Deze module beheert poorttoegang van applicaties, wat inhoudt dat wanneer je bijvoorbeeld de ssh-poort wijzigt, je die poort ook in SELinux voor je ssh-service moet openstellen. Je controleert de status met het commando sestatus. Indien actief, lees je achter de aanduiding SELinux status de tekst enabled af. Inschakelen doe je tijdelijk met:

setenforce enforcing

Of je gebruikt het onderstaande commando, in welk geval je wel waarschuwingen krijgt, maar geen blokkeringen:

setenforce permissive

Om SELinux permanent in te schakelen, geef je het commando:

sudo sed -i ‘s/SELINUX=.*/SELINUX=enforcing/’ /etc/selinux/config

Via deze site kun je beleidsconfiguraties voor SELinux downloaden, voor diverse Linux-distributies.

Je doet er hoe dan ook goed aan de toegang tot poorten, vooral van buitenaf, geregeld te controleren. Een snelle poortcontrole voor één poort voer je uit via www.grc.com/x/portprobe=<poortnummer> of je laat in één keer alle poorten tussen 0 en 1055 scannen via ShieldsUP! 

Surf hiervoor naar de site van ShieldsUP, druk op Proceed en op All Service Ports. Een groen blokje betekent een stealth-poort, blauw is gesloten en rood is open. Stealth is nog iets veiliger dan gesloten, omdat die poort dan helemaal niet op binnenkomende datapakketten reageert. Let onder meer op poorten 22 (ssh) en telnet (23), aangezien hackers die graag in het vizier nemen.

In de afbeelding hierboven zie je dat poort 81 tijdens onze tests openstond. Dat kwam doordat we in onze router een portforwarding-regel hadden gedefinieerd die alle verkeer voor poort 81 naar een ip-camera doorstuurde. Nu is portforwarding nooit de veiligste oplossing, maar al helemaal niet als je er geen ip-filtering op toepast, zodat alleen bekende ip-adressen toegang krijgen. Een veel robuustere oplossing is via VPN (zoals OpenVPN), maar dit valt buiten de context van dit artikel.

Een snelle poortscan van buitenaf met een tool als ShieldsUP! is zeker zinvol, maar er zijn nog grondigere manieren om te testen hoe solide het poortbeheer van je router is. Dat kan bijvoorbeeld door (tijdelijk) de wan-poort van een tweede router aan een lan-poort van je buitenste router te koppelen. Vervolgens koppel je een pc aan die buitenste router en scan je de wan-zijde van de binnenste router met behulp van een securityscanner als het multiplatform Nmap, eventueel via de grafische interface Zenmap

Hiermee kun je grondig alle 65536 tcp- en udp-poorten testen. Overigens kun je ook de lan-kant van de router testen (die heeft wellicht een poort open staan voor lokaal beheer). Een volledige scan uitvoeren van een compleet subnet kan bijvoorbeeld met het commando:

nmap -sS -sU -T4 -A -v 192.168.0.0.24

Kwetsbaarheidsscanners

Hoewel Nmap ook als kwetsbaarheidsscanner kan fungeren dankzij de ingebouwde NSE (Nmap Scripting Engine) zijn er nog diverse andere securityscanners en je doet er goed aan ook zulke scans af en toe uit te voeren.

De Linux-distributie speciaal om penetratietests mee uit te voeren, Kali Linux, bevat de rubriek Vulnerability Analysis met onder meer de scanner Nikto, die je met een eenvoudig commando kunt uitvoeren:

nikto -h <ip-adres_of_hostnaam>

En als je toch een ‘pentester’ als Kali hebt geïnstalleerd, laat zeker niet na ook andere tools uit deze distributie op je servers los te laten.

Een andere scanner voor Linux is OpenVAS (Opensource Vulnerability Assessment System). De eerste setup voer je uit met de opdracht openvas-setup, waarna duizenden NVT’s (Network Vulnerability Test) worden opgehaald.

Nog een andere degelijke kwetsbaarheidsscanner is Nessus, de Essentials-versie is na registratie gratis voor het scannen van maximaal 16 ip-adressen. De tool, die ook de WinPcap-driver installeert, werkt aan de hand van duizenden plug-ins die elk naar een ander potentieel veiligheidslek speuren.

Via de webinterface (standaard op https://localhost:8834) roep je Nessus op en na een succesvolle registratie worden de plug-ins gedownload, een proces dat best lang kan duren. De bediening is bedrieglijk eenvoudig. Je geeft het gewenste scanbereik aan evenals de gewenste plug-ins (een selectie die je trouwens in een scanprofiel kunt bewaren. De kunst is de plug-ins doordacht te selecteren, aangezien een scan erg intensief kan zijn, vooral omdat Nessus een potentiële kwetsbaarheid daadwerkelijk tracht te exploiteren. Na afloop krijg je een uitgebreid scanrapport.

Router-instellingen

De router is al enkele keren ter sprake gekomen, wat niet vreemd is waar het de gateway van en naar je netwerk en servers is. Er noemen als eerste toch wat voor de hand liggende beveiligingsmaatregelen:

– controleer regelmatig op firmware-updates;

– gebruik een eigen en stevig wachtwoord;

– stel wifi in met WPA2 (of WPA3) en AES;

– schakel remote beheer, WPS en bij voorkeur ook uPnP uit (zeker aan de wan-zijde).

Zoals eerder vermeld vermijd je ook het gebruik van portforwarding, tenzij eventueel in combinatie met een strikte ip-filtering. Verder stel je de router zo in dat die niet op wan-pings reageert. De betere routers bieden tevens bescherming tegen diverse aanvallen, zoals DoS- en SYN Flood-aanvallen.

Het is wellicht ook beter om niet de standaard dns-servers van je internetprovider te gebruiken, maar servers die iets meer veiligheid bieden, zoals ondersteuning van DNSSEC en door het blokkeren van hostnamen op een actuele backlist. Degelijke alternatieven zijn Quad 9 (9.9.9.9 en 149.112.112.112) en Cloudflare (1.1.1.1 en 1.0.0.1). Via www.routersecurity.org/testdns.php vind je (online) tools om na te gaan welke dns-servers daadwerkelijk gebruikt worden.

Gebruik je de standaardrouter van je internetprovider, overweeg die te vervangen door een andere router of je plaatst er een tweede router achter. Zoals eerder vermeld, is het wellicht ook mogelijk de standaard routerfirmware door alternatieven als OpenWrt of DD-WRT te vervangen, aangezien die meer (beveiligings)functies bevatten. Sommige fabrikanten (zoals Linksys) voorzien sommige routers zelfs standaard van zulke firmware.

Netwerkisolatie

We raden je tevens aan je (thuis)netwerk te segmenteren, en wel zo dat het subnet met je servers of IoT-apparaten niet zomaar toegang krijgt tot het andere subnet waaraan je andere netwerkapparaten zijn gekoppeld (zoals pc’s en mobiele apparaten). Er bestaan verschillende mogelijkheden voor netwerkisolatie, maar die zijn niet allemaal even veilig. We gaan er hier niet van uit dat je netwerkapparatuur VLAN’s ondersteunt en dus kijken we naar alternatieven.

De eenvoudigste manier is door een gastnetwerk te creëren, een functie die je bij de meeste (thuis)routers aantreft. Schakel bij voorkeur de volgende opties uit:

– Allow guests to acces my local network;

– Allow guests to see each other;

– Access Intranet;

– Enable routing between zones.

En schakel de volgende opties juist in:

– Wireless client isolation;

– Internet Access only.

Een betere oplossing, die wel wat lastiger te configureren is, is het inzetten van een tweede of zelfs een derde router (vaak los je hiermee ook het probleem van een ondermaatse wifi-verbinding op als de router in de meterkast staat).

In een scenario met één extra router verbind je de secundaire, binnenste router via de wan-poort met een lan-poort op je primaire router. Stel het wan-verbindingstype van je secundaire router in op automatische configuratie via DHCP, zodat het wan-ip-adres door de DHCP-server van de primaire router wordt toegekend. Wat de lan-instellingen op je secundaire router betreft, gebruik je een ander ip-segment dan dat van je primaire router. Ook op deze router activeer je de DHCP-server.

Pc’s en mobiele apparaten koppel je aan je secundaire router, terwijl je servers en IoT-apparaten met je primaire router verbindt.

Drie routers

Je zult merken dat de apparaten van je buitenste subnet de toestellen van het binnenste niet zomaar kunnen benaderen, maar het omgekeerde kan nog steeds. Geef je de voorkeur aan twee volledig gescheiden subnetten, dan heb je nog een derde router nodig. Hierbij vertak je de primaire router via de lan-poorten rechtstreeks naar de andere twee routers, een zogenoemde Y-opstelling. Daar kijken we tenslotte nog even naar.

Voor het eerste binnenste subnet ga je op dezelfde manier te werk als bij de tweevoudige routeropzet, zodat het wan-ip-adres van de tweede router door de DHCP-service van de eerste router wordt toebedeeld. Ook de derde router configureer je zo, waarbij je er wel voor zorgt dat het lan-ip-adres weer in een ander subnet terechtkomt. Je servers en IoT-apparaten breng je in één van beide subnetten onder (die kun je wellicht van vaste ip-adressen voorzien zodat je hier de DHCP-service kunt uitschakelen).

Wil je servers absoluut via portforwarding van buitenaf bereikbaar maken, dan zul je merken dat dit met deze constructie niet zonder meer gaat. In dat geval moet je een dubbele portfowarding instellen: eerst op je primaire router naar het wan-ip-adres van je andere router en vervolgens op deze router naar je eigenlijke server.

Om dat te vermijden kun je eventueel de DMZ-functie in je primaire router inschakelen, waar je vervolgens alleen het wan-ip-adres van de andere router invult. In dit geval moet je alleen nog portforwarding-regels instellen op deze laatste router. Deze opzet is wel iets minder veilig en kunnen we dus niet van harte aanbevelen.

Space Launch System: Turbulente geschiedenis van een wegwerpraket

De grootste uitdagingen omtrent thuiswerken