• No results found

Je eigen VPN-server. Wanneer een beveiligde verbinding handig uitkomt. Introductie: Wireguard VPN. Wireguard in Docker. Je Firewall instellen

N/A
N/A
Protected

Academic year: 2022

Share "Je eigen VPN-server. Wanneer een beveiligde verbinding handig uitkomt. Introductie: Wireguard VPN. Wireguard in Docker. Je Firewall instellen"

Copied!
14
0
0

Bezig met laden.... (Bekijk nu de volledige tekst)

Hele tekst

(1)

Wanneer een beveiligde verbinding handig uitkomt

Introductie: Wireguard VPN Wireguard in Docker

Je Firewall instellen

Verbinden met je VPN met een client

Wireguard gebruikers aanmaken en afmelden

Je eigen VPN-server

(2)

<todo>

Bedenk dat bandbreedte niet gratis is, en internetverkeer routeren via je VPS wellicht niet de privacy geeft die je denkt.

Dat gezegd, er is een duidelijke use case voor een VPN-netwerkverbinding met je VPS-server.

Het enige wat we hier echter maken is een beveiligde tunnel van een client computer naar je VPS- server. Vanaf je VPS-server (wireguard server) is het uiteraard niet extra beveiligd. Het gaat dus niet over 'veilig' surfen of anonimiteit.

Je verbinding is dan zo veilig als je VPS-server, wat niet: niet. En ook niet anoniem, want iedereen kan uiteraard uitzoeken wie betaalt voor welk IP. Dus wees van dat alles bewust. Het is geen wondermiddel.

Wireguard software betreft vrije software, zie: Wireguard.com.

Er zijn alternatieven voor Wireguard, zoals OpenVPN. En dat is ook mooie software, maar Wireguard is eenvoudiger om mee te starten.

</todo>

Introductie: Wireguard VPN

(3)

Docker

Docker-compose

Een Linux-server (gebruikt in dit voorbeeld: ubuntu server)

De wens om een VPN te starten, voor het routeren van het internetverkeer van een client- computer via je VPS-server.

De gekozen aanpak is gebaseerd op die van The Digital Life, bekijk de blogpost hier en eventueel hier - als ook de video hier en ook eventueel hier. Het materiaal van Christian Lempa is een tip voor geïnteresseerden.

En we gebruiken Wireguard software, de website daarvoor is wireguard.com, met generieke installatie documentatie hier.

We hebben weer een docker-compose.yaml nodig, maak daarvoor weer een map aan, in ons voorbeeld: /opt/wireguard-server

En de docker-compose.yaml in /opt/wireguard-server/ als volgt:

Wireguard in Docker

Benodigd

Aanpak

De docker-compose.yaml

version: "2.1"

services:

wireguard:

image: linuxserver/wireguard container_name: wireguard cap_add:

- NET_ADMIN - SYS_MODULE environment:

- PUID=1000 - PGID=1000

(4)

Wat zien we de volgende instellingen:

Betreft de nieuwe service wireguard.

We gebruiken de wireguard container van het geweldige linuxserver initiatief. En die bouwen (op het moment van schrijven in ieder geval) goede containers. Veel

ondersteuning ook voor ARM64, wat uiteraard een bonus is, dit geldt ook de wireguard container.

De container is de wireguard container, en die is (check) recent bijgewerkt en up-to-date.

Lees de gelinkte documentatie.

Deze container komt met automatische routing opties voor het routeren van verkeer door de Wireguard tunnel, zodat je  een VPN-achtige werking kunt realiseren.

De container heeft een logische naam toegewezen gekregen: wireguard

De container heeft een aantal extra permissies (capabilities, dat is: rechten) benodigd:

namelijk: NET_ADMIN en SYS_MODULE. En dat betreft een toegenomen veiligheidsrisico dat je wilt onderzoeken voordat je verder gaat. 

De NET_ADMIN capability: "Perform various network-related operations.", overgenomen van hier.

