Artikel top billede

(Foto: Computerworld)

Beskyt dig selv med en Raspberry Pi-baseret firewall

Se hvordan du nemt laver din egen Raspberry Pi-baserede firewall og beskytter dig.

Af Torben Okholm, Alt om Data

Denne artikel er oprindeligt bragt på Alt om Data. Computerworld overtog i november 2022 Alt om Data. Du kan læse mere om overtagelsen her.

Du husker det sikkert fra nyhederne. I december 2016 kom det frem, at den berygtede Mirai-orm havde inficeret et anseligt antal routere, der blev brugt af kunder hos UK ISP TalkTalk, og havde stjålet deres Wi-Fi-kodeord.

Ormen udnyttede de standardkodeord, der er knyttet til en række maskiner, og til trods for, at fokus lå på at tvinge enhederne til at deltage i DOS-angreb (Denial of Service), var konsekvenserne frygtindgydende. Selv de ganske få brugere, der gør sig den ulejlighed at ændre deres routers standardkodeord, bruger kun sjældent firewalls.

Det betyder, at routerens indstillinger og teoretisk set enheder på det trådløse hjemmenet kunne være jaget vildt. Heldigvis redder Raspberry Pi os igen, og vi skal nok vise dig hvordan.

1 Formålet med øvelsen

Man kan stort set dele dette projekt op i to dele. Den første består i at arrangere en Raspberry Pi [Billede A] som et trådløst AP (access point).

Din Pi opretter med andre ord et trådløst net, som du kan få forbindelse til. Derefter kan Pi få forbindelse til din router, således at enhver, der er knyttet til dens trådløse net, kan få adgang til internettet.

Den anden del af dette projekt omfatter installation af en brugervenlig firewall på din Raspberry Pi, der kan blokere de åbne porte, som angribere kan udnytte.

Man kan også konfigurere firewallen til at give adgang til legitime programmer, og den kan blokere websites, som du finder usikre. Hvis du har udstyret i orden, kan du få dit eget sikre AP op at køre på mindre end 20 minutter.

Billede A

2 Det rent og skært nødvendige

Den trådløse enhed, du bruger, skal være kompatibel med Hostapd (det vender vi tilbage til). Dette projekt er teknisk kompatibelt med alle udgaver af Pi, men din Pi skal være på det trådløse net, og den skal have en ethernet-port, der kan kobles til din router.

Raspberry Pi 3 er meget velegnet til dette formål. Hvis det overhovedet er muligt, bør konfigurationen foregå med et tastatur og en skærm, snarere end med SSH. Så snart Pi har oprettet sit eget AP, kan du ikke få trådløs forbindelse til den. Du kan derimod få forbindelse via routerens trådløse net, hvis du kender ip-adressen.

Hvis du foretrækker den kompakte Pi Zero [Billede B], skal du sikre dig, at du har et USB OTG-kabel eller en USB-til-micro-USB OTG-adapter (kan fås hos alle leverandører af Pi-udstyr – hos Adafruit koster den kun 3 dollar, www.adafruit.com/product/2910).

Du skal også bruge en RJ45-til-USB-konverter til at få adgang til USB-porten. Så kan du slutte din Pi Zero til din router. Bortset fra selve Raspberry Pi skal du også bruge en sekundær enhed til at tjekke, om det trådløse AP fungerer rigtigt, og et netværkskabel til at forbinde din Pi med routeren. De fleste moderne routere har mindst én USB-port, og du burde kunne trække strøm til din Pi herfra.

Af sikkerhedsmæssige grunde og for at spare på ressourcerne er det bedst at have en dedikeret Raspberry Pi til din hjemmefirewall i stedet for en, som du også bruger til andre formål. Hvis det er muligt, skal du slutte din Pi til en skærm og arbejde direkte fra Terminal, når du gennemgår dette projekt, i stedet for at få forbindelse via SSH. Det reducerer risikoen for, at din forbindelse ryger på et kritisk tidspunkt.

