Настройка mTLS на cloudflare
Недавно я узнал о продукте cloudflare tunnel, который позволяет публиковать свои локальные сервисы в интернет даже находясь за NAT. И мне стало интересно как можно ещё прикрутить к этому mTLS, чтобы иметь гарантию что никто левый не постучит к моему сервису. А то даже находясь за cloudflare мы не можем иметь гарантию что к нам не придёт например zero-day червь пытающийся эксплуатировать какой нить log4j.
mTLS технология подерживается всеми современными браузерами, на всех платформах. Протестировано на: windows+edge, IOS+safari, chrome IOS не работает. Все что нужно это установить сертификат на конечное устройство.
Теория
Оказалось все просто: mTLS возможен на cloudflare только если включено "облачко", в этом режиме CF полностью занимается TLS-терминацией. Работает это как показано ниже на диаграмме:
Когда мы включаем mTLS в cloudflare dashboard, то к обычному TLS рукопожатию появляется 3 шаг: "Client certificate request". На 6 этапе cloudflare проверяет что запрос действительно валиден, и если все ок то помечает его для WAF. Но если сертификат даже не валидный, то решение о блокировки запроса все равно принимает WAF. Понять это можно по тому что если зайти на страницу не имея сертификата то мы увидим Access Blocked.В классических mTLS обычно просто происходит разрыв коннекта сразу, но cloudflare всеравно дают запросу пройти и только лишь дают возможность настроить политику блокировки запросов непрошедших client certificate на уровне WAF. Именно на WAF и происходит решение принятии/блокировки запроса проходящего mTLS.
Практика
- Включить "облачко" на нашем поддомене
- Добавить hostname в список mTLS
- Добавить WAF-rule который запретит трафик
- Сгенерировать клиентские сертификаты и установить их
Комментарии
Отправить комментарий