Użycie WireGuard do zabezpieczenia ruchu MySQL (i nie tylko) pomiędzy 2 VPS KVM

Poradniki
vps, mysql, vpn
DBanaszewski
DBanaszewski α-tester v3

Użycie WireGuard do zabezpieczenia ruchu MySQL (i nie tylko) pomiędzy 2 VPS KVM

WireGuard to aplikacja open-source, który implementuje techniki wirtualnej sieci prywatnej (VPN) w celu tworzenia bezpiecznych połączeń typu point to point (nie mylić z peer to peer) w różnych konfiguracjach.

Poradnik został wykonany na VPS KVM z Ubuntu 16.04. Aby móc z tego korzystać musisz posiadać MINIMUM 2 VPSy KVM.

Przed rozpoczęciem instalacji

Zakładam, że posiadasz już skonfigurowany serwer MySQL (lub pochodny - np. MariaDB). Jeżeli chcesz używać WireGuard do zabezpieczenia ruchu innej aplikacji - postępuj zgodnie z poniższą instrukcją, ale zamiast konfigurowania serwera MySQL, skonfiguruj swoją aplikację.

Przed każdą komendą jest sudo. Jeżeli wszystkie komendy wykonujesz z konta root (co jest niezalecane), możesz ignorować ten prefix.


Krok 1

Przydałoby się zaktualizować system i pakiety, więc…

sudo apt-get update
sudo apt-get upgrade

Krok 2

Przydałyby się pewne komendy, które ułatwią nam pracę.
Wpisz komendę sudo add-apt-repository.
Jeżeli otrzymasz ten wynik: sudo: add-apt-repository: command not found przejdź do kroku 2.1.
Jeżeli otrzymasz ten wynik: Error: need a repository as argument przejdź do kroku 3.

Krok 2.1

Nie posiadasz komend, które ułatwią Ci pracę oraz umożliwią instalację wymaganych paczek.
Aby zainstalować to ułatwienie, wpisz:

sudo apt-get install software-properties-common python-software-properties

Po instalacji wróć do kroku 2.

Krok 3

Posiadasz ułatwienie, które nam pomoże pracować.
Możemy przejść do instalacji. Najpierw musimy dodać repozytoria WireGuard, czyli:

sudo add-apt-repository ppa:wireguard/wireguard

Potwierdzamy przyjęcie klucza GPG przyciskiem ENTER.

Teraz musimy ponownie zaktualizować repozytoria przy pomocy:

sudo apt-get update

Krok 4

Repozytoria dodane, teraz instalujemy ową aplikację.

sudo apt-get install wireguard-dkms wireguard-tools

Podczas instalacji musimy potwierdzić chęć instalacji podając Y lub T (w zależności od języka na VPSie).

Po zainstalowaniu przechodzimy dalej.

Krok 5

Serwer WireGuard został zainstalowany. Przechodzimy do folderu owej aplikacji:

sudo -i
cd /etc/wireguard/

Owa aplikacja używa specjalnych kluczy do szyfrowania połączenia, więc musimy takowy wygenerować. Wszystkie oba klucze generujemy przy pomocy:

umask 077
wg genkey | tee privatekey | wg pubkey > publickey

Po wygenerowaniu odczytaj klucze przy pomocy:

sudo cat privatekey
sudo cat publickey

Zapisz je w notatniku! Przydadzą się za kilka chwil.

Idziemy dalej.

Krok 6

Tutaj potrzebujesz drugiego VPSa. Na VPSie nr 2 wykonaj wszystkie kroki od 1 do 5. Mam nadzieję, że zapisałeś/aś sobie klucze z VPS #1 i #2. Będą bardzo potrzebne. Teraz edytujemy konfigurację na serwerze nr 1. Ja użyję do tego vim. Uruchamiamy edytor (musisz być w folderze aplikacji):

sudo vim wg0.conf

Do tego pliku dodajemy następującą treść:

[Interface]
Address = 192.168.2.1
PrivateKey = KLUCZ PRYWATNY #1
ListenPort = 5555


[Peer]
PublicKey = KLUCZ PUBLICZNY #2
AllowedIPs = 192.168.2.2/32

Wyjaśniam:

  • KLUCZ PRYWATNY #1 to klucz privatekey z VPSa nr 1.
  • KLUCZ PUBLICZNY #2 to klucz publickey z VPSa nr 2.

Po uzupełnieniu kluczy, klikamy przycisk ESC i wpisujemy :wq. Konfiguracja na serwerze nr 1 została zapisana.

Teraz edytujemy konfigurację na serwerze nr 2. Uruchamiamy edytor (musisz być w folderze aplikacji): text

sudo vim wg0.conf

Do tego pliku dodajemy następującą treść:

[Interface]
Address = 192.168.2.2
PrivateKey = KLUCZ PRYWATNY #2
ListenPort = 5555

[Peer]
PublicKey = KLUCZ PUBLICZNY #1
Endpoint = ADRES IP SERWERA NR 1:5555
AllowedIPs = 192.168.2.1/24
PersistentKeepalive = 25

Wyjaśniam:

  • KLUCZ PRYWATNY #2 to klucz privatekey z VPSa nr 2.
  • KLUCZ PUBLICZNY #1 to klucz publickey z VPSa nr 1.

Po uzupełnieniu kluczy, klikamy przycisk ESC i wpisujemy :wq. Konfiguracja na serwerze nr 2 została zapisana.

Idziemy dalej.

Krok 7

Teraz możemy uruchomić naszego WireGuard'a. Zrobimy to przy pomocy:

sudo systemctl start wg-quick@wg0

Wykonaj tę komendę na serwerze nr 1 i 2. Ta komenda uruchamia naszego VPNa jednorazowo. Aby aplikacja uruchamiała się razem z systemem musimy wpisać:

sudo systemctl enable wg-quick@wg0

Idziemy dalej!

Krok 8

Teraz możemy przetestować, czy istnieje połączenie pomiędzy VPSami. Możemy to sprawdzić pingując adresy IP z VPSów. U mnie to tak wygląda:

Ping: serwer WG do klient WG
obraz1

Ping: klient WG do serwer WG
obraz2

Widzimy, że połączenie istnieje. To sukces!

Krok 9

Skoro mamy już połączenie, przydałoby się skonfigurować bazę MySQL.

Ja osobiście używam MariaDB. Aby skonfigurować serwer MariaDB musimy edytować plik konfiguracyjny przy pomocy:

sudo vim /etc/mysql/mariadb.conf.d/50-server.cnf

Edytujemy linijkę (nie musi być ona taka sama, zamiast 127.0.0.1 może być 0.0.0.0 lub linijka będzie komentarzem):

bind-address = 127.0.0.1

na podaną niżej:

bind-address = 192.168.2.1

Klikamy przycisk ESC i wpisujemy :wq. Teraz przeładujemy serwer MariaDB przy pomocy:

sudo service mysql restart

Od teraz nasza baza danych jest dostępna tylko poprzez WireGuard - mamy pewność, że nikt z zewnątrz nie będzie mógł się połączyć z bazą itp.

MySQL na VPSie #1, phpMyAdmin na VPSie #2 - działa? Działa i jest bezpiecznie :slight_smile:

Gotowe 😄

PS. Moje oko już nie widzi błędów, ale przejrzyj poradnik i daj znać ;)

Back
Back

Kiedy włączyłem klienta to wywaliło mnie z putty. Co zrobić abym mógł połączyć przez putty?

Kicpro
Kicpro

Jak mógłbym teraz dodać w dockerze IP tego 2 vps'a?

Glenor
Glenor

Mogę połączyć tak 3 serwery? Czy tylko dwa?