Det er altid bedst at begynde med en ren installation af Raspbian på din Pi. Når installationen er færdig, åbner du Terminal og kører de følgende kommandoer for at være sikker på, at dit system er helt up to date:

sudo apt-get update

sudo apt-get upgrade

 Hvis du ikke har adgang til en skærm, kan du få trådløs forbindelse til din Pi gennem din routers Wi-Fi-net Wi via SSH. Slut først din Pi til routeren via et ethernetkabel. Hvis du har en mobil enhed, kan den nyttige app Fing nemt identificere ip-adresser for alle enhederne op dit lokalnet. Man kan gratis downloade Fing fra både iOS App Store og Google Play.

 Når du er tilfreds med den måde, dit AP virker på, skal du huske at fravælge den trådløse funktion på routeren, således at du forhindrer folk i at opnå forbindelse til den og dermed gå udenom din Raspberry Pi firewall.

Billede B

3 Flere indstillinger

Dit access point bliver arrangeret og styret af programmet Hostapd. Tredje trin i vores gennemgang omfatter oprettelsen af en konfigurationsfil, hvori du angiver indstilllingerne for din Pis nye trådløse net såsom navn, kodeord og den valgte krypteringstype. Filens navn er hostapd.conf, og du kan altid vende tilbage til den, hvis du ønsker at ændre indstillingerne.

Alle trådløse kort kan bruges til at få forbindelse til et Wi-fi-net, men det er ikke alle Wi-Fi-kort, der kan generere deres egne trådløse net. Heldigvis understøtter det Wi-Fi-modul, der er indbygget i Raspberry Pi denne funktion, og det er en god grund til at overveje den til en firewall.

Vi vil også installere det meget raffinerede program Dnsmasq, der skal håndtere nettets infrastruktur. Det henter sine indstillinger fra en lille konfigurationsfil, som du opretter i fjerde trin.

Med de foreslåede indstillinger bruger Dnsmasq Google til sin DNS-server (8.8.8.8), men det kan du ændre til en anden DNS-udbyder, hvis du ønsker det. For eksempel OpenDNS (208.67.222.222). Den bedste ydelse får du ved at opregne mere end én DNS-server. Det gør du ved simpelthen at tilføje en ny linje i dnsmasq.conf-filen. For eksempel:

server=208.67.222.222

server=208.67.222.220

Domæneafvisning

Navnet Uncomplicated Firewall lyder måske beskedent, men Ufw er en stærk firewall, og man bruge den til at blokere for adgang til bestemte websites. Det kan man også gøre med Dnsmasq, men det vil være en form for “DNS-hijacking,” og det er en ret tarvelig procedure, som ofte bliver udført af scammere.

Fordelen ved at bruge Ufw er, at den blokerer domæner efter ip-adresser. Det betyder, at man skal skrive én regel pr. adresse i stedet for at skulle huske de forskellige domæner og underdomæner, der bliver brugt af sitene.

Forestil dig at prøve at blokere hver eneste variant af Facebook.com, for eksempel: fb.com, m.facebook.com og så videre. Det giver sig selv, at når man skal blokere websites efter ip-adresser, skal man have de oplysninger. Åbn Terminal på din Pi, eller få forbindelse via SSH, og brug kommandoen host til at se en tvivlsom side ip-adresse.

For eksempel: host strawberryfunk.com Det outputter det pågældende sites ip-adresse. Brug dernæst ufw deny til at blokere dette domæne. For eksempel: sudo ufw deny out from any to 205.178.189.29 Du kan tjekke, at domænet er blevet effektivt blokeret, ved hjælp af ping.

For eksempel: ping -c 1 strawberryfunk.com Hvis du har konfigureret Ufw korrekt, meddeler ping, at domænet er utilgængeligt. Ufw kan også blokere udgående forbindelser til bestemte porte.

Hvis du for eksempel ønsker at reducere sandsynligheden for, at din Pi bliver brugt til at sende spammeddelelser, kan du frakoble Port 25 med denne kommando: sudo ufw deny out 25

4 Ukompliceret firewall

