Blog: Cyberbezpieczenstwo | Systemy enterprise linux

Czy twórcy WireGuarda przewidzieli lockdown? Jak szybko wdrożyć stabilny i bezpieczny VPN.

Czy twórcy WireGuarda przewidzieli lockdown? Jak szybko wdrożyć stabilny i bezpieczny VPN.
  • 1 127 views

Wybuch pandemii koronawirusa zmusił wielu pracowników do pozostania w domach i rozpoczęcia pracy zdalnej. Aby sprostać wszystkim wymogom, przesył danych poprzez publiczną sieć wymagał konfiguracji odpowiedniego zabezpieczenia.

Udostępnij!

Najczęstszym i najpopularniejszym rozwiązaniem stało się użycie technologii VPN. Szyfrowane tunele, które w niej występują, to obecnie powszechnie uznawany standard zapobiegania podsłuchowi informacji. Chyba każdy producent systemu operacyjnego – desktopowego, serwerowego bądź sieciowego – ma w swojej ofercie jakieś narzędzie pozwalające na szyfrowanie danych przesyłanych poprzez sieci publiczne. Sytuacja ta przyczyniła się również do popularyzacji WireGuarda – nowoczesnej technologii VPN.

WireGuard jest ceniony za szybkość działania, prostotę konfiguracji i bezpieczeństwo. Jego pierwsze wydanie, wprowadzone z myślą o systemach Linux, pojawiło się zaledwie parę lat temu – w grudniu 2016 r. Obecnie istnieją wersje WireGuarda na wszystkie popularne systemy; Windowsa, MacOSa oraz Androida.

Główne zalety WireGuarda to:

  • bardziej stabilne połączenia pomiędzy punktami niż wcześniejsze protokoły – niezależnie  od  urządzenia czy systemu, z którego korzystamy
  • zdecydowanie większa szybkość przesyłu danych, działanie do czterech razy szybsze niż w OpenVPN, czy IPSec
  • wykorzystanie współczesnych metod kryptografii i kryptografii klucza publicznego, m.in. szyfrowania symetrycznego ChaCha 20
  • niewielka ilość kodu w porównaniu ze starszymi rozwiązaniami – zajmuje zaledwie 4 tys. linii (OpenVPN ok 600 tys.).

WireGuard jest oprogramowaniem Open Source, działa na poziomie jądra systemu Linux i został oficjalnie włączony do kernela w wersji 5.6.

Aby skonfigurować WireGuard w systemie CentOS 8, musimy zainstalować dwie paczki:

– wireguard-tools z repozytorium EPEL:

[root@security2 ~]# cat /etc/centos-release
CentOS Linux release 8.1.1911 (Core)
[root@security2 ~]# yum info wireguard-tools
Failed to set locale, defaulting to C.UTF-8
Last metadata expiration check: 0:00:47 ago on Wed Sep 30 15:44:26 2020.
Available Packages
Name         : wireguard-tools
Version      : 1.0.20200827
Release      : 1.el8
Architecture : x86_64
Size         : 123 k
Source       : wireguard-tools-1.0.20200827-1.el8.src.rpm
Repository   : epel
Summary      : Fast, modern, secure VPN tunnel
URL          : https://www.wireguard.com/
License      : GPLv2
Description  : WireGuard is a novel VPN that runs inside the Linux Kernel and uses
: state-of-the-art cryptography (the "Noise" protocol). It aims to be
: faster, simpler, leaner, and more useful than IPSec, while avoiding
: the massive headache. It intends to be considerably more performant
: than OpenVPN. WireGuard is designed as a general purpose VPN for
: running on embedded interfaces and super computers alike, fit for
: many different circumstances. It runs over UDP.
:
: This package provides the wg binary for controlling WireGuard

– kmod-wireguard z repozytorium ELRepo – moduł jądra, umożliwiający utworzenie nowego urządzenia sieciowego typu wireguard:

[root@security1 ~]# yum info kmod-wireguard
Last metadata expiration check: 0:04:04 ago on Wed Sep 30 17:56:44 2020.
Installed Packages
Name         : kmod-wireguard
Epoch        : 2
Version      : 1.0.20200908
Release      : 1.el8_2.elrepo
Architecture : x86_64
Size         : 359 k
Source       : kmod-wireguard-1.0.20200908-1.el8_2.elrepo.src.rpm
Repository   : @System
From repo    : elrepo
Summary      : wireguard kernel module(s)
URL          : https://git.zx2c4.com/wireguard-linux-compat/
License      : GPLv2
Description  : This package provides the wireguard kernel module(s).
: It is built to depend upon the specific ABI provided by a range of releases
: of the same variant of the Linux kernel and not on any one specific build.

Podczas tworzenia nowego urządzenia sieciowego typu wireguard, moduły potrzebne do poprawnego działania VPN powinny się uaktywnić automatycznie:

[root@security1 ~]# lsmod | grep wire
wireguard             229376  0
ip6_udp_tunnel         16384  1 wireguard
udp_tunnel             16384  1 wireguard

Sama konfiguracja połączenia VPN za pomocą WireGuard sprowadza się do kilku prostych kroków:

  1. wygenerowania pary kluczy – prywatnego i publicznego
  2. stworzenia specjalnego urządzenia sieciowego typu wireguard
  3. przypisania adresu IP do urządzenia sieciowego

