Як відновити VPN-сервер, не дублюючи ідентичності
Відновлений VPN-сервер повертає файли, а не поточний доступ. Узгодьте відкликання, ключі партнерів і кінцеві точки, перш ніж друга копія відповість на рукостискання.
Ви відновили резервну копію, служба запустилася, і клієнт підключився з першої спроби. Цей успіх і є пастка. Відновлення повертає файли, які були в сервера на момент знімка, а не стан доступу, що змінився відтоді, і якщо стара кінцева точка все ще доступна, тепер у вас дві машини, що відповідають одній ідентичності. Рішення не в кращій резервній копії; рішення в тому, щоб визначити, чим може бути відновлений хост, перш ніж він відповість хоч на одне рукостискання.
Резервна копія повертає файли, а не повноваження
Знімок містить конфігурацію сервера, приватні ключі, центр сертифікації, список партнерів і правила брандмауера такими, якими вони були під час запуску копії. Він не може містити те, що змінилося пізніше: пристрій, який ви відкликали, ключ, який ви перевидали, партнера, якого видалили під час продажу ноутбука, підмережу, яку перенесли. Відновлення відкочує файли до того моменту. Воно не відкочує рішення, які люди ухвалили після.
Шкода походить саме з цього розриву. Викрадений ноутбук, відкликаний через два тижні після копії, пред'являє сертифікат, який ще перевіряється за старішим CRL у відновленому дереві, і сервер приймає пристрій, який ви вивели з експлуатації. WireGuard прямолінійніший: партнер авторизується самим фактом наявності в списку, тому партнер, видалений після знімка, просто знову присутній. Ніхто не схвалював цей доступ заново. Це зробив старий файл.
Ідентичність сервера і ідентичність клієнта зазнають невдачі по-різному
У WireGuard ідентичність сервера — це приватний ключ у wg0.conf, тому копіювання цього файлу на другий доступний хост створює два сервери з однією ідентичністю, які нічого не знають одне про одного. Кожен тримає свій список партнерів. Видаліть партнера на новому хості, і старий усе ще його приймає; перевірте wg show на одному і побачите половину правди. Клієнти теж не перемикаються самі: профіль несе один Endpoint, тому пристрій продовжує говорити з адресою, на яку був налаштований, а це може бути хост, який ви хотіли вивести з експлуатації.
OpenVPN дублюється на тому ж рівні сертифікатом сервера, його приватним ключем і статичним ключем tls-auth або tls-crypt. Скопіюйте всі три, і клієнт не відрізнить екземпляри; якщо обидва доступні, перепідключення може потрапити на будь-який, і кожен журнал розповідає лише частину історії. Центр сертифікації — глибша копія. Відновлене дерево easy-rsa — друге джерело істини, яке може видати дійсний сертифікат на будь-яке ім'я, яке ви йому дасте.
Клієнти теж дублюються, зазвичай під час самої міграції. Копіювання профілю на запасний пристрій «просто щоб перевірити» створює другий пристрій з тим самим ключем і спільним ім'ям. З duplicate-cn обидві сесії можуть залишатися активними одночасно, а статичне призначення адреси в ccd або ifconfig-pool-persist може зіткнутися з оригінальним пристроєм. Це дві машини з однією ідентичністю, і ніщо в конфігурації сервера їх не розрізняє.
Виберіть один із трьох станів для старої кінцевої точки
Відновлення безпечне лише тоді, коли долю старої кінцевої точки вирішено. Виведіть її з експлуатації: стара служба має перестати приймати порт VPN до запуску нового хоста, а якщо до машини не дістатися, заблокуйте цей порт на межі мережі для всього, крім вашого адміністративного джерела. Відремонтуйте той самий хост: повторне використання ідентичності припустиме, бо її тримає одна машина, але потім знищте дискову копію або знімок віртуальної машини старого ключа, щоб він не міг повернутися. Побудуйте пару доступності: двом хостам потрібні окремі ідентичності хостів плюс одна спільна кінцева точка, наприклад плаваюча адреса, балансувальник навантаження або DNS, який ви можете перемістити. Копіювання приватного ключа — не проєкт відмовостійкості; це два сервери, що претендують на одне ім'я.
Перш ніж торкатися клієнтів, підтвердьте, у якому стані ви насправді перебуваєте. Старий хост, що відповідає на порту VPN, — це той, хто прийме відкликаний пристрій, навіть якщо DNS переїхав. Перевірте слухачів і відкритий ключ:
ss -lunp | grep -E ':51820|:1194'
wg show wg0
wg pubkey < /etc/wireguard/server.key
Спочатку узгодьте партнерів, відкликання та адреси
Перелічіть, що стверджує відновлення, проти того, що зараз авторизовано. У WireGuard wg show wg0 дає ключ, кінцеву точку, останнє рукостискання і лічильники передавання кожного партнера, чого достатньо, щоб помітити пристрій, яким ви більше не володієте. Видаліть його наживо командою wg set wg0 peer <key> remove, потім відредагуйте й конфігурацію, інакше партнер повернеться під час наступного запуску. wg show wg0 allowed-ips викриває другу проблему: два партнери на одній адресі або адреса, яку ви вже перепризначили.
У OpenVPN список відкликання — це файл із датою, і відновлення може повернути старий. Перевірте його до підключення клієнтів:
openssl crl -in /etc/openvpn/crl.pem -noout -lastupdate -nextupdate
grep -E 'crl-verify|reneg-sec' /etc/openvpn/server.conf
Якщо останнє оновлення передує відкликанню, сервер досі шанує сертифікат, який ви відкликали. OpenVPN 2.4 і новіші перечитують файл CRL для кожного нового з'єднання, тому заміна файлу зупиняє нові сесії, але встановлені тунелі тривають до переговорів; типове значення reneg-sec — 3600 секунд, і саме його зниження або перезапуск служби дає вам зміну одразу. Старіші збірки можуть не читати файл так надійно, тому перезапускайте, коли не можете підтвердити поведінку версії. Посібник wg(8) описує видалення партнера і синтаксис allowed-ips, використані вище.
Очистіть і статичні призначення для пристроїв, яких більше немає. Повторне використання адреси виведеного пристрою для нового, поки старий профіль ще встановлено, створює саме той дублікат, якого ви намагаєтеся уникнути.
Перевірте з клієнтом, який ви відкликали
Виконайте перевірки по черзі, з мережі поза тунелем. Спершу авторизований пристрій підключається, розв'язує DNS через просунутий резолвер і досягає приватного ресурсу. Далі відкликаний пристрій має зазнати невдачі, використовуючи свій наявний профіль, а не новий. Потім спробуйте стару кінцеву точку ззовні: якщо порт VPN усе ще завершує рукостискання, старий хост живий, і дублювання реальне, а не теоретичне.
Перезавантажте відновлений хост і повторіть перевірки авторизованого й відкликаного, бо саме тоді файл конфігурації перемагає те, що ви змінили під час роботи. Порівняйте відкритий ключ або відбиток сертифіката хоста з тим, який використовувала виведена машина. Збіжні відбитки на двох живих машинах означають, що відновлення клонувало ідентичність; збіжні відбитки на одній машині — це нормально. Запишіть відновлені версії, відбитки ключів і відкликаний серійний номер або ключ партнера, потім зробіть наступну резервну копію після цього узгодження, щоб вона відображала службу такою, якою вона є зараз. Робоча перевірка — не те, що клієнт підключається. А те, що видалений клієнт залишається зовні, поки стара кінцева точка залишається закритою.