Med Ufw (Uncomplicated Firewall) følger et antal Linux-distroer. Og den lever op til sit navn, for den er meget enkel at bruge. Det er slet ikke det eneste firewallprogram, der findes – der er faktisk komplette distributioner af Linux rundtomkring såsom IPFire, der er specifikt beregnet til at fungere som gateway mellem computeren og internettet – med farverige skærmbilleder. Hvorfor så bruge denne ret anonyme kommandlinje-applikation?

Fordi den – bortset fra at den forlængst har trådt sine barnesko – er meget nem at installere og konfigurere. Når den er slået til, starter den automatisk. Den blokerer som standard alle indgående forbindelser og muliggør alle de udgående.

Det kan være irriterende, hvis du og andre brugere på dit net vil bruge visse applikationer såsom BitTorrent eller Skype, men det er nemt at konfigurere undtagelser til disse regler. Ufw har også en grafisk ledsager til dem, der ikke har det helt godt med kommandolinjen. Se boksen “Konfigurer din firewall”.

Ufw kan også blokere forbindelser til specifikke ip-adresser, således at du kan forhindre netbrugere i at besøge bestemte websider. Se boksen “Domæneafvisning”.

 Man kan bruge Ufw til at blokere individuelle websider, men websider kan vise bannerreklamer og pop-op-meddelelser. Den nemmeste måde at håndtere disse irritationsmomenter på består i at installere browser-extensions såsom Ublock Origin og Ghostery, der kan stoppe reklamer og cookies. Mobile brugere kan også have glæde af den officielle Adblock Browser.

Hvis det ikke kan lade sig gøre, kan du fjerne Raspberry Pis standard-DHCP-server (Dynamic Host Configuration Protocol) og konfigurere Dnsmasq i stedet til automatisk at omdirigere kendte reklamerservere til en intern ip-adresse. Den opretter ved standard-indstillingerne grimme tomme felter midt på dine websider, men det kan man komme udenom ved også at installere den fikse app Pixelserv.

Pixelservs eneste formål er at understøtte reklameblokering ved at levere et gennemsigtigt GIF-billede på 1 x 1 pixel i stedet for reklamer. Det gør din reklameblokering til en meget pænere oplevelse.

Hvis du er interesseret i at tilføje reklameblokering til din Raspberry Pi, kan du finde en guide på Adafruits website: https://learn.adafruit.com/raspberry-pi-as-an-ad-blocking-access-point.

Opret din firewall med Ufw

1. Installer det nødvendige

Slut din Raspberry Pi til ethernetporten på din router, og skab forbindelse via SSH, eller – ideelt set – åbn Terminal på din Pi. Installer de nødvendige programmer ved at køre: sudo apt-get install dnsmasq hostapd Kør dernæst det følgende for at åbne konfigurationsfilen: sudo nano /etc/dhcpcd.conf Tilføj så disse linjer allernederst i filen: interface wlan0 static ip_address=172.24.1.1/24 Tryk Ctrl-X, Y og derefter Return for at gemme filen og gå ud.

2. Opret statisk IP

Åbn din netinterfaces-konfiguration med: sudo nano /etc/network/interfaces Find linjen “iface wlan0 inet static”, og lav den om til: iface wlan0 inet manual Tryk Return for at starte en ny linje, og skriv derefter dette: address 172.24.1.1 netmask 255.255.255.0 network 172.24.1.0 broadcast 172.24.1.255 Placer et # ved begyndelse af den linje, der begynder med “wpa-conf.” Gem og gå ud ligesom før.

3. Opret Access Point

Åbn hostapd.conf-filen med: sudo nano /etc/hostapd/hostapd.conf Skriv følgende: interface=wlan0 driver=nl80211 ssid=piVPN hw_mode=g channel=1 macaddr_acl=0 auth_algs=1 ignore_broadcast_ssid=0 wpa=2 wpa_key_mgmt=WPA-PSK wpa_passphrase=raspberry231 wpa_pairwise=TKIP rsn_pairwise=CCMP Udskift SSID, kodefrase og netkryptering, som du ønsker. Næste trin: sudo nano /etc/default/hostapd Find den linje, der begynder med “#DAEMON_CONF=“”.” Fjern tegnet # ved begyndelsen af linjen, og skriv i stedet: DAEMON_CONF=”/etc/hostapd/ hostapd.conf”

