Почніть із запису, який починається до першого пакета спроби, інакше ви читатимете середину розмови. Переговори, що вже тривають, показують зашифровані обміни й оновлення ключів, і ні те, ні інше не схоже на початок. Початок — це частина, яку можна декодувати без ключів, і тому вона так добре відповідає на питання доступності. Чотири перевірки по порядку ведуть вас від свіжого запису до обґрунтованого твердження про те, яка сторона перестала говорити.

По-перше, переконайтеся, що запис починається з початку

Запис, розпочатий після підняття тунелю, міститиме інкапсульований потік даних і періодичні keepalive, і обидва або зашифровані, або майже порожні. Перезапустіть клієнт і запишіть саму спробу або навмисно викличте нове з’єднання під час запису. Якщо ви не можете створити свіжу спробу, зазначте це в нотатках, бо жодне декодування не поверне початок, який ви ніколи не записали.

Обмежте запис двома кінцевими точками та UDP 500 і 4500, щоб файл залишався достатньо малим для читання. На завантаженому хості нефільтрований запис ховає переговори під стороннім трафіком.

tcpdump -i any -n -s 0 -w fresh-ike.pcap 'udp port 500 or udp port 4500'

Збережіть файл, коли спроба цікава, бо той самий запис відповідає на обидва наступні питання: чим був обмін і чи щось повернулося. Позначте його часом початку та парою кінцевих точок, за якою ви фільтрували. Запис без цих двох фактів марний через тиждень, коли адреси змінилися і ніхто не пам’ятає, яку спробу було записано.

По-друге, читайте заголовок до корисних навантажень

Заголовок IKE несе індекси параметрів безпеки, тип обміну та ідентифікатор повідомлення, і за нових переговорів ці значення є характерними. Ініціатор вигадує ненульовий SPI, початковий запит несе нульовий SPI відповідача, бо відповіді ще не видно, тип обміну — IKE_SA_INIT, а ідентифікатор повідомлення дорівнює нулю. Усе інше належить пізнішій стадії тих самих переговорів або зовсім іншій спробі.

Корисні навантаження пропозиції, обміну ключами та nonce у цьому першому обміні читаються у відкритому вигляді. Читаність не означає автентифікацію, і на цьому етапі жодна сторона не довела свою справжність.

Приватне значення Diffie-Hellman ніколи не перетинає дріт, тому запис не дозволяє вивести сеансові ключі. Автентифікація відбувається в наступному обміні, захищеному тим, про що домовився перший. Якщо хтось запитає, чи справжня сторона, цей обмін не може відповісти на таке питання. Він може лише показати, що обидві сторони погодилися на пропозицію і створили спільний секрет, якого немає у файлі.

По-третє, зіставте запит із його відповіддю

Зіставляйте за парою SPI, типом обміну та ідентифікатором повідомлення, потім перевірте прапорець відповіді. Повторне надсилання повторює ідентифікатор повідомлення оригіналу і не є другою спробою входу. Підрахунок пакетів замість обмінів — це шлях, яким здорові переговори перетворюються на фантомний цикл.

Відповідь може бути й відмовою: запит cookie, повідомлення про неприйнятну групу або помилка щодо пропозиції. Це законні відповіді, і вони означають, що шлях працює, а політика — ні. Декодуйте повідомлення, а не вважайте кожну відповідь успіхом. Коли повідомлення називає групу або пропозицію, виправлення на боці конфігурації, а не на міжмережевому екрані.

Напрямок теж важливий. Запит без відповіді й відповідь, яка ніколи не доходить до клієнта, — різні несправності, і лише друга виглядає як тайм-аут на боці клієнта.

По-четверте, відокремте IKE від усього іншого на 4500

Порт 4500 несе три речі, які у зведеному вигляді виглядають однаково: IKE за чотирибайтовим нульовим маркером non-ESP, інкапсульований ESP, у позиції маркера якого стоїть ненульовий SPI, і короткі keepalive. Саме маркер відокремлює IKE від інкапсульованого ESP, тому прочитайте ці байти, перш ніж називати трафік IKE. Мітка запису, що читає 4500, — це номер порту, а не протокол.

Інкапсульований ESP — це зашифроване навантаження, яке не можна витлумачити без ключів, і його присутність може бути ознакою робочого тунелю, а не несправності.

Спостерігайте обидва порти для тієї самої спроби, бо IKE може перейти на 4500 після виявлення NAT, хоча відкрився на 500. Слід, відфільтрований лише за 500, виглядає тихим саме тоді, коли переговори вдалися й перемістилися. Розширте фільтр і перечитайте те саме часове вікно, перш ніж робити будь-який висновок із відсутності.

Що означає тиша в одній точці спостереження

Відсутність відповіді в клієнта доводить лише те, що спостерігала ця точка. Фільтрація, маршрутизація, неправильна віддалена адреса, зупинена служба й невідповідність протоколу дають той самий порожній слід.

Доречний ICMP unreachable додає доказ, але прочитайте процитований у ньому пакет і запишіть адресу пристрою, який його надіслав.

Відмова маршрутизатора — це інша подія, ніж автентифікована помилка, яку повертає сторона, і лише друга доводить, що служба жива. Зіставте ту саму спробу із серверними журналами або зі схваленим спостереженням, щоб дізнатися, чи надійшов запит і чи вийшла відповідь. Тримайте записи обмеженими й приватними, бо читабельні поля рукостискання не роблять решту файлу безпечною. Результат, який варто мати, — це одна зіставлена пара запиту й відповіді або одна задокументована прогалина з названою точкою спостереження.

Схожі статті