Wireguard konfiguration från egen publik nyckel

Vår huvudtjänst.
keso
Inlägg: 6
Blev medlem: fre 6 december 2019, 18:20

Wireguard konfiguration från egen publik nyckel

Inlägg av keso » fre 6 december 2019, 18:27

Är det möjligt att få en wireguard konfiguration på nåt sätt om man har en egen privat nyckel man vill använda? Jag kan inte lägga till den privata som kommer med den skapade konfigurationsfilen.

Markus
Inlägg: 85
Blev medlem: tor 10 januari 2019, 12:17
Ort: Stockholm

Re: Wireguard konfiguration från egen publik nyckel

Inlägg av Markus » lör 7 december 2019, 09:34

Det går men lite knepigare det närmaste vi har isåfall detta script som kan köras till mac & Linux:
https://wireguard-bahnhof.5july.net/sta ... rity-wg.sh

Har du en egen nycklar kan du ändra rad 58 till din privata nyckel

Du behöver dock först logga in med ett konto på wireguard-bahnhof.5july.net för att scriptet ska kunna acceptera din inloggnings uppgifter.

keso
Inlägg: 6
Blev medlem: fre 6 december 2019, 18:20

Re: Wireguard konfiguration från egen publik nyckel

Inlägg av keso » lör 7 december 2019, 09:39

Tack. Ska testa om det funkar.

keso
Inlägg: 6
Blev medlem: fre 6 december 2019, 18:20

Re: Wireguard konfiguration från egen publik nyckel

Inlägg av keso » sön 8 december 2019, 19:44

Tack Markus. Det funkade bra, skrev dock om skriptet så det laddar ner konfigurationen till samma mapp man kör skriptet från om man inte är root och man kan skicka med en privat nyckel som argument att skapa konfig till. Om nån annan är i samma situation som jag...

Kod: Markera allt

#!/usr/bin/env bash
# SPDX-License-Identifier: GPL-2.0
#
# Copyright (C) 2016-2018 Jason A. Donenfeld <Jason@zx2c4.com>. All Rights Reserved.

die() {
        echo "[-] Error: $1" >&2
        exit 1
}