4. Konfigurer dnsmasq

Flyt den gamle Dnsmasq-konfigurationsfil med: sudo mv /etc/dnsmasq.conf /etc/ dnsmasq.conf.orig Opret så en ny ved at køre: sudo nano /etc/dnsmasq.conf Skriv den følgende tekst: interface=wlan0 listen-address=172.24.1.1 bind-interfaces things elsewhere server=8.8.8.8 domain-needed bogus-priv dhcp-range=172.24.1.50,172.24.1.150,​ 12h Gem og gå ud. Kør nu: sudo nano /etc/sysctl.conf Find den linje, der begynder med “net.ipv4.ip_forward=1”, og fjern tegnet # i begyndelsen. Gem, gå ud, og genstart din Pi.

5. Opret IPV4-Forwarding

Åbn Terminal på din Pi, og kør: sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE sudo iptables -A FORWARD -i th0 -o wlan0 -m state --state RELATED,ESTABLISHED -j ACCEPT sudo iptables -A FORWARD -i wlan0 -o eth0 -j ACCEPT sudo sh -c “iptables-save > /etc/ iptables.ipv4.nat” Kør så: sudo nano /etc/rc.local Skriv de følgende to linjer lige over den linje, der hedder “exit 0:” iptables-restore < /etc/iptables.ipv4.nat /usr/sbin/hostapd /etc/hostapd/ hostapd.conf

6. Opret Firewallen

Kør disse kommandoer en efter en: sudo update-rc.d hostapd enable sudo update-rc.d dnsmasq enable Genstart din Pi, og åbn igen Terminal. Du installerer og aktiverer din firewall ved at køre følgende: sudo apt-get install ufw gufw sudo ufw enable Du ønsker måske at konfigurere firewallen på dette stadie – se boksen “Konfigurering af din firewall”.

5 Brobygning

Dette projekt fokuserer på at slå bro over forbindelsen mellem din Pis trådløse interface og ethernetinterfacet. På den måde kan dit access point forblive forbundet med internettet. Hvis du vil dobbelttjekke navnene på dine interface, kan du til enhver tid køre kommandoen ifconfig. Standardindstillingen er, at navnene på disse interfaces er henholdsvis “wlan0” og “eth0”.

Hvis du ikke kan slutte din Pi til en router, kan du teoretisk tilføje endnu et trådløst interface såsom det officielle Raspberry Pi-Wi-Fi-modul og bruge det til at få adgang til din routers trådløse net. Det er imidlertid mindre sikkert, og det reducerer forbindelsens hastighed. Hvis din router står et sværttilgængeligt sted (eller er udenfor rækkevidde), kan du overveje at bruge en “homeplug”-enhed, der bruger hjemmets eller kontorets strømforbindelser til netforbindelser.

Fortvivl ikke, hvis dit access point eller din firewall ikke fungerer, første gang du gennemgår disse trin. Heldigvis er Pis netindstillinger meget fleksible, og du kan derfor som regel gå tilbage og gennemgå trinnene igen uden at skulle geninstallere Raspbian.

Hvis du bruger en Wi-fi-driver ved siden af den, der er indbygget i Pi 3 eller den officielle Raspberry Pi-Wi-Fi-adapter, kan du blive nødt til at ændre værdien “driver=” i hostapd.conf. Du kan finde oplysninger på http://linuxwireless.org/en/users/Documentation/hostapd.

Du kan frakoble Ufw-firewallen permanent og slette alle regler med denne kommando:
sudo ufw reset

Hvis det er nødvendigt, kan du også gendanne de indstillinger, du tidligere har gemt med Dnsmasq, ved at gå tilbage til den oprindelige kommando:

sudo mv /etc/dnsmasq.conf.orig /etc/dnsmasq.conf

Hvis du vælger at blokere specifikke porte eller tjenester (se boksen “Domæneafvisning”), skal du huske, at it-kyndige brugere på dit net kan omgå det via et vpn. Du kan naturligvis bruge Ufw til at blokere porte, der hyppigt bliver brugt af vpn’er såsom 1154, eller du kan blokere al udgående trafik og kun acceptere den til specielle applikationer og tjenester.

Nogle applikationer randomiserer de porte, der bliver brugt, for eksempel BitTorrent. Du kan overveje at fravælge UDP (User Datagram Protocol), hvis du vil forhindre streaming af de fleste musik- og videosites.

Hvis du vælger at bruge en browserextension eller Pixelserv til at blokere reklamer, kan nogle sites virke ukorrekt eller slet ikke. Man kan som regel frakoble extensions til reklameblokering midlertidigt ved at klikke på deres ikon i browserens menubjælke.

Af sikkerhedshensyn er det klogt at bruge en dedikeret Pi udelukkende som et access point og undgå at lægge personlige data på den. Det er også en god ide at bruge et langt, robust kodeord. Det, der figurerer i guiden, er blot et eksempel.

De ekstra forsigtige kan overveje at oprette et skjult Wi-Fi-net til deres Pi [Billede C]. Rediger Hostapd-konfigurationen ved at åbne Terminal og skrive:

/etc/hostapd/hostapd.conf

Udskift “ignore_broadcast_ssid=0” med “ignore_broadcast_ssid=1.” Fra nu af skal alle enheder angive navnet på nettet plus kodeordet for at få forbindelse. Overvej at bruge et nyt navn, når du redigerer filen, så er du ekstra sikker.

Billede C

Hvis du har enheder, der bruger en kabelforbindelse, for eksempel en hjemmeserver, kan du fortsætte med at forbinde disse enheder direkte til din router med henblik på internetforbindelse, men du skal huske, at de ikke vil være synlige på din Pis trådløse net. Det virker imidlertid begge veje – din Pi vil overhovedet ikke påvirke deres funktioner.

Endelig skal du være opmærksom på, at din router måske også bruger en firewall. Hvis du er tryg ved at konfigurere din router, kan du vælge at åbne og lukke porte i overensstemmelse med Ufw’s indstillinger. Du kan også frakoble routerens firewall helt og lade Pi styre det hele.

Konfigurering af din Firewall

Når Ufw er aktiveret, starter den automatisk ved start og blokerer alle indgående forbindelser, mens den tillader de udgående. Det er måske ikke den ideelle opsætning for dig, navnlig hvis du kan lide at få forbindelse til din Pi via SSH eller VNC.

Du konfigurerer Ufw med Terminal på din Pi. Ufw genkender de fleste tjenester, der ligner SSH, og i de fleste tilfælde kan man tilkoble adgang med ufw allow . For eksempel: sudo ufw allow ssh Hvis du vil have en komplet liste over de tjenester, du kan tilkoble på denne måde, kører du denne kommando: nano /etc/services Hvis din tjeneste ikke står på listen, kan du simpelthen åbne den port, den bruger.

Et eksempel er RealVNC, som man kan bruge til at få fjernforbindelse til Pis desktop. Den kører på Port 5800. Lad Ufw åbne den med: sudo ufw allow 5800 Du tilkobler forbindelse kun fra én specifik ip-adresse med from.

For eksempel: sudo ufw allow from 192.168.1.12 Du kan få en komplet liste over firewallindstillinger i Ubuntu med det følgende: sudo ufw status verbose For at gøre det lettere for dig, har Ufw en grafisk makker, Gufw.

Du kan åbne den med: sudo gufw Der er også en praktisk kontakt og en liste over åbne og blokerede porte. Klik på “+”-knappen for at tilføje yderligere regler. Klik “Show extended actions” for at se forud konfigurerede indstillinger for visse populære applikationer såsom Skype.