Przywróciłeś kopię zapasową, usługa wystartowała, a klient połączył się za pierwszym razem. Ten sukces jest pułapką. Przywrócenie zwraca pliki, które serwer miał w chwili migawki, a nie stan dostępu, który zmienił się od tego czasu, i jeśli stary punkt końcowy jest nadal osiągalny, masz teraz dwie maszyny odpowiadające na jedną tożsamość. Rozwiązaniem nie jest lepsza kopia zapasowa; rozwiązaniem jest zdecydowanie, czym przywrócony host może być, zanim odpowie na choćby jeden uścisk dłoni.

Kopia zapasowa zwraca pliki, nie uprawnienia

Migawka zawiera konfigurację serwera, klucze prywatne, urząd certyfikacji, listę peerów i reguły zapory w stanie z chwili tworzenia kopii. Nie może zawierać tego, co zmieniło się później: urządzenia, które odwołałeś, klucza, który wydałeś ponownie, peera, którego usunąłeś przy sprzedaży laptopa, podsieci, którą przeniosłeś. Przywrócenie cofa pliki do tamtej chwili. Nie cofa decyzji, które ludzie podjęli od tamtej pory.

Szkoda bierze się właśnie z tej luki. Skradziony laptop odwołany dwa tygodnie po kopii przedstawia certyfikat, który nadal waliduje się wobec starszego CRL w przywróconym drzewie, i serwer akceptuje urządzenie, które wycofałeś z eksploatacji. WireGuard jest bardziej bezpośredni: peer jest autoryzowany przez samo wpisanie na listę, więc peer usunięty po migawce po prostu znów jest obecny. Nikt nie zatwierdził tego dostępu ponownie. Zrobił to stary plik.

Tożsamość serwera i tożsamość klienta zawodzą na różne sposoby

W WireGuardzie tożsamością serwera jest klucz prywatny w wg0.conf, więc skopiowanie tego pliku na drugi osiągalny host tworzy dwa serwery o tej samej tożsamości, które nic o sobie nie wiedzą. Każdy trzyma własną listę peerów. Usuń peera na nowym hoście, a stary nadal go akceptuje; sprawdź wg show na jednym i widzisz połowę prawdy. Klienci też nie przełączają się sami: profil niesie jeden Endpoint, więc urządzenie nadal rozmawia z adresem, z którym zostało skonfigurowane, a to może być host, który chciałeś wycofać.

OpenVPN dubluje się w tej samej warstwie za pomocą certyfikatu serwera, jego klucza prywatnego i klucza statycznego tls-auth lub tls-crypt. Skopiuj wszystkie trzy, a klient nie odróżni instancji; jeśli oba są osiągalne, ponowne połączenie może trafić na którykolwiek, a każdy plik dziennika opowiada połowę historii. Urząd certyfikacji jest głębszą kopią. Przywrócone drzewo easy-rsa to drugie źródło prawdy, które może wydać ważny certyfikat dla dowolnej podanej mu nazwy.

Klienci też się dublują, zwykle podczas samej migracji. Skopiowanie profilu na zapasowe urządzenie „tylko do testu” tworzy drugie urządzenie z tym samym kluczem i tą samą nazwą wspólną. Dzięki duplicate-cn obie sesje mogą być aktywne naraz, a statyczne przypisanie adresu w ccd lub ifconfig-pool-persist może kolidować z pierwotnym urządzeniem. To dwie maszyny z jedną tożsamością i nic w konfiguracji serwera ich nie rozróżnia.

Wybierz jeden z trzech stanów dla starego punktu końcowego

Przywrócenie jest bezpieczne tylko wtedy, gdy los starego punktu końcowego jest rozstrzygnięty. Wycofaj go: stara usługa musi przestać przyjmować port VPN, zanim nowy host wystartuje, a jeśli nie możesz dosięgnąć maszyny, zablokuj ten port na krawędzi sieci dla wszystkiego poza twoim źródłem administracyjnym. Napraw ten sam host: ponowne użycie tożsamości jest w porządku, bo trzyma ją jedna maszyna, ale potem zniszcz kopię na dysku lub migawkę VM starego klucza, żeby nie mógł wrócić. Zbuduj parę dostępnościową: dwa hosty potrzebują odrębnych tożsamości hostów plus jednego wspólnego punktu końcowego, na przykład adresu pływającego, balansera obciążenia lub przenośnego DNS. Kopiowanie klucza prywatnego nie jest projektem failover; to dwa serwery roszczące sobie prawo do jednej nazwy.

