# Tips og hints
Dit eget virtuelle lab er det perfekte sted at eksperimentere og lære. Prøv nye tjenester, konfigurationer og teknologier for at udvide din viden og færdigheder. Derfor er det en vigtigt at det er en kompetence som vi opøver og vedligeholder
![[416865__Illustrate a whimsical and playful cartoon scene _xl-1024-v1-0.png]]
# OPNsense installation i Virtualbox
## Table Of Contents
- [[#Lidt baggrund|Lidt baggrund]]
- [[#Lidt baggrund#Nøglefunktioner:|Nøglefunktioner:]]
- [[#Download|Download]]
- [[#Download#Kontrol af download|Kontrol af download]]
- [[#Kontrol af download#Spørgsmål|Spørgsmål]]
- [[#Udpakning af .bzip2|Udpakning af .bzip2]]
- [[#Opsætning af VM|Opsætning af VM]]
- [[#Opsætning af VM#Network interfaces|Network interfaces]]
- [[#Opsætning af VM#Adapter 1|Adapter 1]]
- [[#Opsætning af VM#Adapter 2|Adapter 2]]
- [[#Opsætning af VM#Adapter 3|Adapter 3]]
- [[#Første boot|Første boot]]
- [[#Første boot#login oplysninger|login oplysninger]]
- [[#Afslut installation og reboot (live mode)|Afslut installation og reboot (live mode)]]
- [[#"Eject" install image fra VM|"Eject" install image fra VM]]
- [[#Boot den installerede version|Boot den installerede version]]
- [[#Klargøring og config til Eksperimenter|Klargøring og config til Eksperimenter]]
- [[#Klargøring og config til Eksperimenter#Shell på OPNsense (info Network interfaces)|Shell på OPNsense (info Network interfaces)]]
- [[#Klargøring og config til Eksperimenter#Test af forbindelse til internettet (ping)|Test af forbindelse til internettet (ping)]]
- [[#Klargøring og config til Eksperimenter#Konfiguration af OPNsense via Web-interface|Konfiguration af OPNsense via Web-interface]]
- [[#Klargøring og config til Eksperimenter#Assign OPT1 interface|Assign OPT1 interface]]
- [[#Snapshot (production)|Snapshot (production)]]
___
## Lidt baggrund
**OPNsense** er en open-source firewall-distribution, der bygger på [[FreeBSD]] - operativsystemet. Designet til at fungere som en omfattende netværks- og sikkerhedsløsning, tilbyder OPNsense en bred vifte af funktioner, der gør det velegnet til både hjemmebrug og erhvervslivet.
### Nøglefunktioner:
- **Firewall og Routing:** OPNsense giver kraftfuld firewall-funktionalitet og avanceret routing, hvilket gør det muligt at kontrollere trafikken på netværket og sikre en pålidelig dataoverførsel.
- **VPN-Understøttelse:** Indbygget VPN-understøttelse giver brugerne mulighed for at oprette sikre forbindelser over internettet ved hjælp af protokoller som OpenVPN og IPsec.
- **Intrusion Detection and Prevention:** Med indbygget IDS/IPS-funktionalitet kan OPNsense overvåge netværket for mistænkelig aktivitet og forhindre potentielle trusler.
- **Web Proxy og Filtrering:** Implementer webproxy og filtreringsregler for at styre og overvåge internettraf, hvilket er nyttigt til at håndtere adgangsrettigheder og beskytte mod malware.
- **Traffic Shaping:** Optimer netværksydelsen ved hjælp af traffic shaping-værktøjer, der giver dig mulighed for at prioritere eller begrænse båndbredden for specifik trafik.
- **Grafisk Brugergrænseflade (GUI):** OPNsense leveres med en brugervenlig GUI, der gør konfiguration og overvågning af sikkerhedsindstillinger tilgængelig selv for ikke-tekniske brugere.
- **Plugin Support:** Udvid funktionaliteten gennem et stort udvalg af plugins, der omfatter alt fra antivirus og caching til udvidede rapporteringsværktøjer.
- **Regelmæssige Opdateringer:** OPNsense holdes aktivt opdateret med hyppige opdateringer, der inkluderer sikkerhedsrettelser og nye funktioner.
OPNsense er kendt for sin fleksibilitet, sikkerhed og stærke fællesskabssupport. Uanset om du administrerer et hjemmenetværk eller et komplekst forretningsmiljø, kan OPNsense være den rette løsning til at styrke din netværkssikkerhed.
Vi ønsker at bygge følgende topologi til vores eksperimenter. I arbejdet med it-sikkerhed er det afgørende at anerkende, at enhver effektiv og omfattende sikkerhedstest starter med en solid netværkstopologi. Netværkstopologi refererer til den fysiske og logiske struktur af et netværk, og det danner grundlaget for, hvordan data kommunikerer og cirkulerer mellem systemer.
![[M8_firwall_topologi.drawio 1.png]]
I det store billede er netværkstopologien hjertet af ethvert it-sikkerhedstestscenarie. Det giver rammerne for forståelsen af, hvordan et netværk er opbygget, og hvordan det kan udsættes for potentielle trusler.
## Download
Den officielle hjemmeside finder vi via https://opnsense.org/
![[Pasted image 20231117221342.png]]
Her vælger vi dvd som image type og mirror location kan med fordel sættes til Aalborg Universitet.
I skrivende stund vil vi så downloade en fil på 394.2 MB (OPNsense-23.7-dvd-amd64.iso.bz2). Filen er altså komprimeret ved brug af bzip2 format.
>[!info]- bzip2 lidt info og baggrund
>Bzip2 er en open-source datakompressionsalgoritme og et program, der bruges til at komprimere og dekomprimere filer. Den blev udviklet af Julian Seward og blev først udgivet i 1996. Navnet "bzip2" står for "Burrows-Wheeler Block Sorting Huffman Coding."
>
>Bzip2 anvender en kombination af Burrows-Wheeler-transformering, bloksortering og Huffman-kodning for at opnå høj kompressionseffektivitet. Algoritmens primære formål er at reducere filstørrelser for at spare plads og lette filoverførsel over netværk.
>
>En af bzip2's styrker er dens evne til at producere mere kompakte filstørrelser end mange andre algoritmer. Dette gør den særligt nyttig i situationer, hvor pladsbesparelse er afgørende, f.eks. ved arkivering af store datamængder eller distribuering af filer online.
>
>Bzip2 er også kendt for sin pålidelighed og stabilitet. Det understøttes på tværs af forskellige platforme og operativsystemer, hvilket gør det til et alsidigt værktøj inden for datamanagement og filkomprimering.For at komprimere en fil med bzip2, kan brugeren typisk anvende kommandoen "bzip2" efterfulgt af filnavnet i terminalen. Ligeledes kan dekomprimering udføres ved hjælp af "bunzip2" kommandoen.
>
>Bzip2 er blevet en integreret del af mange Unix-baserede systemer og er også tilgængelig for andre platforme som Windows. Dens effektive kompressionsmetoder og pålidelighed har gjort den til et populært valg inden for softwareudvikling, dataarkivering og filadministration.
>
>Læs mere her: https://en.wikipedia.org/wiki/Bzip2
>
### Kontrol af download
Ved at vælge den korrekte mirror fra hvor vi har downloaded vores image fil kan vi nu udtrække en liste med de forskellig hashværdier for de forskellige filer. I mit tilfælde har jeg brug for værdien for "OPNsense-23.7-dvd-amd64.iso.bz2":
sha256 = bf67374d04fb00a29d80f9870ac86491b0a87d5dd386c2bd97def0691547e263
![[Pasted image 20231117223836.png]]
Her bruger jeg PowerShell til at fremsøge om filen er downloaded og på min maskine:
```powershell
Get-ChildItem -Filter OPNsense*
```
![[Pasted image 20231117225600.png]]
>[!tip] Learn PowerShell
>Det kan være en fordel at sætte sig ind i de basale PowerShell kommandoer. Et godt sted at starte kunne være:
>https://learn.microsoft.com/en-us/shows/getting-started-with-microsoft-powershell/
Så mangler jeg bare at udtrække SHA256 værdien for den fil jeg har downloaded:
Det gør jeg med følgende kommando:
```powershell
Get-FileHash .\OPNsense-23.7-dvd-amd64.iso.bz2 -Algorithm SHA256
```
![[Pasted image 20231117230147.png]]
#### Spørgsmål
>[!question]- Spørgsmål til kontrol af hash værdi (klik for mere)
>Når vi downloader filer fra internettet, er det afgørende at vi sikre at de downloadede filer forbliver uændrede og ikke er blevet manipuleret for at beskytte vores systemer mod potentielle trusler. Dette er især relevant i forhold til et centralt element i CIA-triaden.
>
>CIA-triaden refererer til tre grundlæggende principper inden for informationssikkerhed: Fortrolighed (Confidentiality), Integritet og Tilgængelighed (availability). I dette tilfælde fokuserer vi på kontrol af hashværdier da det spiller en afgørende rolle i at sikre, at de downloaded filer forbliver uændrede og ikke er blevet manipuleret under downloadprocessen.
>1. **Hvilket princip inden for CIA-triaden er mest relevant, når vi udfører en hashkontrol på en downloaded fil?**
>2. **Hvorfor er kontrol af hashværdier vigtig for it-sikkerhed, især når det kommer til download af filer fra internettet?**
>3. **Hvordan kan kontrol af hashværdier bidrage til at beskytte vores systemer mod potentielle trusler?**
## Udpakning af .bzip2
Efter sammenligning af de to værdier og forhåbentlig konstateret at disse er identiske kan vi nu fortsætte med at udpakke den komprimerede fil. Til det benytter jeg mig af værktøjet 7zip, men der er også andre programmer som kan udføre dette, så har du allerede en sådan installeret bruger du bare det værktøj.
![[Pasted image 20231117231523.png]]
Efter udpakningen har vi nu en brugbar .iso fil som vi kan bruge til installation.
## Opsætning af VM
Det er en rigtig god idé at bruge: https://docs.opnsense.org/ som kilde til viden når vi skal i gang med installationen. Dokumentationen indeholder mange nyttige informationer. Vi kan blandt andet læse om krav til hardware og herefter dimensionere vores VM i VirtualBox eller VMware.
https://docs.opnsense.org/manual/hardware.html
Jeg vælger at prøve med følgende konfiguration i VirtualBox:
1 CPU, 2048 MB RAM, 10 GB disk.
Husk at angiv OS til FreeBSD 64bit
![[Pasted image 20231117233951.png]]
Inden jeg starter maskinen op laver jeg en række ændringer:
### Network interfaces
Jeg disabler Audio. Under network tilføjer jeg 2 interfaces mere således at jeg har 3 i alt.
I dokumentationen kan jeg læse mig frem til at rækkefølgen på interfaces er:
LAN, WAN, OPT
![[Pasted image 20231117234956.png]]
### Adapter 1
Network adapter 1 bliver derfor sat til internal network jeg forsøger mig med at ændre adaptor type til virtio, jeg ændre MAC adressen til at ende på 1111 så kan jeg hurtigere identificere den senere, jeg kan vælge allerede nu at sætte Promiscuous Mode til Allow all, eller dette kan sættes senere.
![[Pasted image 20231117234421.png]]
### Adapter 2
![[Pasted image 20231117235633.png]]
### Adapter 3
![[Pasted image 20231118001320.png]]
Altså følgende opsætning
![[Pasted image 20231118001351.png]]
## Første boot
Herefter kan vi starte maskinen og lade den boot op. Jeg lader den køre frem til følgende skærm:
![[Pasted image 20231118001919.png]]
### login oplysninger
Af dokumentationen kan vi læse os frem til login oplysninger:
![[Pasted image 20231118002054.png]]
![[Pasted image 20231118002300.png]]
Set keyboard to Danish
![[Pasted image 20231118002506.png]]
Jeg vælger UFS GPT/UEFI
![[Pasted image 20231118002554.png]]
Vælger den virtuelle harddisk
Efter jeg har godtaget at jeg mister alt data begynder installationen.
![[Pasted image 20231118002716.png]]
Et sidste step er at ændre root password:
![[Pasted image 20231118002850.png]]
![[Pasted image 20231118002933.png]]
![[Pasted image 20231118003038.png]]
## Afslut installation og reboot (live mode)
Vi kan nu Exit and reboot
Vi lader igen boot forløbe indtil følgende:
![[Pasted image 20231118003236.png]]
Hvis vi er opmærksomme kan vi læse af ovenstående at *OPNsense is running in live mode* Så det vil sige at den igen er bootet up på install isoen som stadig "sidder i" maskinen.
Så derfor virker vores nye root password heller ikke og vi må bruge den fra dokumentationen:
USER: root
PASSWD: opnsense
![[Pasted image 20231118003541.png]]
Efter log-in kan vi nu slukke systemet ned ved at bruge 5)
## "Eject" install image fra VM
Da maskinen nu er slukket kan vi fjerne install mediet fra vores virtualbox VM
![[Pasted image 20231118003900.png]]
## Boot den installerede version
Efter vi har fjernet install .iso filen kan vi starte maskinen op igen og den skulle gerne boot op til login prompt igen. Denne gang bruger vi user = root og passwd det som blev sat under installationen.
Det skulle gerne give os følgende skærm:
![[Pasted image 20231118004255.png]]
## Klargøring og config til Eksperimenter
Nu da vi har en installeret version i vores virtualiserede miljø vil vi foretage nogle ændringer og grund konfigurationer for at hjælpe os i vores fremtidige eksperimenter. Derfor kan det som udgagnspunkt være en rigtig god ide på dette tidspunkt at tage et Snapshot af maskinen og fx. kalde den *Fresh-install* Det hr jeg for vane at gøre, men dan jeres egen metodik-
### Shell på OPNsense (info Network interfaces)
Jeg kan se jeg har en mulighed for at gå i shell (8) lad os prøve det for at bekræfte vores netværk:
Ved prompten skriver jeg `ifconfig` for at se interface info
kan med fordel pipe den over til `more` kommandoen
```shell
ifconfig | more
```
![[Pasted image 20231118005223.png]]
(1,2,3) Så kan jeg se at jeg har tre interfaces navngivet *vtnet0-2*
(4) Herunder kan jeg aflæse IPv4 adressen på *vtnet0* til at være 192.168.1.1 og MAC: til 08:00:27:97:11:11 så det passer godt på min første VM adapter som jeg jo lavede sådan at den endte på fire 1 taller. Netmasken er opgivet i hexadecimal til glæde for macOS bruger som netop også ser denne notation i deres Terminal. Dette interface er LAN interface.
(5) Her kan jeg aflæse IPv4 adressen som er sat til min NAT i VirtualBox. Ligeledes kan jeg se at MAC ender på 4 2 taller.
Ved at taste q er jeg tilbage i prompt og kan afslutte med `exit`
>[!question]- Spørgsmål til `ifconfig` (klik for mere)
> 1. Hvordan vil du finde oplysninger og manualen for kommandoen `ifconfig`?
> 3. Vi ønsker kun at se oplysninger om de interfaces som pt er nede (down), hvilken kommando kan vi skrive?
> [!tips]- hints
>![[ifconfig_hint1_qr.png]]
### Test af forbindelse til internettet (ping)
Lad os teste WAN interface ved at pinge ud og ramme 8.8.8.8 eller 1.1.1.1
Vi vælger 7) ping host
![[Pasted image 20231118010248.png]]
Forbindelsen til internettet er hermed bekræftet.
### Konfiguration af OPNsense via Web-interface
Nu er vores VM med OPNsense som hvis vi havde opsat og tilsluttet en fysisk router første gang. Den er "næsten" i fabriksindstillinger da vi jo har lavet få ændringer som fx. password til root user. Den kan jo derfor være oplagt at tage et snapshot af sin VM sådan at går der noget galt i et eksperiment kan den genskabes (restore) til dette stadie.
![[Pasted image 20231118172102.png]]
Næste step er at forbinde en VM med et OS som har en GUI til det interne LAN netværket. Det er jer frit for hvilken I ønsker at bruge og stifte bekendtskab med. I kunne jo med fordel udfordre jer selv og kigge på [[DistroWatch.com]]. Jeg vil i mit tilfælde tilkoble en VM hvor jeg har installeret [[Red Hat Linux]].
![[Pasted image 20231119001345.png]]
Min Red Hat VM er opsat med to network interfaces NICs
![[Pasted image 20231118231859.png]]
Adapter 1 MAC ender på b1
Adapter 2 MAC ender på b3
Jeg vælger at "fjerne" kablet for adapter 1
![[Pasted image 20231118232114.png]]
Ved en at udføre `ip -c a` i terminalen på Red Hat VM'en får jeg følgende output
![[Pasted image 20231118232249.png]]
Lad os zoom ind på dev enp0s8
```shell
[hans@redhat-work-01 ~]$ ip -c addr show dev enp0s8
3: enp0s8: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc fq_codel state UP group default qlen 1000
link/ether 08:00:27:b2:e0:b3 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.100/24 brd 192.168.1.255 scope global dynamic noprefixroute enp0s8
valid_lft 6398sec preferred_lft 6398sec
inet6 fe80::a00:27ff:feb2:e0b3/64 scope link noprefixroute
valid_lft forever preferred_lft forever
```
Jeg kan altså aflæse at interfacet har fået en IPv4 adresse: inet 192.168.1.100/24
Ved at anvende kommandoen `ip route` aflæser jeg default gateway til at være placeret på 192.168.1.1
```bash
[hans@redhat-work-01 ~]$ ip route
default via 192.168.1.1 dev enp0s8 proto dhcp src 192.168.1.100 metric 100
192.168.1.0/24 dev enp0s8 proto kernel scope link src 192.168.1.100 metric 100
```
Det vil sige at jeg nu kan tilgå OPNsense web administrations front via browseren på min Red Hat VM. I første omgang får vi jo en warning:
![[Pasted image 20231118234118.png]]
Ved at klikke på Advanced kan vi lave en inspektion af det certifikat som bliver benyttet:
![[Pasted image 20231118234250.png]]
Vi kan nu se at årsagen til den første warning er fordi certifikatet ikke kan valideres da det er et self-signed. Vi kan gå i dybden med certifikatet ved at klikke "View Certificate". eller vi kan vælger "Accept the Risk and Continue". Dette giver os log-in siden til OPNsense router/firewall
![[Pasted image 20231118234530.png]]
Vi bliver nu præsenteret for en Wizard som hvis vi følger den giver mulighed for at ændre og tilføje oplysninger som hostname, domain, DNS server, timezone etc.
![[Pasted image 20231118235656.png]]
Config af WAN interface skal vi være opmærksomme på Block af RFC1918 Networks
![[Pasted image 20231118235916.png]]
Disse "check marks" kan med fordel fjernes når vi er i et virtualisert miljø og må forvente at WAN vil modtage trafik som er et RFC1918 netværk.
Fra Lobby - Dashboard kan vi "Click to check for updates"
![[Pasted image 20231119004049.png]]
### Assign OPT1 interface
Nu kan jeg begynde at kigge på mit 3. interface den hvis MAC adresse jeg havde sat til at ende på 33:33
![[Pasted image 20231119004848.png]]
Jeg kaleder den hostonly og klikker add. Den dukker nu op i min oversigt:
![[Pasted image 20231119005047.png]]
Jeg enabler interfacet og får dermed mulighed for at konfigurere flere options.
![[Pasted image 20231119005239.png]]
Nu er det jo vigtig at jeg ved hvad subnet mit Host-only netværk er på og hvilke adresse som er i DHCP serveren hvis denne at enablet i VirtualBox. I mit tilfælde er følgende værdier gældende:
subnet: 192.168.56.0/24
DHCP server 192.168.56.100
DHCP range: .101-254
![[Pasted image 20231119005339.png]]
Så jeg kan sætte en statisk IPv4 adresse til OPNsense OPT1 interface på fx. 192.168.56.20/24
Jeg kan nu på min Host gå i min Windows Terminal og forsøge at pinge 192.168.56.20
![[Pasted image 20231119005855.png]]
Det ser ikke ud til at virke, men vi har heller ikke opsat firewall på OPT1 således at den tillader ICMP. Lad os se om det kan lykkedes. Har du flere skærme kan du med fordel lade ping i windows terminal fortsætte og lave konfigurationeren og på den måde følge med i hvornår der er "hul igennem".
Vi skal under følgende menu: Firewall - Rules - Hostonly
![[Pasted image 20231119010218.png]]
Jeg klikker på + ny regel:
![[Pasted image 20231119010400.png]]
Action er Pass
Protocol ICMP
Type i første omgang any
Source: Hostonly net
Destination: this Firewall
Efter save og apply changes skulle det gerne se sådan ud i vores windows terminal
![[Pasted image 20231119011213.png]]
Vi begynder altså og få et Echo reply tilbage. Så langt så godt. Men vi vil jo gerne kunen tilgå web interface på OPNsense fra vores host maskine. Næste step er System - Settings - Administration:
Her vil vi gerne finde Listen Interfaces
![[Pasted image 20231119011516.png]]
Vi ønsker kun den lytter på LAN og Hostonly
![[Pasted image 20231119011617.png]]
Men fra en browser på host maskinen får vi bare:
![[Pasted image 20231119011748.png]]
Vi skal tilføje endnu en regel til vores firewall - Rules - Hostonly
![[Pasted image 20231119011947.png]]
Pass
Protocol: TCP
Source: Hostonly net
Destination: This Firewall
Destination port range: HTTPS
Der er nu følgende to regler for min firewall på Hostonly interfacet
![[Pasted image 20231119012307.png]]
Fra en Browser på min host maskine er det nu vigtigt at jeg skriver: `https://192.168.56.20`
Igen får jeg en warning (denne gang i en google chrome browser)
![[Pasted image 20231119012534.png]]
Jeg laver en kontrol på Certifikatet og kan se det er self-signed af OPNsense. så jeg ender til sidst her:
![[Pasted image 20231119012656.png]]
Altså har jeg nu direkte adgang til web-interface og konfiguration af OPNsense uden at jeg behøver at starte en maskine op med GUI i mit LAN net. Jeg kan ligeledes vælge at starte den op headless.
## Snapshot (production)
Nu skulle der gerne være en fungerende OPNsense router/firewall i jeres virtuelle miljø, måske har i ændret på noget i forhold til ovenstående eller lavet jeres egne små tilføjelser, det er hvad der passer bedst til jeres brug og virke. En rigtig god idé er at bruge *Description* eller tilsvarende for at opbevare oplysninger om de forskellige maskiner man opretter i sit miljø, pludselig ham man så mange forskellige, at det kan være svært at huske, hvad det lige præcis var med den enkelte maskine.
![[Pasted image 20231121150729.png]]
Det sidste man gør inden man begynder på alle sine eksperimenter og leg er lukke maskinen ned og lave et Snapshot. På den måde kan jeg altid vende tilbage skulle noget gå galt.
![[Pasted image 20231121151533.png]]
Så er det bare på med "flyverdragten" og ud og lege i sneen..
*“Give the pupils something to do, not something to learn; and the doing is of such a nature as to demand thinking; learning naturally results”* (1)
(1) Dewey, J. (1916). Thinking In Education. _Democracy and Education: An Introduction To The Philosophy of Education_ (p. 191). New York: The Free Press.