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 kluczprivatekey
z VPSa nr 1.KLUCZ PUBLICZNY #2
to kluczpublickey
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 kluczprivatekey
z VPSa nr 2.KLUCZ PUBLICZNY #1
to kluczpublickey
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
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.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ć ;)