En de SYS_MODULE capability: "Load and unload kernel modules." voor het laden van de wireguard kernel module.

De PUID en GUID zijn de user en group ids, die staan ingesteld op gebruiker 1000, vermoedelijk is dat het userid van je beheer user en de bijbehorende groep. Zorg dat je hier de IDs zet die je gebruikt op de volumes die je mount. Vaak is dat gebruiker 1000, dat is: de eerst aangemaakte gebruiker. Maar dat is zeker niet altijd het geval, dus controleer dat.

TZ = timezone, stel in naar wens.

- TZ=Europe/Amsterdam

- SERVERURL=wireguard.domain.com #optional - SERVERPORT=51820 #optional

- PEERS=1 #optional - PEERDNS=auto #optional

- INTERNAL_SUBNET=10.13.13.0 #optional - ALLOWEDIPS=0.0.0.0/0 #optional volumes:

- /opt/wireguard-server/config:/config - /lib/modules:/lib/modules

ports:

- 51820:51820/udp sysctls:

- net.ipv4.conf.all.src_valid_mark=1 restart: unless-stopped

(5)

De SERVERURL is niet helemaal optioneel. Je kan hier het IP-adres van je VPS-server invullen, of het domeinnaam, of: auto. Dan doet de Wireguard-server / container een lookup via een server op internet. De auto optie werkt dus niet voor interne netwerken zoals je thuisnetwerk.

De SERVERPORT is standaard op 51820, kan je herzien als je wilt.

De PEERS environment variabele geeft aan hoeveel gebruikers er geregistreerd moeten worden bij de start. Je kan later gebruikers toevoegen.

PEERDNS is de DNS-server die gebruikt wordt. Met auto gebruiken je verbonden

gebruikers de eigen interne DNS-dienst in de Wireguard-container. Je kan hier ook een DNS-server IP-adres instellen, dan gebruiken de verbonden gebruikers een externe DNS- dienst zoals opgegeven. Bedenk dat servers die je raadpleegt kunnen achterhalen welke DNS-server je gebruikt, en dan dus het IP-adres van je VPS vinden.

De subnet instellingen kan je herzien, voor het correct werken met IP-adressen in je VPS/VPN netwerk, maar is in mijn geval zo prima.

De mount van /lib/modules is uiteraard gevaarlijk. Maar je moet - in voorkomende

gevallen - wel een kernel-module compileren/creëren voor de host-server. In dat geval is toegang tot je /lib/modules benodigd. Oordeel zelf of dat inderdaad het geval is, of dat je VPS-OS voldoende up-to-date is, dat de wireguard kernel module reeds beschikbaar is.

Wireguard maakt gebruik van het UDP protocol, in dit geval via poort 51820. Die moeten we dus openzetten op de firewall(s). Die moet je beschikbaar maken op de host-server, voor verbinding van buiten.

Je start je container met:

Dan gaat de software gedownload en gestart worden. Uiteindelijk zie je dan:

En dan check je nog even of het inderdaad draait:

En jawel:

Starten!

sudo docker-compose up -d

Status: Downloaded newer image for linuxserver/wireguard:latest Creating wireguard ... done

sudo docker-compose ps

Name Command State Ports --- wireguard /init Up 0.0.0.0:51820->51820/udp,:::51820->51820/udp

(6)

En de status van de wireguard server in de wireguard container opvragen, als volgt:

Dat is het commando: docker: voer uit, met een interactieve terminal, in de wireguard container, het commando: wg

En wg is de wireguard tool die je gebruikt voor het beheren van de wireguard installatie. En dat geeft standaard de status van de wireguard server. Bijvoorbeeld:

Je ziet dat de firewall luistert op de opgegeven poort. Je ziet de publieke key en dat er inderdaad één peer (gebruiker) geregistreerd is.

De standaard configuratie bekijken: De container heeft in de /opt/wireguard-server een config map aangemaakt. Controleer dat dit gelukt is, en dat er inderdaad bestanden zijn weggeschreven, waaronder:

De peer1 map voor de eerste standaard aangemaakte gebruiker Het standaard wireguard configuratiebestand: wg0.conf

De peer1 map, in de config map, in /opt/wireguard-server geeft de benodigde informatie voor het verbinden met je kersverse VPN server.

In de automatisch aangemaakte configuratie voor de Wireguard VPN-server, wordt netwerkverkeer dat binnenkomt over de wg0 interface (dat is, uit je beveiligde VPN tunnelverbinding) doorgestuurd moet worden naar internet. Dat is forwarden en gebeurt met masquerading, dat is: NAT / Network Address Translation. Hierdoor lijkt het verkeer van je client-computer te komen vanaf je wireguard- server / VPS-server.

Maar daarvoor moet je VPS-server / wireguard-server wel goed ingesteld staan, dat dit daadwerkelijk kan/mag.

Controleer of dit kan/mag met:

sudo docker exec -ti wireguard wg

interface: wg0

public key: PX8...Eg0=

private key: (hidden) listening port: 51820

peer: Pve....u9nQ=

allowed ips: 10.13.13.2/32

IP Forwarding

(7)

Als het goed is zie je een 1 als uitkomst.

Zie je geen 1 als uitkomst?

Dan moet je deze functionaliteit hiervoor gaan aanzetten. Hiervoor moet je bewerken /etc/sysctl.conf door het aanzetten van de net.ipv4.ip_forward functionaliteit. Dat is, het verwijderen van de # aan het begin van de regel, zodat de ip_forward optie aangezet wordt.

Het relevante stukje in het sysctl.conf bestand:

Als je met IPv6 werkt, moet je dit ook voor IPv6 aanzetten, verderop in het .conf bestand.

Na het verwerken wil je de server herstarten, of de sysctl dienst herstarten met:

Je ziet als het goed is dat ip_forward wordt aangezet:

Controleer nu opnieuw of het goed staat ingesteld, met het 'cat .... /ip_forward' commando zoals boven weergegeven.

cat /proc/sys/net/ipv4/ip_forward

# Uncomment the next line to enable packet forwarding for IPv4 net.ipv4.ip_forward=1

sudo sysctl -p

net.ipv4.ip_forward=1

(8)

Voor toegang tot je VPS-server, tot de Wireguard container, op poort 51820, moet je de firewall openen.

Controleer eerst dat er een dienst actief is op je VPS-server:

Je kunt dan zien of er inderdaad software draait luisterend op poort 51820. Iets als:

Je kunt vervolgens je eigen firewall openen voor de wireguard dienst met:

En controleer dan dat de nieuwe firewall-regel inderdaad is aangekomen:

En controleer in die lijst dat de 51820 UDP vermelding in de lijst staat als ALLOW.

Bedenk dat je VPS provider ook nog een firewall zal hebben, waar je wel of niet wat mee moet.

 

 

Je Firewall instellen

netstat -tulpen | grep 51820

udp 0 0 0.0.0.0:51820 0.0.0.0:* 0 5239976 - udp6 0 0 :::51820 :::* 0 5239980 -

sudo ufw allow 51820/udp

sudo ufw status

(9)

De configuratie voor de client is te vinden in de map op je VPS-server met de naam:

En om heel precies te zijn het bestand: peer1.conf

Je wilt nu vanaf een andere computer verbinden met je VPS. Dan heb je de gegevens nodig uit de peer1 map.

Let op, onderstaande betreft de gebruiker van de VPN-dienst. Dit is dus je client, niet je VPS-server zelf.

Je kunt bijvoorbeeld het peer1.conf bestand kopiëren naar een Linux/Ubuntu computer en plaatsen in de /etc/wireguard map als wg0.conf

Hoe je het peer1.conf bestand veilig! verplaatst van je server naar de client laat ik over aan de gebruiker. Je kunt met secure copy (scp) veilig bestanden kopieren, zie bijvoorbeeld ter illustratie deze documentatie. Je kan de inhoud visueel copy/pasten, je kan het overtypen, je kan de

