Internet, og bruken av Internet, har endret seg mye siden det først så dagens lys. Behovet for høyere oppetid, bedre sikring mot angrep, og muligheten for å kunne ta unna forespørsler ved økt trafikk, er bare noe av utfordringene man nå må ta høyde for når man setter opp en tjeneste på web. En lastbalanserer i forkant av web-tjenesten kan bidra til å løse flere av disse utfordringene.
- Skal du sette opp for lastbalansering? → Se vår konfigurasjonsguide.
- Meld deg på e-postlisten sympa.uio.no/usit.uio.no/info/w3d-lb for nyheter og viktig informasjon om lastbalansering på UiO.
Ved IT-avdelingen har vi i mange år benyttet lastbalanserere i forkant av våre tjenester, og de siste årene har vi for web-tjenester primært brukt produktet HAProxy i revers-proxy-modus. Lastbalansering i seg selv gir stor fleksibilitet i hvordan man kan drifte en web-tjeneste, og fungerer som en kobling mellom Internet og web-serverne. Dette gjør det igjen mulig å plassere web-serverne på mer lukkede nettverk som gir bedre beskyttelse av trafikk til og fra Internet. I tillegg til dette har vi gradvis lagt til mer grunnsikring, som filtrerer bort ulike typer uønsket trafikk før det når frem til tjenesten. Dette omfatter både forespørsler som antas å være angrepsforsøk, trafikk fra IP-adresser som har blitt rapportert for uønsket aktivitet m.m.
Det kan høres komplisert ut å sette opp en liten web-tjeneste bak en lastbalanserer, men i realiteten er det som regel kun små endringer som må til for å oppnå dette. Vi har laget en konfigurasjonsguide for de mest vanlige web-tjenerne vi har kjennskap med. Lastbalansererne våre er også satt opp i "makker"-par, slik at dersom en lastbalanserer blir utilgjengelig, enten pga. vedlikehold eller uforutsette problemer, så vil den andre i "makker"-paret ta over trafikken umiddelbart.
Figuren over viser tre web-servere, men man kan fint ha flere eller færre enn dette - også kun én. Hvis det er viktig at en klient alltid havner på samme web-server så er det også mulig å få til, selv om det er greit å ikke gjøre seg avhengig av dette dersom det kan unngås. Lastbalansererne vil hele tiden gjøre et kall mot en gitt adresse på web-serverne, ofte kalt helsesjekk. På denne måten forsikrer den seg om at hver enkelt web-server fungerer som den skal og er klar til å ta imot forespørsler. Dette kan man også bruke til å melde en web-server ut av aktiv last uten å måtte involvere www-drift, f.eks. ved planlagt vedlikehold. Standardsjekken vi pleier å sette opp er mot pathen "/check.txt", hvor svaret må inneholde strengen "all ok", men om man har behov for en annen helsesjekk enn dette så kan dette konfigureres. En god helsesjekk skal helst kunne si noe om at selve tjenesten fungerer slik den skal, og om det er flere komponenter involvert i tjenesten, f.eks. en webserver og en applikasjonsserver, bør helsesjekken gjerne besvares fra applikasjonsserveren. Den bør dog ikke være krevende å svare på, da lastbalansererne gjør forespørsler hit flere ganger i minuttet.
For innkommende trafikk, vil altså forespørsler rutes gjennom lastbalanserer som en revers proxy, istedenfor å komme direkte fra Internet. Dette gjør det mulig å plassere webservere på et mer lukket (og dermed bedre sikret) nett, som kun kan nåes internt ved UiO. Disse kaller vi gjerne kategori 3- eller 4-nett, som samsvarer med kun tilgjengelig fra hhv. UiO-nett eller UiO server-nett. Har man behov for tilgang til ressurser på Internet fra servere på slike lukkede nett, vil man benytte en proxy også for dette formålet - en forward proxy. I denne vil det åpnes opp kun for de adressene man har behov for å nå, mens alt annet er sperret ned. Med andre ord vil man benytte proxying for trafikk både til og fra server, men to forskjellige løsninger for hhv. inn og ut. Denne siden omhandler altså trafikk fra Internet til webserver (via lastbalanserer som en revers proxy), og det vil komme dokumentasjon for trafikk som trenger å gå motsatt vei (utgående proxy) som vil linkes til herfra.
En annen fordel er at lastbalansererne vil gjøre TLS-terminering av forbindelsen mellom klienten. Dette vil altså si at lastbalansererne tar seg av kryptering av all trafikk mellom klient og UiO, slik at ingen trafikk sendes ukryptert over åpent Internet, og er tilstrekkelig sikret. Dersom en klient gjør en ukryptert forespørsel mot HTTP, vil denne kun motta en videresending til samme adresse med HTTPS istedet. Ved å terminere TLS på lastbalansererne sørger vi for at alle tjenester bak lastbalansering har gyldige sertifikater som er korrekt satt opp, og benytter moderne og standardiserte TLS-parametre som følger gjeldende "best practices".
I noen tilfeller kan det være behov for å kryptere trafikken også mellom lastbalansererne og web-serverne, altså internt i UiOs nett. Hvorvidt dette er nødvendig er en vurdering som må gjøres av tjenesteeier. Dette anbefales særlig ved håndtering av sensitive data, eksempelvis røde og sorte data, eller hvis tjenesten ellers kan oppfattes å være av en sensitiv art. Når trafikk skal krypteres også "på innsiden", må webserverne også presentere gyldige sertifikat, og dette må man vedlikeholde og fornye selv. Disse sertifikatene er altså separate fra sertifikatene som brukere vil se "på utsiden". Disse håndteres som del av lastbalanseringstjenesten.
Siden lastbalansererne kan inspisere headere, sørger vi også for å ta en del grep på denne fronten. Dette inkluderer både å sørge for at moderne best practices følges, å begrense unødvendig tilgang og informasjonslekkasje, å optimalisere caching, og å gjøre en rekke sikkerhetstiltak knyttet til f.eks. cookies. Vi ønsker ikke å publisere detaljer rundt hvilke tiltak vi benytter åpent på Internet, men svarer gjerne på spørsmål på www-drift@usit.uio.no.
Våre lastbalanserere er satt opp med både IPv4 og IPv6 (såkalt "dual-stack"), og som følge av dette blir alle tjenester bak lastbalanserer tilgjengelig også over IPv6. Dette har siden 2023 vært et krav for offentlig sektor for alle eksternt publiserte tjenester, gjennom Forskrift om IT-standarder i offentlig forvaltning. Ved å plassere en webtjeneste bak lastbalanserer sørger man dermed for at den etterlever dette kravet, uavhengig av om webserveren i seg selv er satt opp med IPv6. Når webserver er satt opp med IPv6 vil trafikk fra lastbalanserer til webserver gå over IPv6, men hvis ikke vil den gå over IPv4. Selve tjenesten vil uansett være tilgjengelig for brukere over både IPv6 og IPv4 - helt uavhengig av oppsett på webserver.
Avslutningsvis er det verdt å presisere igjen at selv om vi konsekvent omtaler denne løsningen som lastbalansering, så er den like hensiktsmessig også der det ikke er behov for å balansere trafikk mellom flere webservere. Med andre ord, selv om en tjeneste kun betjenes av én enkelt webserver, vil man altså likevel få alle fordelene lastbalanseringstjenesten gir - utenom redundans og balansering av innkommende trafikk.
Har du spørsmål som ikke ble besvart av denne guiden, er du hjertelig velkommen til å ta kontakt på www-drift@usit.uio.no.