PROGRAM="${0##*/}"
ARGS=( "$@" )
SELF="${BASH_SOURCE[0]}"
PRIVATE_KEY="$1"
[[ $SELF == */* ]] || SELF="./$SELF"
SELF="$(cd "${SELF%/*}" && pwd -P)/${SELF##*/}"

#[[ $UID == 0 ]] || exec sudo -p "[?] $PROGRAM must be run as root. Please enter the password for %u to continue: " -- "$BASH" -- "$SELF" "${ARGS[@]}"
[[ $UID == 0 ]] || echo "[?] $PROGRAM is not run as root. Saving configuration to $PWD for user $USER" \
        && echo "else exit script with ctrl-C and re-run as root, i.e with sudo, to get the configuration installed."

[[ ${BASH_VERSINFO[0]} -ge 4 ]] || die "bash ${BASH_VERSINFO[0]} detected, when bash 4+ required"

type curl >/dev/null || die "Please install curl and then try again."
type jq >/dev/null || die "Please install jq and then try again."
set -e

read -p "[?] Please enter your Integrity account username: " -r USER
read -p "[?] Please enter your IntegrityVPN password $PASS_TYPE: " -rs PASS

echo "[+] Contacting Integrity API for server locations."
declare -A SERVER_ENDPOINTS
declare -A SERVER_PUBLIC_KEYS
declare -A SERVER_LOCATIONS
declare -a SERVER_CODES

RESPONSE="$(curl -LsS https://api.5july.net/1.0/locations)" || die "Unable to connect to Integrity API."
FIELDS="$(jq -r '.[] | .hostname,.country,.city,.public_key,.dest_addr,.port' <<<"$RESPONSE")" || die "Unable to parse response."
while read -r HOSTNAME && read -r COUNTRY && read -r CITY && read -r PUBKEY && read -r IPADDR && read -r PORT; do
        CODE="${HOSTNAME%-wireguard}"
        SERVER_CODES+=( "$CODE" )
        SERVER_LOCATIONS["$CODE"]="$CITY, $COUNTRY"
        SERVER_PUBLIC_KEYS["$CODE"]="$PUBKEY"
        SERVER_ENDPOINTS["$CODE"]="$IPADDR:$PORT"
done <<<"$FIELDS"

if [[ $UID == 0 ]]; then
        shopt -s nocasematch
        for CODE in "${SERVER_CODES[@]}"; do
                CONFIGURATION_FILE="/etc/wireguard/integrity-$CODE.conf"
                [[ -f $CONFIGURATION_FILE ]] || continue
                while read -r line; do
                        [[ $line =~ ^PrivateKey\ *=\ *([a-zA-Z0-9+/]{43}=)\ *$ ]] && PRIVATE_KEY="${BASH_REMATCH[1]}" && break
                done < "$CONFIGURATION_FILE"
                [[ -n $PRIVATE_KEY ]] && echo "[+] Using existing private key." && break
        done
        shopt -u nocasematch


        if [[ -z $PRIVATE_KEY ]]; then
                echo "[+] Generating new private key."
                PRIVATE_KEY="$(wg genkey)"
        fi
else
        CONFIGURATION_FILE="$PWD/integrity-$CODE.conf"
        if [[ -z $PRIVATE_KEY ]]; then
                echo "[+] Generating new private key for $USER."
                PRIVATE_KEY="$(wg genkey)"
        else
                echo "[+] Using supplied private key."
        fi
fi
PUBLIC_KEY="$(wg pubkey <<< $PRIVATE_KEY)"

echo "[+] Contacting Integrity API."
RESPONSE="$(curl -LsS https://api.5july.net/1.0/wireguard -X 'POST' -H "Content-Type: application/json" -d '{"username": "'$USER'", "password": "'$PASS'", "pubkey": "'$PUBLIC_KEY'"}')" || die "Could not talk to Integrity API."
#[[ $RESPONSE =~ ^[0-9a-f:/.,]+$ ]] || die "$RESPONSE"
FIELDS="$(jq -r '.success' <<<"$RESPONSE")" || die "Unable to parse response."
IFS=$'\n' read -r -d '' STATUS <<<"$FIELDS" || true
if [[ $STATUS != ok ]]; then
        die "An unknown API error has occurred. Please try again later. $RESPONSE"
fi
FIELDS="$(jq -r '.dns,.ipv4,.ipv6' <<<"$RESPONSE")" || die "Unable to parse response."
IFS=$'\n' read -r -d '' DNS IPV4 IPV6 <<<"$FIELDS" || true
#ADDRESS="$RESPONSE"
#DNS="1.1.1.1"

echo "[+] Writing WriteGuard configuration files."
for CODE in "${SERVER_CODES[@]}"; do
        if [[ $UID == 0 ]]; then
                CONFIGURATION_FILE="/etc/wireguard/integrity-$CODE.conf"
                umask 077
                mkdir -p /etc/wireguard/
        else
                CONFIGURATION_FILE="$PWD/integrity-$CODE.conf"
        fi
        rm -f "$CONFIGURATION_FILE.tmp"
        cat > "$CONFIGURATION_FILE.tmp" <<-_EOF
                [Interface]
                PrivateKey = $PRIVATE_KEY
                Address = $IPV4,$IPV6
                DNS = $DNS

                [Peer]
                PublicKey = ${SERVER_PUBLIC_KEYS["$CODE"]}
                Endpoint = ${SERVER_ENDPOINTS["$CODE"]}
                AllowedIPs = 0.0.0.0/0, ::/0
        _EOF
        mv "$CONFIGURATION_FILE.tmp" "$CONFIGURATION_FILE"
done

echo "[+] Success. The following commands may be run for connecting to Integrity:"
for CODE in "${SERVER_CODES[@]}"; do
        echo "- ${SERVER_LOCATIONS["$CODE"]}:"
        if [[ $UID != 0 ]]; then
                echo "Copy integrity-$CODE to /etc/wireguard/ on the device with the prviate key!"
        fi
        echo "  \$ wg-quick up integrity-$CODE"
done

echo "Please wait up to 60 seconds for your public key to be added to the servers."

gostal
Inlägg: 12
Blev medlem: sön 24 maj 2020, 09:55

Re: Wireguard konfiguration från egen publik nyckel

Inlägg av gostal » ons 3 juni 2020, 12:12

En av poängerna med asymmetrisk kryptering är just att publika nycklar är det enda som ska delas med andra. Vad jag förstår på denna tråd och efter att ha läst på lite om tekniken så sker detta inte normalt hos Integrity utan såväl publik som hemlig nyckel för klienten genereras hos Integrity. Det innebär principiellt att säkerheten inte blir optimal.

Jag skulle gärna se en liten notis om det på era hemsidor. Man skulle kunna uttrycka det positivt:
För dem som använder Linux eller Mac är det möjligt att ytterligare förbättra konfigurationen.
Och så någon länk till hur man gör. Man skulle även kunna säga något i stil med att:
Använder du Windows kanske du kan be någon bekant som använder Linux eller Mac att hjälpa dig.
.

Nu har jag skapat ett par konfigurationsfiler redan och vad jag förstår så kan man skapa fler än fem st men först in först ut gäller då. För att nu spola bort de suboptimala konfigurationsfilerna jag skapat så tänker jag att det borde gå bra att använda kesos skript och generera fem nya konfigurationsfiler såhär:
  • 1 Skapa eget nyckelpar
  • 2 Kör skriptet och peka ut den publika nyckeln
  • 3 Spara konfigurationsfilen till ett nytt namn exvis integrity1_vpn.conf
och sedan börja om från steg 1 osv tills fem nyckelpar och fem konfigurationsfiler skapats. Vill man inte sabba kollen på https://ipcheck.5july.net/ så kan ju alla få heta integrity_vpn.conf men man sparar till olika kataloger i stället, se viewtopic.php?f=2&t=469.

Nu tycker jag det borde vara möjligt att via webscript fixa det här under förutsättning att kilenten har den mjukvara som behövs. I så fall kan man tänka sig olika webformulär för Linux/Mac och ett särskilt för Windows.

gostal
Inlägg: 12
Blev medlem: sön 24 maj 2020, 09:55

Re: Wireguard konfiguration från egen publik nyckel

Inlägg av gostal » fre 5 juni 2020, 01:46

Markus!
Försökte nyss använda kesos skript efter att ha skapat en privat nyckel med

Kod: Markera allt

umask 077 && wg genkey > privatekey1 
Det fungerar inte och ger följande felmeddelande:

wg: Key is not the correct length or format

Försökte då med det skript du pekade ut, Markus, efter att ha editerat rad 58 till PRIVATE_KEY=privatekey1

Det fungerar inte heller men det blir lite mera felmeddelanden:

Kod: Markera allt

wg: Key is not the correct length or format
[-] Error: An unknown API error has occurred. Please try again later. {
  "error": {
    "error_code": 4001, 
    "error_name": "WireguardPubKeyInvalid", 
    "http_code": 422, 
    "innerError": {}, 
    "message": "Invalid public key"
  }
}
Är det missmatch mellan versionerna på wireguard? Jag kör wireguard Version: 1.0.20200513-1~18.04 på Linux Mint 19.1.
Tacksam för hjälp.

Skriv svar