peer1.png gebruiken als QR-code (merk de ijzige rillingen op als je QR-code hoort), etc.

Hoe dan ook, voor de test, kopieer de peer1.conf van je VPS-server naar je client computer, en plaats die voor de test in de wireguard configuratie map als: /etc/wireguard/wg0

We gaan werken met wireguard verbindingen met het commando wg_quick. Lees daar dus wat over.

Je verbindt nu je client computer (niet je VPS dus)  met de wireguard serversoftware op je VPS- server met het commando:

Verbinden met je VPN met een client

/opt/wireguard-server/config/peer1

Naar je client computer

Studeerwerk benodigd? Lees de getting started handleiding op Wireguard.com.

(10)

En je wordt verbonden, iets als:

Je ziet dat IPv4 en IPv6 routes opgezet worden zodat al (IPv4 0.0.0.0/0 en IPv6 ::/0) het

netwerkverkeer standaard gerouteerd wordt naar wg0, de tunnelverbinding naar de VPS-server. Zo wordt het lokale verkeer dus doorgestuurd naar je Wireguard container en komt het virtuele privé- netwerk tot stand.

Je bent nu dus verbonden met je VPS-server, via een VPN-verbinding. Je wilt daarvan nu de status controleren:

De status informatie is iets als:

wg-quick up wg0