Przed dotknięciem klientów potwierdź, w jakim stanie naprawdę jesteś. Stary host odpowiadający na porcie VPN to ten, który przyjmie odwołane urządzenie, nawet jeśli DNS się przeniósł. Sprawdź nasłuchy i klucz publiczny:

ss -lunp | grep -E ':51820|:1194'
wg show wg0
wg pubkey < /etc/wireguard/server.key

Najpierw uzgodnij peery, odwołania i adresy

Wypisz, co twierdzi przywrócenie, wobec tego, co jest obecnie autoryzowane. W WireGuardzie wg show wg0 podaje klucz, punkt końcowy, ostatni uścisk dłoni i liczniki transferu każdego peera, co wystarcza, by zauważyć urządzenie, którego już nie posiadasz. Usuń je na żywo poleceniem wg set wg0 peer <key> remove, a potem edytuj też konfigurację, inaczej peer wróci przy następnym starcie. wg show wg0 allowed-ips ujawnia drugi problem: dwóch peerów na jednym adresie albo adres, który już przydzieliłeś ponownie.

W OpenVPN lista odwołań to plik z datą, a przywrócenie może przynieść starą. Sprawdź ją, zanim klienci się połączą:

openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
grep -E 'crl-verify|reneg-sec' /etc/openvpn/server.conf

Jeśli ostatnia aktualizacja poprzedza odwołanie, serwer nadal honoruje certyfikat, który odwołałeś. OpenVPN 2.4 i nowsze ponownie czytają plik CRL przy każdym nowym połączeniu, więc podmiana pliku zatrzymuje nowe sesje, ale ustanowione tunele trwają do renegocjacji; domyślna wartość reneg-sec to 3600 sekund, i to właśnie jej obniżenie lub restart usługi daje zmianę od razu. Starsze wersje mogą nie wczytywać pliku tak niezawodnie, więc zrestartuj, gdy nie możesz potwierdzić zachowania wersji. Podręcznik wg(8) opisuje usuwanie peera i składnię allowed-ips użytą powyżej.

Wyczyść też statyczne przypisania urządzeń, których już nie ma. Ponowne użycie adresu wycofanego urządzenia dla nowego, gdy stary profil jest jeszcze zainstalowany, tworzy dokładnie ten duplikat, którego próbujesz uniknąć.

Zweryfikuj klientem, którego odwołałeś

Wykonaj kontrole po kolei, z sieci poza tunelem. Najpierw autoryzowane urządzenie łączy się, rozwiązuje DNS przez wypchnięty resolver i dociera do prywatnego zasobu. Potem odwołane urządzenie musi zawieść, używając swojego istniejącego profilu, a nie nowego. Następnie spróbuj starego punktu końcowego z zewnątrz: jeśli port VPN nadal kończy uścisk dłoni, stary host żyje, a duplikacja jest realna, nie teoretyczna.

Zrestartuj przywrócony host i powtórz kontrole autoryzowanego i odwołanego, bo wtedy plik konfiguracyjny wygrywa z tym, co zmieniłeś w czasie działania. Porównaj klucz publiczny lub odcisk certyfikatu hosta z tym, którego używała wycofana maszyna. Zgodne odciski na dwóch żywych maszynach oznaczają, że przywrócenie sklonowało tożsamość; zgodne odciski na jednej maszynie są w porządku. Zapisz przywrócone wersje, odciski kluczy i odwołany numer seryjny lub klucz peera, a potem zrób następną kopię zapasową po tym uzgodnieniu, żeby przedstawiała usługę taką, jaka jest teraz. Działający test to nie to, że klient się łączy. To, że usunięty klient zostaje na zewnątrz, podczas gdy stary punkt końcowy pozostaje zamknięty.

Powiązane artykuły