NODE1:

[root@security1 ~]# wg genkey > private
Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.
[root@security1 ~]# chmod 0400 private
[root@security1 ~]# cat private
UhdfdsdDJGNW+qdugqAshMF52VthKo5UrVpVL3k0F3k=
[root@security1 ~]# ip a a 10.10.1.10/24 dev wg0
[root@security1 ~]# wg set wg0 private-key ./private
[root@security1 ~]# ip link set wg0 up

[root@security1 ~]# wg
interface: wg0
public key: n1r60u1DQSRfiPs+JJ215kEdSiSZhn6L03yP2Dj1EF0=
private key: (hidden)
listening port: 45967

NODE2:

[root@security2 ~]# wg genkey > private
Warning: writing to world accessible file.
Consider setting the umask to 077 and trying again.
[root@security2 ~]# chmod 0400 private
[root@security2 ~]# wg pubkey < private
Zccv/Ez8Kjs8u7zNqWICA7wQmZ1Z2FOV5HcYrmWdrCo=
[root@security2 ~]# ip link add wg0 type wireguard
[root@security2 ~]# ip address add 10.10.1.20/24 dev wg0
[root@security2 ~]# wg set wg0 private-key private
[root@security2 ~]# ip link set wg0 up
[root@security2 ~]# wg
interface: wg0
public key: ZCcv/Ez8Kjs8u7zNqWICA7wQmZ1Z2FOV5HcYrmWdrCo=
private key: (hidden)
listening port: 45726

d. sparowania połączenia z wykorzystaniem klucza publicznego

NODE1:

[root@security1 ~]# wg set wg0 peer ZCcv/Ez8Kjs8u7zNqWICA7wQmZ1Z2FOV5HcYrmWdrCo= allowed-ips 10.10.1.20/32 endpoint 192.168.10.192:45726
[root@security1 ~]# wg
interface: wg0
public key: n1r60u1DQSRfiPs+JJ215kEdSiSZhn6L03yP2Dj1EF0=
private key: (hidden)
listening port: 45967

peer: ZCcv/Ez8Kjs8u7zNqWICA7wQmZ1Z2FOV5HcYrmWdrCo=
endpoint: 192.168.10.192:45726
allowed ips: 10.10.1.20/32

NODE2:

[root@security2 ~]# wg set wg0 peer n1r60u1DQSRfiPs+JJ215kEdSiSZhn6L03yP2Dj1EF0= allowed-ips 10.10.1.10/32 endpoint 192.168.10.191:45967
[root@security2 ~]# wg
interface: wg0
public key: ZCcv/Ez8Kjs8u7zNqWICA7wQmZ1Z2FOV5HcYrmWdrCo=
private key: (hidden)
listening port: 45726

peer: n1r60u1DQSRfiPs+JJ215kEdSiSZhn6L03yP2Dj1EF0=
endpoint: 192.168.10.191:45967
allowed ips: 10.10.1.10/32

Konfiguracja naszego połączenia punkt-punkt jest już gotowa. Aby ją podejrzeć, wystarczy wydać jedno polecenie:

[root@security2 ~]# wg showconf wg0
[Interface]
ListenPort = 45726
PrivateKey = yKlgelM1I8QM2nPvQ3fqgl2gCQjiyhqZvWc/JtLDKno=

[Peer]
PublicKey = n1r60u1DQSRfiPs+JJ215kEdSiSZhn6L03yP2Dj1EF0=
AllowedIPs = 10.10.1.10/32
Endpoint = 192.168.10.191:4596

Zapisanie konfiguracji na stałe też nie jest trudne:

[root@security2 ~]# wg showconf wg0 > /etc/wireguard/wg0.conf
[root@security2 ~]# wg setconf wg0 /etc/wireguard/wg0.conf

Potrzebujesz szybkiego, bezpiecznego i stabilnego tunelu VPN? Nic prostszego.

Niezależnie czy pracujemy na sprzęcie desktopowym, czy na bardziej rozbudowanych serwerach dla biznesu, WireGuard powstał z myślą o szerokim zastosowaniu, w związku z czym oferuje dzisiaj wiele różnorodnych opcji konfiguracji, takich np. jak wspólny server VPN dla wielu klientów, obsługa zmiennego adresu IP, czy generowanie kodu QR z konfiguracją na urządzeniach mobilnych.

W konfiguracji punkt-punkt może się jeszcze przydać domyślnie wyłączona opcja persistent-keepalive, pozwalająca wysyłać co określoną ilość sekund pakiety utrzymujące połączenie
w środowiskach firewalli stanowych, bądź z NAT. Ponieważ są to puste pakiety. WireGuard nie generuje zbędnego narzutu w sieci.

[root@security1 ~]# wg set wg0 peer ZCcv/Ez8Kjs8u7zNqWICA7wQmZ1Z2FOV5HcYrmWdrCo= persistent-keepalive 25 allowed-ips 10.10.1.20/32 endpoint 192.168.10.192:45726

Chętnych do zapoznania się ze szczegółami dotyczącymi użytej kryptografii, rodzajów używanych sygnałów i parametrów jądra, a także porównania wydajności WireGuarda z innymi technologiami VPN, odsyłam do szczegółowego opracowania na stronie producenta:

https://www.wireguard.com/papers/wireguard.pdf