[#] ip link add wg0 type wireguard [#] wg setconf wg0 /dev/fd/63

[#] ip -4 address add 10.13.13.2 dev wg0 [#] ip link set mtu 1420 up dev wg0 [#] resolvconf -a wg0 -m 0 -x [#] wg set wg0 fwmark 51820

[#] ip -6 route add ::/0 dev wg0 table 51820 [#] ip -6 rule add not fwmark 51820 table 51820 [#] ip -6 rule add table main suppress_prefixlength 0 [#] ip6tables-restore -n

[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820 [#] ip -4 rule add not fwmark 51820 table 51820 [#] ip -4 rule add table main suppress_prefixlength 0 [#] sysctl -q net.ipv4.conf.all.src_valid_mark=1 [#] iptables-restore -n

Studeerwerk benodigd? Het netwerkverkeer wordt geregeld door een Linux subsysteem (onderdeel) met de naam netfilter. Voor het inregelen van het gewenste netwerkverkeer in het netfilter systeem, gebruik je gereedschap. Dat gereedschap is iptables (of, eventueel nieuwer, nftables). De docker container komt met automatische configuratie via iptables opdrachten. Je kunt met aanvullende configuratie uiteraard deze functionaliteit

personaliseren en je VPN tunnel op andere manieren inzetten. Daarvoor is dan aanvullend studeerwerk benodigd over netfilter en iptables.

sudo wg

(11)

En je bent duidelijk verbonden, anders zag je geen interface en peer. En je ziet een recente handshake, de verbinding is levend.

Je kunt eventueel nog zien of je inderdaad een wg0 netwerk hebt gekregen:

Zoek dan in de lijst je wg0 verbinden op. Of vraag die specifiek op via:

Met als resultaat:

Gelukt. Je kunt nu internet gebruiken, bedenk daarbij dat je internet gebruik nu verloopt via je VPS- server.

De client computer is verbonden met je Wireguard-server op je VPS.

interface: wg0

public key: Pve...u9nQ=

private key: (hidden) listening port: 51820 fwmark: 0xca6c

peer: PX8...Eg0=

endpoint: 132.45.67.89:51820 allowed ips: 0.0.0.0/0, ::/0 latest handshake: 19 seconds ago

transfer: 16.46 KiB received, 18.88 KiB sent

ip a

ip address show dev wg0

11: wg0: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1420 qdisc noqueue state UNKNOWN group default qlen 1000

link/none

inet 10.13.13.2/32 scope global wg0

valid_lft forever preferred_lft forever

De VPN-verbinding controleren op de VPS-

server

(12)

Je kunt zien dat er inderdaad een client verbonden is, door het wg commando uit te voeren. Dit moet dan wel in de Wireguard docker container gebeuren, als volgt:

Met als resultaat:

Je ziet dat er daadwerkelijk informatie uitgewisseld is, en dat de laatste handshake is twee minuten geleden - niet heel recent maar voor onze situatie (verkeer geïnitieerd door de client) goed

genoeg. De peer (je gebruiker / client computer) is dus verbonden met je wireguard server op je VPS. En je ziet in het statusschermpje ook het publieke IP-adres van de verbonden peer computer.

Op gegeven moment wil je de verbinding weer ophangen, vanaf je client, dat doe je met:

Je ziet dat de VPN-verbinding opgehangen wordt:

En je kunt nog even checken wat de status is van wireguard op je client:

sudo docker exec -ti wireguard wg

interface: wg0

public key: PX8...Eg0=

private key: (hidden) listening port: 51820

peer: Pve....u9nQ=

endpoint: 213.12.34.654:23226 allowed ips: 10.13.13.2/32

latest handshake: 1 minute, 54 seconds ago transfer: 27.26 KiB received, 57.77 KiB sent

De verbinding ophalen vanaf de client

wg-quick down wg0

[#] ip -4 rule delete table 51820

[#] ip -4 rule delete table main suppress_prefixlength 0 [#] ip -6 rule delete table 51820

[#] ip -6 rule delete table main suppress_prefixlength 0 [#] ip link delete dev wg0

[#] resolvconf -d wg0 -f [#] iptables-restore -n [#] ip6tables-restore -n

(13)

En als het goed is geeft die nu aan dat er geen verbinding is. (Geen status info) sudo wg

(14)

<todo> verder uitwerken </todo>

Wanneer je een gebruiker toegang hebt gegeven tot je VPN-server, kan het nodig zijn die toegang ook weer in te trekken. En dat doe je door in wireguard de peer te verwijderen in de config file

De wireguard server identificeert gebruikers op basis van de public/private keys. In de configuratie van wireguard (/opt/wireguard-server/config/wg0.conf) zie je onder het kopje [peer] ieder van de peers (gebruikers) die je toegang hebt gegeven. Verwijder daar de peer die je wilt verwijderen, en de private key van die peer. En gereed.

 

 

Wireguard gebruikers

aanmaken en afmelden

Referenties

GERELATEERDE DOCUMENTEN

Als u de Shrew Soft VPN client niet hebt gedownload, kunt u de client downloaden door op deze link te klikken: Een zachte VPN-client voor Windows tonen.. We

Om verbinding te kunnen maken zien de instellingen er als volgt uit (klik op Preferences voor meer

Kies of u externe gebruikers wilt geauthentiseerd worden naar de lokale gebruikersdatabase of naar een externe AAA server groep.Opmerking: U voegt in stap 6 gebruikers toe aan de

Voer het IP-adres van de externe client in het veld Adres in als u in Stap 5 hebt gekozen voor Gebruik een virtuele adapter en toegewezen adres in de vervolgkeuzelijst

Voer in het veld Totale WAN-internetbandbreedte de gewenste bandbreedte in die aan het profiel moet worden toegewezen (1-100).. Een juiste bandbreedte-toewijzing maakt de

AES-128 wordt aanbevolen voor zijn hoge security en snelle prestaties.De VPN-tunnel moet dezelfde coderingsmethode gebruiken voor beide doeleinden.. De beschikbare opties zijn als

Dit document beschrijft hoe de Cisco VPN-client of de Cisco AnyConnect Secure Mobility Client alleen toegang tot hun lokale LAN kan krijgen wanneer deze is afgestemd op een

Ga naar uw startmenu en kies voor Alle programma’s, dan voor Bureau-accessoires, dan voor Communicatie en dan voor Verbinding met extern bureaublad.. In het scherm dat nu op komt