Tips voor de expert: Server beveiligen

Of je nu een ftp-server, een mailserver, een webserver, of welke service dan ook hebt draaien … je wilt uiteraard vermijden dat personen toegang krijgen tot diensten en daemons waar je die liever buiten houdt. Dit moet je weten over je server beveiligen.

Wanneer je de infrastructuur opzet om services en applicaties aan te kunnen bieden, is je voornaamste zorg ongetwijfeld dat alles stabiel draait en dat de diensten goed bereikbaar zijn. Het veiligheidsaspect is vaak slechts een verre, tweede zorg en dat kan je vroeg of laat duur komen te staan. We bekijken hier enkele veiligheidsaspecten die je het best al voor of tijdens het opzetten van je services ter harte neemt.

We gaan ervan uit dat je server deel uitmaakt van je thuisnetwerk, wat inhoudt dat de verbindingen van en naar je server via je router lopen. Het is dus evident dat je de configuratie van die router de nodige aandacht geeft. Uiteraard voorzie je je router van een eigen, complex wachtwoord en schakel je bij voorkeur ‘twijfelachtige’ diensten en functies als upnp, nat-pmp en wps uit.

UPnP-test

Je kunt wat upnp betreft ook een online test inzetten (via Proceed / GRC’s Instant UPnP Exposure Test). Schakel vooral ook de functie remote administration uit. Heb je dit absoluut nodig, probeer de verbinding dan te beperken tot https, stel een ander poortnummer in, beperk de connectie tot specifieke bron-ip-adressen en zorg voor een automatische time-out.

Controleer je router bovendien regelmatig op open poorten – op deze site vind je een reeks online testtools, van dns tot tcp en udp. Houd tevens de firmware up-to-date.

Twee routers

Het is niet verstandig om de machine waarop je publieke server draait zonder meer aan de router te koppelen, zoals je dat met de andere toestellen van je thuisnetwerk hebt gedaan. Je zou kunnen overwegen de servermachine in een DMZ van je router te plaatsen, maar dan moet je er wel voor zorgen dat de machine geheel gescheiden blijft van de rest van je netwerk en dat er ook een firewall actief is.

Een alternatief is een opzet met twee routers, waarbij je de tweede router via de wan-poort verbindt met een lan-poort van je ‘hoofdrouter’ (die aan het modem is gekoppeld) – en wel zo dat beide routers zich intern elk van een ander subnet bedienen. In deze opzet zijn toestellen die je aan de tweede router hebt gekoppeld, niet zonder meer bereikbaar vanaf de eerste router, wat maakt dat je je (publieke) servers het best aan de eerste router hangt.

Firewall instellen

Hierboven hebben we het al gehad over online testtools waarmee je onder meer kunt nagaan welke poorten allemaal van buitenaf bereikbaar zijn. Services die niet van buitenaf bereikbaar horen te zijn, kun je met behulp van een firewall blokkeren.

De meeste routers beschikken standaard over een ingebouwde firewallfunctie en dat geldt bijvoorbeeld ook voor een nas. Dat neemt niet weg dat je ook op je servermachine een (bijkomende) firewall kunt installeren – zelfs wanneer de serverapplicatie al in bepaalde beveiligingsopties voorziet (zoals het beperken van de verbinding tot bepaalde bron-ip’s).

server beveiligen

© PXimport

beveiligingsopties voorziet (zoals het beperken van de verbinding tot bepaalde bron-ip’s).

Idealiter stel je de firewall initieel zo in dat alle verbindingen worden geblokkeerd, waarna je alleen de noodzakelijke uitzonderingen toevoegt. Dat moet je bovendien zo specifiek mogelijk doen, overeenkomstig het principe van ‘least privilege’. Een regel als

permit tcp any db-server 3306

geeft bijvoorbeeld elke bron MySQL-toegang tot de database, terwijl dat ongetwijfeld niet je bedoeling is. Je zou deze regel dus kunnen beperken tot iets als

permit tcp 12.34.56.78 db-server 3306

(waarbij 12.34.56.78 het ip-adres is van de host die je toegang wilt verschaffen).

Er zijn verschillende (gratis) firewalls voor Linux-omgevingen beschikbaar, waaronder de gebruiksvriendelijke UFW Firewall, de ingebouwde iptables-interface en ConfigServer Security & Firewall.

Ssh-verificatie

Om je server remote te beheren, maak je bij voorkeur gebruik van een ssh-connectie. Deze verbinding is immers versleuteld. Dat is weliswaar ook het geval wanneer je je op basis van een wachtwoord aanmeldt, maar dit laatste heeft als nadeel dat brute-force-attacks mogelijk zijn. Dit laatste kun je wel tegengaan door gebruik te maken van bijvoorbeeld fail2ban. Deze tool zorgt ervoor dat ip-adressen worden geblokkeerd zodra die te vaak proberen in te loggen over ssh.

Een beter alternatief is echter dat je wachtwoordverificatie via ssh uitzet en alleen sleutelverificatie toelaat (ssh key authentication). Het genereren van een paar ssh-sleutels is zo gebeurd, waarna je de publieke sleutel maar naar je server hoeft over te brengen. Bijkomend kun je ssh ook op een niet-standaardpoort laten draaien. Dit heeft weliswaar meer weg van ‘security through obscurity’, maar kwaad kan het blijkbaar niet: onze eigen UFW Firewall registreerde op enkele dagen tijd 2883 pogingen om met standaardpoort 22 te verbinden, en slechts 10 op (de door ons effectief gebruikte) poort 2223.

Eventueel valt ook een dienst als Webmin te overwegen, althans via ssl. Webmin is een webinterface voor het beheer van Linux-machines die het handmatig aanpassen van configuratiebestanden grotendeels overbodig maakt. Hier vind je een overzicht van de beschikbare modules.

server beveiligen

© PXimport

Audits en updates

We hebben het al gehad over online tools om na te gaan welke poorten en services er van buitenaf bereikbaar zijn, maar je doet er goed aan dat ook regelmatig te checken met (ingebouwde) tools als netstat. Zo kun je op Linux met

sudo netstat -lnptu

controleren welke poorten er door welke services gebruikt worden.

Als je de beveiliging van je server zeer serieus neemt, dan installeer je idealiter ook een heus ids (intrusion detection system). Zo’n ids kan ook op regelmatige tijdstippen een audit uitvoeren op bestandsniveau en je erop attenderen zodra een (systeem)bestand gewijzigd blijkt. Dat vergt weliswaar de nodige inspanning van jezelf als beheerder, gezien je bij elke legitieme aanpassing in principe een nieuwe ‘baseline’ hoort aan te maken. Een bekend opensource ids-pakket is Snort, beschikbaar voor Windows en Linux.

Vpn en ssl/tls

Om je van een veilige, versleutelde verbinding tussen een remote toestel en (de servers op) je thuisnetwerk te verzekeren, kun je van een vpn-verbinding gebruikmaken. Bij voorkeur op basis van OpenVPN of eventueel L2TP/IPSec. Het is perfect mogelijk zelf een vpn-server op te zetten, die dan eigenlijk fungeert als het centrale toegangspunt voor je netwerk.

We besteden hier echter geen verdere aandacht aan, omdat we dit eerder al gedaan hebben. De hele bundeling van artikelen is hier te vinden.

Deel dit artikel
Voeg toe aan favorieten