IKEv2 — гэта не адзін руцін: спачатку IKE SA, потым аўтэнтыфікацыя, потым CHILD SA
Адказ шлюза даказвае дасяжнасць, а не асобу. Прасачыце IKE_SA_INIT, IKE_AUTH і першую CHILD SA, затым праверце, што павінна быць праўдай перад рухам трафіку.
Магчыма, вы думаеце, што злучэнне IKEv2 — гэта адзін абмен, які заканчваецца шыфраваннем вашага трафіку. Насамрэч іх як мінімум два, і першы нікога не аўтэнтыфікуе. Бакі пачынаюць з кіравальных паведамленняў, дамаўляюцца пра крыптаграфічныя параметры, даказваюць асобу і толькі потым узгадняюць стан, які пераносіць пакеты праграм. Гэты парадак тлумачыць неадпаведнасць, пра якую людзі пастаянна паведамляюць: шлюз адказвае, кліент кажа, што падключаны, а прыватная праграма ўсё роўна сканчаецца тайм-аўтам. Вось што насамрэч робіць кожны этап і што павінна быць праўдай пасля яго.
Міф: калі шлюз адказвае, вы падключаны
Адказ на першае паведамленне даказвае, што канцавы пункт дасяжны і гатовы да размовы. Ён не даказвае, што ўліковы запіс прыняты, што ланцуг сертыфікатаў правераны або што ўсталявана палітыка даных.
Гэтыя збоі адбываюцца пазней і даюць розныя сімптомы. Адмова сертыфіката або збой EAP прыходзіць пасля таго, як першы абмен ужо ўдаўся, таму ping на UDP 500 і зялёная іконка кліента гавораць так мала.
IKE_SA_INIT: дамова пра параметры, а не пра асобу
Першы абмен нясе прапановы для асацыяцыі бяспекі IKE: алгарытмы шыфравання і цэласнасці, псеўдавыпадковую функцыю і групу Diffie-Hellman. Бакі таксама абменьваюцца nonce, і кожны бок выводзіць ключавы матэрыял для IKE SA з агульнага сакрэту, які ствараюць гэтыя значэнні. Нішто ў гэтым абмене не ўстанаўлівае, хто другі бок. Ён устанаўлівае, што абодва бакі могуць вылічыць аднолькавыя ключы і што яны згодныя з прапановай. Адказвальнік, якому не падабаецца ні адна прапанова, адхіляе абмен тут, таму неадпаведнасць версіі або алгарытму выглядае як няспраўны сервер.
IKE SA, створаная ў гэты момант, абараняе ўсе наступныя кіравальныя абмены. Гэта яе задача, і гэта іншая задача, чым абарона вашых пакетаў.
IKE_AUTH: даказаць асобу, потым пабудаваць першую CHILD SA
Другі абмен нясе асобу. З сертыфікатамі кожны бок падпісвае сваім прыватным ключом і прад'яўляе ланцуг, які іншы бок павінен праверыць; з EAP адказвальнік кідае выклік ініцыятару праз абраны метад. Менавіта тут нарэшце ўсплывае няправільнае імя сервера, пратэрмінаваны сертыфікат або адхілены пароль.
У звычайным выпадку IKE_AUTH таксама ўзгадняе першую CHILD SA, таму ахова даных дамаўляецца за той жа круг. Ініцыятар прапануе селектары трафіку, адказвальнік звужае або адхіляе іх, а ключы для шляху даных выводзяцца з IKE SA. Гэта значыць, што адзін абмен можа праваліцца ў двух вельмі розных месцах: асоба або палітыка. Чытайце карысную нагрузку notify або памылку замест агульнага збою руціна, бо выпраўленне першага — сертыфікат, а выпраўленне другога — неадпаведнасць падсеткі.
Дзве SA, дзве задачы
| Association | Protects | Lifetime behaviour |
|---|---|---|
| IKE SA | Management exchanges: rekeying, delete, configuration payloads | Rekeyed on its own schedule; the data path can survive the change |
| CHILD SA | Application traffic matching the traffic selectors | Rekeyed independently, often more frequently |
Раздзяленне іх тлумачыць дзве паводзіны, якія выглядаюць як памылкі. Тунель можа паказвацца ўсталяваным, пакуль у фоне збоіць перазамкненне ключоў, а CHILD SA можна замяніць без страты злучэння кліентам.
На strongSwan даведнік па канфігурацыі IKEv2 і swanctl --list-sas паказваюць абодва ўзроўні, а ip xfrm state разам з ip xfrm policy паказваюць, што ядро насамрэч усталявала. Параўнанне гэтых двух выглядаў — самы хуткі спосаб убачыць, ці скончыліся перамовы, ці толькі выглядалі скончанымі. Калі дэман пералічвае CHILD SA, для якой у ядра няма стану, усталяванне ціха правалілася. Калі ядро трымае стан, пра які дэман не ведае, вы бачыце рэштку папярэдняй спробы.
Што яшчэ павінна быць праўдай пасля ўзняцця тунелю
Селектары трафіку вызначаюць, якія адрасы ахоплены. Калі кліент прапануе адну падсетку, а сервер чакае іншую, CHILD SA ўсталёўваецца, але не нясе нічога карыснага, і памылка выглядае як праблема маршрутызацыі, а не перамоваў. Тады лакальны стек павінен садзейнічаць: перасылка ўключана там, дзе хост маршрутызуе, маршруты накіраваныя ў тунель, правілы файрвола дазваляюць дэкапсуляваныя пакеты, і ўнутраны рэзалвер, калі задзейнічаны прыватныя імёны. Кожнае з гэтага збоіць асобна, і ні адно не выпраўляецца перазапускам дэмана IKE.
Трымайце журнал бачным падчас дыягностыкі: пачатковы абмен, потым праверка асобы, потым аўтэнтыфікацыя карыстальніка, дзе яна прымяняецца, потым усталяванне CHILD, потым трафік праграм. Этап, які спыняецца, — гэта этап, які трэба выправіць, і пазнейшы збой маршрутызацыі ніколі не з'яўляецца прычынай паслабляць праверкі асобы, якія ўжо прайшлі.