Du återställde säkerhetskopian, tjänsten startade och en klient anslöt på första försöket. Den framgången är fällan. En återställning ger tillbaka filerna servern hade vid ögonblicksbilden, inte åtkomsttillståndet som har ändrats sedan dess, och om den gamla slutpunkten fortfarande är nåbar har du nu två maskiner som svarar på en identitet. Lösningen är inte en bättre säkerhetskopia; den är att bestämma vad den återställda värden får vara innan den svarar på en enda handskakning.

En säkerhetskopia ger tillbaka filer, inte befogenhet

Ögonblicksbilden innehåller serverkonfigurationen, de privata nycklarna, certifikatmyndigheten, peer-listan och brandväggsreglerna som de var när säkerhetskopian kördes. Den kan inte innehålla det som ändrades efteråt: enheten du återkallade, nyckeln du återutfärdade, peeren du tog bort när en bärbar dator såldes, subnätet du flyttade. Återställning spolar tillbaka filerna till den stunden. Den spolar inte tillbaka besluten som människor har fattat sedan dess.

Skadan kommer just från denna lucka. En stulen bärbar dator som återkallades två veckor efter kopian presenterar ett certifikat som fortfarande valideras mot den äldre CRL:en i det återställda trädet, och servern accepterar en enhet du har tagit ur drift. WireGuard är mer direkt: en peer är auktoriserad genom att stå med i listan, så en peer som raderades efter ögonblicksbilden finns helt enkelt där igen. Ingen godkände den åtkomsten på nytt. Den gamla filen gjorde det.

Serveridentitet och klientidentitet misslyckas på olika sätt

På WireGuard är serverns identitet den privata nyckeln i wg0.conf, så att kopiera filen till en andra nåbar värd skapar två servrar med samma identitet och utan kännedom om varandra. Var och en håller sin egen peer-lista. Ta bort en peer på den nya värden och den gamla accepterar den fortfarande; kontrollera wg show på en och du ser halva sanningen. Klienter växlar inte heller själva: en profil bär en Endpoint, så en enhet fortsätter att tala med adressen den konfigurerades med, vilket kan vara värden du ville ta ur drift.

OpenVPN dupliceras på samma lager med ett servercertifikat, dess privata nyckel och den statiska nyckeln tls-auth eller tls-crypt. Kopiera alla tre och en klient kan inte skilja instanserna; om båda är nåbara kan en återanslutning landa på vilken som helst, och varje loggfil berättar en delvis historia. Certifikatmyndigheten är den djupare kopian. Ett återställt easy-rsa-träd är en andra sanningskälla som kan utfärda ett giltigt certifikat för vilket namn du än ger det.

Klienter dupliceras också, oftast under själva migreringen. Att kopiera en profil till en reservenhet «bara för att testa» ger en andra enhet med samma nyckel och samma common name. Med duplicate-cn kan båda sessionerna vara uppe samtidigt, och en statisk adresstilldelning i ccd eller ifconfig-pool-persist kan kollidera med den ursprungliga enheten. Det är två maskiner med en identitet, och ingenting i serverkonfigurationen skiljer dem.

Välj ett av tre tillstånd för den gamla slutpunkten

En återställning är bara säker när den gamla slutpunktens öde är avgjort. Ta den ur drift: den gamla tjänsten måste sluta acceptera VPN-porten innan den nya värden startar, och om du inte når maskinen, blockera den porten vid nätverkskanten för allt utom din administrativa källa. Reparera samma värd: att återanvända identiteten är okej eftersom en maskin håller den, men förstör sedan diskkopian eller VM-ögonblicksbilden av den gamla nyckeln så att den inte kan komma tillbaka. Bygg ett tillgänglighetspar: två värdar behöver olika värdidentiteter plus en delad slutpunkt, till exempel en flytande adress, en lastbalanserare eller DNS du kan flytta. Att kopiera den privata nyckeln är inte en failover-design; det är två servrar som gör anspråk på ett namn.

Bekräfta vilket tillstånd du faktiskt är i innan du rör klienter. Den gamla värden som svarar på VPN-porten är den som kommer att acceptera den återkallade enheten, även om DNS har flyttat. Kontrollera lyssnare och den publika nyckeln:

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

Stäm först av peers, återkallelser och adresser

Lista vad återställningen hävdar mot vad som faktiskt är auktoriserat. På WireGuard ger wg show wg0 nyckel, slutpunkt, senaste handskakning och överföringsräknare för varje peer, nog för att upptäcka en enhet du inte längre äger. Ta bort den live med wg set wg0 peer <key> remove, redigera sedan också konfigurationen, annars kommer peeren tillbaka vid nästa start. wg show wg0 allowed-ips avslöjar det andra problemet: två peers på en adress, eller en adress du redan har tilldelat om.

På OpenVPN är återkallelselistan en fil med ett datum, och en återställning kan ta tillbaka en gammal. Kontrollera den innan klienter ansluter:

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

Om den senaste uppdateringen ligger före återkallelsen hedrar servern fortfarande ett certifikat du återkallade. OpenVPN 2.4 och senare läser om CRL-filen för varje ny anslutning, så att byta ut filen stoppar nya sessioner, men etablerade tunnlar består till omförhandling; standardvärdet för reneg-sec är 3600 sekunder, och det är att sänka det eller starta om tjänsten som ger dig ändringen nu. Äldre byggen plockar kanske inte upp filen lika tillförlitligt, så starta om när du inte kan bekräfta versionens beteende. wg(8)-handboken täcker peer-borttagning och den allowed-ips-syntax som används ovan.

Rensa också statiska tilldelningar för enheter som inte finns längre. Att återanvända adressen från en pensionerad enhet för en ny medan den gamla profilen fortfarande är installerad skapar exakt den dubblett du försöker undvika.

Verifiera med en klient du återkallade

Kör kontrollerna i ordning, från ett nätverk utanför tunneln. Först ansluter en auktoriserad enhet, löser DNS via den pushade resolvern och når en privat resurs. Sedan måste den återkallade enheten misslyckas, med sin befintliga profil i stället för en ny. Prova sedan den gamla slutpunkten utifrån: om VPN-porten fortfarande fullbordar en handskakning lever den gamla värden, och dupliceringen är verklig, inte teoretisk.

Starta om den återställda värden och upprepa kontrollerna för auktoriserad och återkallad, för det är då konfigurationsfilen vinner över det du ändrade under drift. Jämför värdenens publika nyckel eller certifikatets fingeravtryck med det som den pensionerade maskinen använde. Matchande fingeravtryck på två levande maskiner betyder att återställningen klonade identiteten; matchande fingeravtryck på en maskin är okej. Anteckna de återställda versionerna, nyckelfingeravtrycken och det återkallade serienumret eller peer-nyckeln, och ta sedan nästa säkerhetskopia efter denna avstämning, så att den representerar tjänsten som den är nu. Det fungerande testet är inte att en klient ansluter. Det är att klienten du tog bort stannar ute medan den gamla slutpunkten förblir stängd.

Relaterade artiklar