Att ha en fungerande brandvägg på servern är ett viktigt steg i säkerhetsarbetet. I den här guiden kommer vi att skapa en grundläggande brandvägg som du sedan kan bygga vidare på med egna regler. Guiden utgår från en nyinstallerad Cloud VPS med Ubuntu 22.04. Om du vill sätta upp en brandvägg i Debian 11 har vi en guide för det här: Sätt upp en brandvägg i Debian 11 med nftables
UFW står för Uncomplicated Firewall och är ett verktyg för att förenkla administreringen av den inbyggda brandväggen i Linux. Den medföljer Ubuntu som standard, men är avstängd.
Vi börjar med att verifiera att brandväggen är avstängd. Det gör vi med kommandot:
sudo ufw status
UFW bör nu svara med Status: inactive
.
Nu kan vi börja lägga in de regler vi behöver. För att inte riskera att låsa oss själva ute börjar vi med att tillåta SSH:
sudo ufw allow ssh
Vi bör nu få följande som svar:
Rules updated
Rules updated (v6)
Nu kan vi lägga till övriga portar som vi vill öppna, exempelvis HTTP och HTTPS. Det gör vi med:
sudo ufw allow http
sudo ufw allow https
Istället för att ange en tjänst, som exempelvis http
eller https
, går det även att ange ett portnummer. Syntax är då istället ufw allow 80/tcp
för att tillåta HTTP.
Vi vill också tillåta traceroute
. Vi tillåter därför UDP-portarna 33434 till 33524. Detta gör vi med kommandot:
sudo ufw allow 33434:33524/udp
Nu är det dags att sätta upp en standardpolicy för utgående och inkommande trafik. Som standard ska brandväggen vara konfigurerad att tillåta utgående trafik, men att neka inkommande. För att verkligen säkerställa att så är fallet kommer vi ändå att sätta dessa regler med följande kommando:
sudo ufw default allow outgoing
sudo ufw default deny incoming
Nu när vi har de viktigaste reglerna på plats kan vi aktivera brandväggen. Det gör vi med kommandot:
sudo ufw enable
Vi får nu en varning om att brandväggen kan avbryta pågående SSH-anslutning. Men eftersom vi redan tillåtit SSH svarar vi y
på frågan. Vi får därefter en bekräftelse på att den har aktiverats:
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
Nu har vi en fullt fungerande brandvägg som blockerar all inkommande trafik förutom SSH, HTTP, HTTPS och traceroute
. ICMP (ping
) tillåts redan innan UFW laddar in sina regler. Vi kontrollerar statusen på brandväggen igen:
sudo ufw status
Denna gången visas även de portar som tillåts:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
33434:33524/udp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
33434:33524/udp (v6) ALLOW Anywhere (v6)
Lägg märke till att UFW har lagt till regler för både IPv4 och IPv6 som standard.
Att lägga till nya regler är inte svårare än att köra ufw allow
-kommandot igen med den tjänst eller port man vill tillåta. För att exempelvis tillåta TCP-port 8080 kör vi:
sudo ufw allow 8080/tcp
Listar vi statusen igen med sudo ufw status
syns den nya porten:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
8080/tcp ALLOW Anywhere
33434:33524/udp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
8080/tcp (v6) ALLOW Anywhere (v6)
33434:33524/udp (v6) ALLOW Anywhere (v6)
Om vi nu vill radera TCP-port 8080 från brandväggen använder vi samma syntax som när vi lade till den, men vi lägger till delete
framför:
sudo ufw delete allow 8080/tcp
En ny listning med sudo ufw status
visar att porten har tagits bort från både IPv4 och IPv6:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
33434:33524/udp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
33434:33524/udp (v6) ALLOW Anywhere (v6)
För att kunna redigera listan med större noggrannhet kan vi använda oss av en numrerad lista. Vi kan då radera en specifik regel, eller skjuta in nya regler på en specifik plats i listan. Vi börjar med att lägga till TCP-port 8080 igen, så att vi har något att labba med:
sudo ufw allow 8080/tcp
Nu listar vi statusen igen, men den här gången med en numrerad lista. Kör följande kommando:
sudo ufw status numbered
Det ger oss följande lista:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443 ALLOW IN Anywhere
[ 4] 33434:33524/udp ALLOW IN Anywhere
[ 5] 8080/tcp ALLOW IN Anywhere
[ 6] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 7] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 8] 443 (v6) ALLOW IN Anywhere (v6)
[ 9] 33434:33524/udp (v6) ALLOW IN Anywhere (v6)
[10] 8080/tcp (v6) ALLOW IN Anywhere (v6)
Nu kan vi exempelvis radera TCP-port 8080 för IPv4, men inte för IPv6. Vi väljer då att endast radera regel nummer fem:
sudo ufw delete 5
Här får vi också en fråga ifall det är rätt regel som vi vill radera. Det är det, så vi svarar y
på frågan:
Deleting:
allow 8080/tcp
Proceed with operation (y|n)? y
Rule deleted
På samma sätt kan vi skjuta in nya regler i listan. Låt oss anta att vi vill skjuta in TCP-port 8080 igen, men denna gången på tredje platsen i listan. Det kan vi göra med kommandot:
sudo ufw insert 3 allow 8080/tcp
En ny listning med sudo ufw status numbered
visar att det lyckades:
Status: active
To Action From
-- ------ ----
[ 1] 22/tcp ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 8080/tcp ALLOW IN Anywhere
[ 4] 443 ALLOW IN Anywhere
[ 5] 33434:33524/udp ALLOW IN Anywhere
[ 6] 22/tcp (v6) ALLOW IN Anywhere (v6)
[ 7] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 8] 443 (v6) ALLOW IN Anywhere (v6)
[ 9] 33434:33524/udp (v6) ALLOW IN Anywhere (v6)
[10] 8080/tcp (v6) ALLOW IN Anywhere (v6)
Nu kan vi radera de båda reglerna för TCP-port 8080 då vi bara använde dem för att laborera:
sudo ufw delete allow 8080/tcp
Får att få en ännu säkrare server kan vi välja att blockera all utgående trafik som standard, och istället endast tillåta de portar som behövs.
Vi behöver först tillåta trafiken på de nödvändiga portarna innan vi ändrar policyn till att blockera all utgående trafik. Det vi behöver tillåta är HTTP och HTTPS, DNS-uppslag, NTP-förfrågningar (för tidssynkronisering), samt traceroute
. Vi behöver även tillåta DHCPv6 så att servern kan få en IPv6-adress. Det gör vi med kommandona:
sudo ufw allow out http
sudo ufw allow out https
sudo ufw allow out domain
sudo ufw allow out ntp
sudo ufw allow out 33434:33524/udp
sudo ufw allow out proto udp to ::/0 port 546:547
Det sista kommandot ovan tillåter utgående IPv6-anslutningar till UDP-port 546 och 547 som är till för DHCPv6. För att begränsa regeln till endast IPv6 var vi tvungna att ange "hela" kommandot med proto udp to ::/0 port 546:547
. Den speciella adressen ::/0
betyder alla IPv6-adresser. För DHCP över IPv4 finns redan en fungerande regel i Ubuntu som laddas in innan UFW-reglerna laddas.
Innan vi går vidare med att ändra policyn bekräftar vi att ändringarna ser rätt ut genom att göra en ny listning med sudo ufw status
:
Status: active
To Action From
-- ------ ----
22/tcp ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
33434:33524/udp ALLOW Anywhere
22/tcp (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
33434:33524/udp (v6) ALLOW Anywhere (v6)
80/tcp ALLOW OUT Anywhere
443 ALLOW OUT Anywhere
53 ALLOW OUT Anywhere
123/udp ALLOW OUT Anywhere
33434:33524/udp ALLOW OUT Anywhere
80/tcp (v6) ALLOW OUT Anywhere (v6)
443 (v6) ALLOW OUT Anywhere (v6)
53 (v6) ALLOW OUT Anywhere (v6)
123/udp (v6) ALLOW OUT Anywhere (v6)
33434:33524/udp (v6) ALLOW OUT Anywhere (v6)
546:547/udp (v6) ALLOW OUT Anywhere (v6)
Allt ser bra ut. De portar vi tillåter utgående trafik på är markerade med ALLOW OUT
i listan ovan. Nu ändrar vi policyn i brandväggen till att neka all utgående trafik som inte explicit har tillåtits i reglerna. Kör kommandot:
sudo ufw default deny outgoing
Brandväggen kommer svara med:
Default outgoing policy changed to 'deny'
(be sure to update your rules accordingly)
Vi har nu en bra grundläggande brandvägg som bara släpper igenom den trafik vi själva tillåter. Tänk dock på att du kan behöva anpassa reglerna efter de tjänster och program som just du kör på din server.
Var försiktig när du laddar in nya brandväggsregler så att du inte låser dig ute från SSH-tjänsten (TCP-port 22). Skulle du trots allt råka låsa dig ute kan du logga in via konsolen i GleSYS Cloud. Du hittar den under Infrastruktur → Servrar. Klick på Funktioner bredvid namnet på din server och välj Konsol. När du loggat in kan du antingen stänga av brandväggen helt med sudo ufw disable
, eller åtgärda regeln som låser dig ute.
Har du inte satt något lösenord för din användare kan du dock inte logga in som vanligt. Du kan däremot starta om servern till ett underhållsläge för att få åtkomst till den. När servern startas visas under en kort stund en GRUB-skärm. Första valet i listan är Ubuntu. Tryck på e
när Ubuntu är markerat.
Rulla sedan ner i filen med piltangenterna. I slutet av raden som börjar med linux /boot/vmlinuz
lägger du till init=/bin/bash
(efter ordet ro
). När du har gjort det startar du servern genom att trycka på Ctrl+x
.
När servern är startad måste du först montera filsystemet i skrivläge. Det gör du med kommandot mount -o remount,rw /
. Därefter kan du stänga av brandväggen med ufw disable
.
När du är klar startar du om servern genom att klicka på knappen Ctrl-Atl-Del uppe i vänster hörn i konsolfönstret. Nu kommer servern att starta som vanligt.
Kontakta oss gärna för mer information. Vi hjälper dig att komma fram till den bästa lösningen för dina behov.