Inleiding
Meestal richt je je op het opzetten en draaien van je cloudtoepassingen. Als onderdeel van je installatie- en implementatieproces is het belangrijk om robuuste en grondige beveiligingsmaatregelen in te bouwen voor je systemen en toepassingen voordat deze publiekelijk beschikbaar zijn. Door de beveiligingsmaatregelen in deze handleiding toe te passen voordat je je toepassingen implementeert, zorg je ervoor dat elk programma dat je op je infrastructuur draait, een veilige basisconfiguratie heeft, in tegenstelling tot ad-hoc maatregelen die mogelijk na de implementatie worden genomen.
Deze gids benadrukt enkele praktische beveiligingsmaatregelen die je kunt nemen tijdens het configureren en opzetten van je serverinfrastructuur. Deze lijst is geen uitputtende lijst van alles wat je kunt doen om je servers te beveiligen, maar het biedt je een startpunt waarop je verder kunt bouwen. Na verloop van tijd kun je een meer aangepaste beveiligingsbenadering ontwikkelen die aansluit bij de specifieke behoeften van je omgevingen en toepassingen.
SSH-sleutels
SSH, of Secure Shell, is een geëncrypteerde protocool dat wordt gebruikt om servers te administreren en met servers te communiceren. Wanneer u werkzaamheden uitvoert op een server, zult u waarschijnlijk de meeste van uw tijd doorbrengen in een terminal sessie die u verbindt met uw server via SSH. Als alternatief voor inloggen met gebruikersnamen en wachtwoorden worden SSH-schijven gebruikt, die een veilige manier zijn voor inloggen bij uw server en worden geadviseerd voor alle gebruikers. Met SSH-schijven wordt asymmetrische encryptie gebruikt, een patroon dat u ook elders kunt encounternemen.~/.ssh/authorized_keys
). Om meer te leren over hoe SSH-schijfbasierte authenticatie werkt, lees
encryption
asymmetric encryption
Understanding the SSH Encryption and Connection Process
How Do SSH Keys Enhance Security?
Met SSH worden alle soorten authenticaties geheel gecodeerd. Toch kunnen malvezijden met eeniederlogins proberen, ook als het gebruik van wachtwoordauthentificatie toegestaan is. Als er een openbare IP-adres is voor de server, kan een schadevolle aanval plaatsvinden, zelfs als er methodes zijn om toegang te blokkeren na meerdere mislukte pogingen van dezelfde IP-adres. Desondanks stelt elk scenario voor waarin een gebruiker op een plausibele manier probeert toegang te verkrijgen tot uw stack door herhaaldelijke brute force aanvalen op uw server, dan bieden ze een veiligheidsrisico. Om de gebruikersnaam en wachtwoord-authenticatie uit te schakelen, moet u SSH-key authenticatie instellen. SSH-keys hebben vaak veel meer bits datum dan een wachtwoord; je kunt bijvoorbeeld een hashdatum van een 12-letterige wachtwoord genereren met een SSH-sleutel van 128-bit. Sommige encryptiealgoritmen zijn echter nog steeds mogelijk te breken door genoeg keer te proberen om een hashdatum te ontleed op een machtige computer. Andere, zoals de standaard RSA-sleutel die door moderne SSH-clients wordt gebruikt, zijn nog steeds niet mogelijk te breken.
Hoe implementeer je SSH-sleutels?
Op je lokale machine kunt je SSH-sleutels genereren met de ssh
-commando, en je kunt daarna de publieke sleutel overdragen naar een extern server.
Om SSH-toegang op je server te instellen, kunt u de stappen volgen Hoe installeer je SSH-toegangsbekers voor Ubuntu, Debian, of CentOS.
Voor elk onderdeel van je stack dat gebruikersnaam-access nodig heeft of gevoerd wordt door aanvalstacties als brute-force-attacks, kunt u een oplossing implementeren zoals fail2ban op je servers om wachtwoord proberen te beperken.
Het is een goede praktijk om niet direct via SSH met de root
-gebruiker te loggen. In plaats daarvan log je in als een onbevoegd gebruiker en benut dan zoektools als sudo
om privileges te verhogen als nodig. Dit aanpak met beperkte macht is bekend als het principe van minimaal privilege. Na het verbinden met je server en het verificieren dat je een onbevoegd account hebt gemaakt die werkt met SSH, kunt u de PermitRootLogin no
directief in /etc/ssh/sshd_config
op je server instellen en dan de server’s SSH-proces herstarten met een commando als sudo systemctl restart sshd
.
Firewalls
Een firewall is een software- of hardwareapparaat dat reguleert hoe diensten worden blootgesteld aan het netwerk en welke soorten verkeer worden toegestaan in en uit een bepaalde server of servers. Een juist geconfigureerde firewall zorgt ervoor dat alleen diensten die publiek toegankelijk moeten zijn, van buitenaf bereikbaar zijn vanaf uw servers of netwerk.
Op een typische server kunnen er standaard verschillende diensten actief zijn. Deze kunnen worden ingedeeld in de volgende groepen:
- Publieke diensten die door iedereen op het internet kunnen worden bereikt, vaak anoniem. Een voorbeeld hiervan is de webserver die uw daadwerkelijke website serveert.
- Prive-diensten die alleen door een select groep van geautoriseerde accounts of van bepaalde locaties moeten kunnen worden bereikt. Bijvoorbeeld, een databasebeheerpaneel zoals phpMyAdmin.
- Interne diensten die alleen toegankelijk moeten zijn vanuit de server zelf, zonder de dienst bloot te geven aan het publieke internet. Bijvoorbeeld, een database die alleen lokale verbindingen moet accepteren.
Firewalls kunnen ervoor zorgen dat de toegang tot uw software wordt beperkt volgens de bovenstaande categorieën met verschillende gradaties van granulariteit. Publieke diensten kunnen open en toegankelijk blijven voor het internet, en private diensten kunnen worden beperkt op basis van verschillende criteria, zoals verbindingstypen. Interne diensten kunnen volledig ontoegankelijk voor het internet worden gemaakt. Voor poorten die niet worden gebruikt, wordt de toegang in de meeste configuraties volledig geblokkeerd.
Hoe Versterken Firewalls de Beveiliging?
Zelfs als je diensten beveiligingsfuncties implementeren of beperkt zijn tot de interfaces waarop je ze wilt draaien, biedt een firewall een basisklaag van bescherming door de verbindingen naar en van je diensten te beperken voordat verkeer door een applicatie wordt afgehandeld.
Een correct geconfigureerde firewall beperkt de toegang tot alles behalve de specifieke diensten die je nodig hebt om open te houden, meestal door alleen de poorten geopend te houden die geassocieerd zijn met deze diensten. Bijvoorbeeld, SSH draait meestal op poort 22, en HTTP/HTTPS-toegang via een webbrowser draait meestal op poorten 80 en 443 respectievelijk. Door alleen een paar softwarepakketten bloot te geven, vermindert je de aanvalsoppervlakte van je server, waardoor de componenten die vatbaar zijn voor exploitatie worden beperkt.
Er zijn veel firewalls beschikbaar voor Linux-systemen, en sommige zijn complexer dan anderen. Over het algemeen hoef je alleen veranderingen aan je firewallconfiguratie aan te brengen wanneer je veranderingen aan de diensten die op je server draaien aanbrengt. Hier zijn enkele opties om aan de slag te gaan:
-
UFW, of Uncomplicated Firewall, wordt standaard geïnstalleerd op sommige Linux-distributies zoals Ubuntu. Je kunt meer hierover te weten komen in Hoe een Firewall in te stellen met UFW op Ubuntu 20.04
-
Als je Red Hat, Rocky of Fedora Linux gebruikt, kun je Hoe een Firewall in te stellen met firewalld lezen om hun standaardgereedschappen te gebruiken.
-
Vele softwarebrandwallen, zoals UFW en firewalld, schrijven hun ingestelde regels direct naar een bestand genaamd
iptables
. Om te leren hoe u met deiptables
-configuratie direct werkt, kunt u Iptables Essentials: Common Firewall Rules and Commands bekijken. Noteer dat sommige andere software, die poortregels op eigen recht implementeert, zoals Docker, ook direct naariptables
schrijft en wellicht conflicten vindt met de regels die u met UFW creëert. Het is dus handig om te kunnen lezen wat er in eeniptables
-configuratie zit in gevallen als dit.
Note: Veel hostingserviceproviders, inclusief DigitalOcean, staan er toe dat je een firewall configureert als dienst die als extern laag draait bovenop je cloud-server(s). Deze configuraties, die worden uitgevoerd op de netwerkrand met geleidende toolsen, zijn vaak minder complex in praktijk, maar kunnen moeilijker worden gescript en herhalen. Je kan refereren aan de documentatie voor DigitalOcean’s cloud firewall.
Gezien je de toegang tot je diensten moet toevoegen expliciet, zal je het verplicht hebben om te evalueren hoe een dienst wordt uitgevoerd, wordt gebruikt en wie er toegang zou moeten hebben. Zo worden nieuwe diensten niet onbewust aan de openbaar netwerk exposeerd. In plaats daarvan moet je toegang expliciet toevoegen, wat je zal forceren om te evalueren hoe een dienst wordt uitgevoerd, wordt gebruikt en wie er toegang zou moeten hebben.
VPC-netwerken
Een Virtueel Privaat Netwerk (VPN) is een privatenetwerk voor de bronnen van infrastructuur. VPN-netwerken bieden een meer veilige verbinding tussen bronnen omdat de netwerkinterface niet bereikbaar is vanuit het publiek internet.
Hoe doe VPC-netwerken hun beveiliging versterken?
Bepaalde hostingproviders zullen, als standaard, je cloud-servers één publieke netwerkinterface en één privénetwerkinterface toevoegen. Deactiveren van de publieke netwerkinterface op onderdelen van je infrastructuur zal alleen maar toestaan dat deze instanties elkaar gebruiken via hun privénetwerkinterfaces over een interne netwerk, wat betekent dat het verkeer tussen uw systemen niet door het openbare internet wordt gedragen waar het exposeerd of afgelopen kan worden.
Door slechts een paar specifiek toegestane internet-gateways te exposeren, ook wel bekend als ingress gateways, als de enige toegangspunt tussen de bronnen in je VPC-netwerk en het openbare internet, hebben u meer controle en visibiliteit over het publieke trafik die naar uw resources verbindt. Moderne containerorchestratingsysteem als Kubernetes heeft een zeer goed definieerde concept van ingress gateways, omdat ze standaard veel privénetwerkinterfaces aanleggen die selectief moeten worden exposeerd.
Implementeren van VPC-netwerken
Van veel cloudinfrastructuurbedrijven kunt u resources aanbrengen en toevoegen aan een VPC-netwerk binnen hun datacenters.
Notitie: Als u DigitalOcean gebruikt en wilt configureren om uw eigen VPC-gateway te maken, kunt u volgens de Gebruikershandleiding voor het configureren van een Droplets als VPC-gateway lezen hoe op Debian-, Ubuntu-, en CentOS-basiserende servers.
Handmatig configureren van je eigen privénetwerk kan vereisen dat je een geavanceerd serverconfiguratie en netwerkingkennis hebt. Een alternatief voor het instellen van een VPC-netwerk is het gebruik van een VPN-verbinding tussen de servers.
VPN’s en Privénetwerking
Een VPN, of virtueel privénetwerk, is een manier om secure verbindingen te maken tussen afstandsecomputers en deze als lokale privénetwerken te presenteren. Dit biedt een manier om je diensten te configureren als ze op een privénetwerk zouden zijn en remote servers over secure connecties te verbinden.
Voorbeeld: Digitocean privénetwerken mogelijk maken dat servers in dezelfde account of team binnen dezelfde regio isolateerde communicatie mogelijk maken.
Hoe Doe VPN’s Enhance Security?
Using a VPN is a way to map out a private network that only your servers can see. Communication will be fully private and secure. Other applications can be configured to pass their traffic over the virtual interface that the VPN software exposes. This way, only services that are meant to be used by clients on the public internet need to be exposed on the public network.
Hoe VPN’s implementeren
Om private netwerken te gebruiken, moet u meestal beslissen over uw netwerkinterface bij de eerste implementatie van uw servers, en uw toepassingen en firewall moeten configureren om deze interfaces te voorkeuren. In vergelijking hiermee vereisen VPN-implementaties het installeren van extra tools en het maken van extra netwerkroutes, maar kunnen meestal bovenop de bestaande architectuur worden geïmplementeerd. Elke server op een VPN moet de gedeelde beveiligings- en configuratiedata hebben die nodig zijn om een VPN-verbinding op te zetten. Naast deze VPN moeten de toepassingen worden geconfigureerd om gebruik te maken van de VPN-tunnel.
Als u Ubuntu of CentOS gebruikt, kunt u volgen met het handleiding Hoe een OpenVPN-server op Ubuntu 20.04 in te stellen en te configureren.
Wireguard is een andere populair VPN-implementatie. VPN’s volgen meestal hetzelfde principe van beperking van inkomende verbindingen tot uw cloud-servers door middel van het implementeren van een reeks private netwerkinterface achter een paar toegangspunten, maar terwijl VPC-configuraties meestal een kerninfrastructuuronderwerp zijn, kunnen VPN’s op een meer ad-hoc basis worden geïmplementeerd.
Service Auditing
Goede beveiliging houdt in dat je je systemen analyseert, de beschikbare aanvalsoppervlakken begrijpt en de componenten zo goed mogelijk afsluitt.
Service auditing is een manier om te weten wat voor diensten op een gegeven systeem draaien, welke poorten ze gebruiken voor communicatie en welke protocollen deze diensten spreken. Deze informatie kan je helpen bij het configureren welke diensten publiekelijk toegankelijk moeten zijn, firewallinstellingen, monitoring en waarschuwingen.
Elke draaiende dienst, of het nu bedoeld is voor intern of publiek gebruik, vertegenwoordigt een uitgebreid aanvalsoppervlak voor kwaadwillenden. Hoe meer diensten je draait, des te groter de kans dat een kwetsbaarheid je software beïnvloedt.
Zodra je een goed beeld hebt van welke netwerkdiensten op je machine draaien, kun je beginnen met het analyseren van deze diensten. Wanneer je een service audit uitvoert, stel jezelf de volgende vragen over elke draaiende dienst:
- Moet deze dienst draaien?
- Draait de dienst op netwerkinterfaces waar hij niet zou moeten draaien?
- Als je een dienst aanbindt aan een publieke of privé netwerkinterface?
- Zijn mijn firewall-regels geconfigureerd om legale trafik te laten passeren naar deze dienst?
- Zijn mijn firewall-regels blokkeringen die trafik zijn die niet legitiem zijn?
- Heb ik een methode voor het ontvangen van beveiligingsalerts over vulnerabiliteiten voor elk van deze diensten?
Dit soort dienstanalyse zou normaal gesproken worden bij het configureren van elke nieuwe server in uw infrastructuur. Dienstanalyse elke paar maanden helpt ook om onbedoelde wijzigingen in de configuraties van diensten te detecteren.
Hoe implementeer je dienstanalyse?
Om audit te doen op netwerkdiensten die op uw systeem draaien, gebruik de ss
commando om alle TCP en UDP poorten te lijsten die in gebruik zijn op een server. Een voorbeeld commando dat de programnaam, PID en adressen weergeeft voor het luisteren voor TCP en UDP trafik is:
De opties p
, l
, u
, n
, en t
werken als volgt:
p
laat zien welke proces een gegeven socket gebruikt.l
laat alleen sockets zien die actief zijn voor connecties aan te binden.u
incluiert UDP-sockets (in additie tot TCP-sockets).n
geeft numerische trafikwaarden weer.- Het script
t
bevat sockets voor TCP en UDP.
U krijgt uitvoer gelijk aan deze:
OutputNetid State Recv-Q Send-Q Local Address:Port Peer Address:Port Process
tcp LISTEN 0 128 0.0.0.0:22 0.0.0.0:* users:(("sshd",pid=812,fd=3))
tcp LISTEN 0 511 0.0.0.0:80 0.0.0.0:* users:(("nginx",pid=69226,fd=6),("nginx",pid=69225,fd=6))
tcp LISTEN 0 128 [::]:22 [::]:* users:(("sshd",pid=812,fd=4))
tcp LISTEN 0 511 [::]:80 [::]:* users:(("nginx",pid=69226,fd=7),("nginx",pid=69225,fd=7))
De kolommen die je moet inspekteren zijn Netid, Local Address:Port en Procesnaam. Als de locale adres:poort 0.0.0.0
is, dan accepteert de dienst connecties op alle IPv4 netwerkadressen. Als het adres [:]
is, dan accepteert de dienst connecties op alle IPv6 netwerken. In de uitvoer bovenstaande SSH en Nginx zijn beide ingesteld om te luisteren op alle publieke interfaces, op beide IPv4 en IPv6 netwerkstacks.
Je kunt besluiten of je SSH en Nginx wilt laten luisteren op beide interfaces, of alleen op een of de andere. Generelijk gesproken, zouden je services moeten blokkeren die op niet gebruikte interfaces draaien.
Ondersteunde updates
Het onderhoud van je servers met patches is noodzakelijk om een goede basisveiligheid te garanderen. Serveren die oud en insecuur zijn worden verantwoordelijk voor de meeste veiligheidsincidenten, maar regelmatige updates kunnen risico’s mitigeren en voorkomen dat aanvallers een voetje in de deur hebben op je serveren. Ondersteunde updates leiden tot dat de systeem bijna alle pakketten automatisch updaten.
Hoe verbeteren onbezorgde updates de veiligheid?
Onbezorgd updaten, d.w.a. automatische, verlagen de inzet en brengen de tijd totdat je updates uitvoert naar een minimum. Als er een kwetsbaarheid is die aan impact heeft op de software op je servers, zullen je servers dan vrijwel zeker totdat je de updates uitvoerd. Dagelijkse onbezorgde updates zorgen ervoor dat je geen pakketten over slaat en dat bekende bugs met de beschikbare patches worden gepatched zodra ze beschikbaar zijn.
Hoe implementeer je onbezorgde updates?
Je kunt refereren naar Hoe je Ubuntu-servers bijhoudt voor een overzicht van het implementeren van onbezorgde updates op Ubuntu.
Publieke sleutelinfrastructuur en SSL/TLS-encryptie
Publieke sleutelinfrastructuur, of PKI, refereert aan een systeem dat is ontwikkeld om certificaten te generen, te beheren en te valideren voor het identificeren van individuen en de cipheren van communicatie. SSL of TLS-certificaten kunnen worden gebruikt om verschillende entiteiten aan elkaar te authenticeren en ook om geencryptede communicatie te instellen. Na authenticatie kan er ook gebruik worden gemaakt van geencrypted communicatie.
Hoe Bepaalt PKI de Veiligheid?
Een certificaatautoriteit (CA) en het beheren van certificaten voor uw serveren biedt elk entiteit binnen uw infrastructuur de mogelijkheid om de identiteiten van andere leden te valideren en hun trafiek te cipheren. Dit kan voorkomen dat er man-in-the-middle-attacks zijn waarbij een aanvaller tussen twee servers in uw infrastructuur imiteert om trafiek te intercepteren.
Elke server kan worden geconfigureerd om een centrale certificaatautoriteit te trusten. Na deze configuratie worden alle certificaten ondertekend door deze autoriteit impliciet geliefd.
Hoe Implementeer je PKI
Inrichten van een certificaatautoriteit en het instellen van de overige publieke systeeminfrastructuur kan veel initiale werk en toevoeging aan de beheerlast van certificaten brengen. Bovendien kunnen beheer van certificaten aanvullende administratieve lasten opleveren wanneer nieuwe certificaten moeten worden gemaakt, ondertekend of ingetrokken.
Voor veel gebruikers is het implementeren van een volledig publieke sleutelinfrastructuur alleen maar zinvol als hun infrastructuurbehoeften groot genoeg zijn om de extra administratieve kosten van PKI te rechtvaardigen. Een communicatie tussen componenten beschermen met een VPN kan vaak een betere tussentijdse maatregel zijn totdat je bij een punt arriveert waar PKI de extra administratieve kosten waard is.
Als je een eigen certificaatautoriteit wilt maken, kun je naar de Hoe Toekomstige en configureren van een certificaatautoriteit (CA) richtlijnen verwijzen die afhangen van de Linux-distributie die je gebruikt.
Conclusie
De strategieën uit deze handleiding zijn een overzicht van sommige van de stappen die je kunt nemen om de veiligheid van uw systemen te verbeteren. Het is belangrijk te beseffen dat beveiligingsmaatregelen minder effectief worden als je langer wacht om ze te implementeren. Veiligheid mag niet een na-denkking zijn en moet worden geïntegreerd wanneer je je infrastructuur voorbereid hebt. Zodra je een basis heb geschapen voor een veilige omgeving, kunt je daarop beginnen met de deploy van diensten en applicaties met een aantal zorgen dat ze standaard in een veilige omgeving draaien.
Zelfs met een veilige startomgeving moet je er altijd rekening mee houden dat veiligheid een continu en iteratief proces is. Altijd veronderstel dat de veiligheidsimplicaties van elke wijziging mogen zijn, en welke stappen je kan ondernemen om zeker te zijn dat je altijd veilige standaardconfiguraties en omgevingen biedt voor uw software.
Source:
https://www.digitalocean.com/community/tutorials/7-security-measures-to-protect-your-servers