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 upgradeKrok 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-propertiesPo 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/wireguardPotwierdzamy przyjęcie klucza GPG przyciskiem ENTER.
Teraz musimy ponownie zaktualizować repozytoria przy pomocy:
sudo apt-get updateKrok 4
Repozytoria dodane, teraz instalujemy ową aplikację.
sudo apt-get install wireguard-dkms wireguard-toolsPodczas 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 > publickeyPo wygenerowaniu odczytaj klucze przy pomocy:
sudo cat privatekey
sudo cat publickeyZapisz 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.confDo 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/32Wyjaśniam:
KLUCZ PRYWATNY #1to kluczprivatekeyz VPSa nr 1.KLUCZ PUBLICZNY #2to kluczpublickeyz 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.confDo 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 = 25Wyjaśniam:
KLUCZ PRYWATNY #2to kluczprivatekeyz VPSa nr 2.KLUCZ PUBLICZNY #1to kluczpublickeyz 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@wg0Wykonaj 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@wg0Idziemy 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

Ping: klient WG do serwer WG

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.cnfEdytujemy 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.1na podaną niżej:
bind-address = 192.168.2.1Klikamy przycisk ESC i wpisujemy :wq.
Teraz przeładujemy serwer MariaDB przy pomocy:
sudo service mysql restartOd 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ć ;)