Як вивести VPN-сервер з експлуатації, не залишивши доступу
Рухайтеся від клієнтського застосунку назовні: відкличте ключі й облікові записи, закрийте прослуховувач, а потім доведіть, що жоден профіль, запис DNS чи резервна копія вже не може до нього дістатися.
Ваш клієнт усе ще підключається того дня, коли відкривається заявка на виведення. Профіль лежить у застосунку, він узгоджує з’єднання, і тунель піднімається так, ніби нічого не змінилося. Це саме той момент, коли треба працювати в зворотному напрямку від того, як ви будували сервіс: почніть зі списку клієнтів, ідіть назовні до прослуховувача, потім до міжмережевого екрана і закінчіть обліковими даними, які переживуть усе це. Вимкнення віртуальної машини — останній крок, а не перший. Цей посібник припускає, що ви маєте доступ до консолі хоста й повноваження редагувати записи клієнтів і DNS.
Спершу пройдіть список клієнтів
Відкрийте все, що роздає ваші профілі, і прочитайте список, перш ніж торкатися сервера. Кожен запис — це пристрій, який вважає, що має доступ: телефони, ноутбуки, маршрутизатор філії, контейнер, що синхронізується щоночі. Експортуйте цей список у заявку, бо коли хост зникне, не буде wg show, який скаже, хто був підключений.
Розсортуйте кожен пристрій у категорії: заміна, більше не потрібен або невідомий. Важлива саме категорія невідомих, бо це ті профілі, які хтось знайде в шухляді за кілька місяців і спробує. Надішліть повідомлення тим самим каналом, який ви використовуєте для запитів на доступ, і впишіть у нього дату, коли старий адрес перестане відповідати.
Відкличте ідентичність, а не лише файл
Дві різні дії обидві називають відкликанням. У WireGuard peer авторизується лише тим, що його публічний ключ з’являється в секції peer із записом AllowedIPs, тож видалення конфігураційного файлу з ноутбука нічого не змінює на сервері. Видаліть блок peer і застосуйте файл повторно, не відкидаючи тих peer, яких ви зберігаєте, якwg(8) описує:
wg show
wg set wg0 peer <CLIENT_PUBLIC_KEY> remove
wg syncconf wg0 <(wg-quick strip wg0)wg syncconf — це та частина, яка економить вам вікно обслуговування. Він перебудовує інтерфейс із файлу на місці, тож видалення одного peer не рве тунель, яким користуються всі інші. Якщо ви виводите з експлуатації весь хост, а не один peer, порядок усе ще важливий, бо ці ключі можуть бути довіреними деінде.
За схеми X.509 кроком відкликання є сертифікат, а не файл: openssl ca -revoke client.crt, а потім openssl ca -gencrl -out crl.pem. Це діє лише там, де верифікатор це читає, що означаєOpenVPN сервер із налаштованим crl-verify і перезавантажений після цього. Якщо цей шлюз — єдиний споживач того CA, CRL перестає мати значення того дня, коли він помирає; якщо той самий CA підписує для другого шлюзу, сертифікат, який ви ніколи не відкликали, там далі працює.
Облікові записи — це третій випадок і той, який найчастіше пропускають. Коли шлюз автентифікувався через RADIUS, LDAP або зовнішнього постачальника ідентифікації, запис живе поза VPN. Вимкніть його в каталозі. Видалення секції користувача на сервері залишає чинні облікові дані, які запасна точка підключення прийме тієї миті, коли вкаже на той самий каталог.
Закрийте слухачів і шляхи до них
Зупиніть службу так, щоб це пережило перезавантаження, а потім підтвердьте списком сокетів, а не станом unit-а. systemctl disable --now wg-quick@wg0 зупиняє інтерфейс і видаляє маршрути та правила, додані wg-quick; systemctl disable --now openvpn-server@server робить те саме для шаблонного екземпляра OpenVPN. Після кожного з них виконайте ss -lunp і ss -ltnp. Порожній результат для старого порту — єдиний доказ, який рахується.
Що додав wg-quick, те wg-quick і видаляє. Що ви додали руками, залишається: постійне правило NAT, дозвіл у міжмережевому екрані, проброс порту на маршрутизаторі, правило ingress в хмарній групі безпеки, слухач балансувальника. Усе це потребує явного видалення, як і запис DNS, тобто A, AAAA і будь-який CNAME, що вказує на ім’я. Ім’я, яке розв’язується в мертвий хост, відмовляє інакше, ніж ім’я, яке не розв’язується взагалі, і ця різниця коштуватиме комусь пообіддя.
Копія, яку ви забули, — це клон. Знімок або віртуальна машина, відновлена з резервної копії, усе ще тримає ключі хоста й старий список peer, і якщо щось поверне її на ту саму адресу, клієнти знову підключаться до сервісу, який ви вважаєте виведеним. Позначте набір резервних копій як такий, що належить виведеному сервісу, і тримайте його поза шляхами автоматичного відновлення.
Женіться за тим, що ще вказує на стару адресу
Кешовані профілі переживають DNS. Збережена конфігурація з числовою адресою далі набирає після того, як запис зник, а постійно ввімкнений клієнт повторює спробу за кожної зміни мережі. Це шум, а не доступ, бо слухач закритий, але знання того, на що саме ви дивитеся, визначає, як ви відповісте на заявку.
Потім прочісніть залежності, які ніхто не відносить до VPN: перевірки uptime, що мацають порт, завдання резервного копіювання, які тягли конфігурації з хоста, облікові дані автоматизації, якими заливали записи peer, облікові записи відновлення, створені лише для цієї адреси. Кожна з них — шлях доступу з власним строком життя і власним власником, тож кожна отримує рішення замість тихого видалення.
Перевірте, а потім запишіть
Виведення завершене, коли перевірка ззовні відмовляє так, як ви очікуєте. З мережі, яку ви не контролюєте, підключіться до старої адреси й порту. Відфільтрований або відхилений результат — це успіх. У клієнтському застосунку переконайтеся, що профіль видалено, а не вимкнено, і що жоден керівний профіль тихо не додає його назад.
Потім запишіть, що ви зробили: адреса, дата, відкликані ключі й сертифікати, вимкнені облікові записи, де лежать резервні копії. Той, хто наступним знайде стару конфігурацію, має відповісти, чи її відкликано, чи лише видалено, без здогадів, а коротка таблиця в заявці це забезпечує.
Перед закриттям заявки:
- клієнтські профілі видалено або замінено, невідомі пристрої з’ясовано
- peer видалено й конфігурацію застосовано повторно, або сертифікати відкликано й CRL опубліковано
- облікові записи в каталозі вимкнено, а не лише локальні файли видалено
- службу вимкнено, на старому порту не залишилося слухача
- міжмережевий екран, проброс порту, групу безпеки й записи DNS видалено
- резервні копії позначено, знімок виключено зі шляхів відновлення
- облікові дані моніторингу й автоматизації виведено
Перевірте заміну окремо, від клієнта, який ніколи не мав старого профілю. Ця єдина перевірка скаже, чи ви вивели сервіс, чи лише перейменували проблему.