Вы, наверное, в курсе, что месяц назад компания Cloudflare, за которой находятся много сайтов, включила механизм ECH.
Вкратце Encrypted Client Hello - часть TLS 1.3, которая позволяет шифровать SNI. SNI - это домен, передающийся при установке соединения с сервером. Та часть, которую видит сетевое оборудование между вами и сервером. Не буду сильно расписывать, суть в том, что по задумке третья сторона, с включенным у вас и на сервере ECH, не знает, к какому домену вы идёте. И это работает, но есть нюанс 🌚
Так вот, месяц назад CF активировала у себя этот режим и многие ликовали. А вчера в России началась блокировка ECH.
Теперь все сайты, использующие ECH, не работают. А CF врубил ECH всем.
Если ваш сайт за Cloudflare
Вы можете отключить ECH в админке. Но только если у вас платный тариф. В бесплатном тарифе это можно сделать с помощью их API и curl-запроса (гуглится). Но зная CF, вангую, что они скоро прикроют этот лайфхак.
Отключение ECH на клиентах
Многие сайты уже отключили ECH. Но не все станут это делать. И у вас они открываться, скорее всего, не будут.
1. ECH поддерживается на уровне браузера, поэтому выключить его можно тоже в браузере, в FireFox about:config - DisableEncryptedClientHello - false. В Chrome оно пока не отключается.
2. Так как ECH приходит к нам в DNS ответах, когда браузер делает запрос к типу записи HTTPS, можно вырубить ECH на уровне DNS. А значит, это можно сделать на роутере.
Сначала смотрим, что в ответе нам приходит строка с ECH. DNS-запрос к роутеру c типом записи HTTPS:
dig ifconfig.co HTTPS @192.168.1.1
У ресурса ifconfig.co включен ECH. Получаем ответ, содержащий в себе ECH запись:
;; ANSWER SECTION:
ifconfig.co. 64 IN HTTPS 1 . alpn="h3,h2" ipv4hint=104.21.54.91,172.67.168.106 ech=AEX+DQBBPgAgACCNP+n8tzXKkxwsN0FCl58LJ5ik5dpjMSUVW34XGDuGPwAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700:3030::ac43:a86a,2606:4700:3037::6815:365b
Пример отключения ECH для OpenWrt и любой другой ОС, использующей dnsmasq:
echo 'filter-rr=HTTPS' >> /etc/dnsmasq.conf && service dnsmasq restart
Да, через UCI тут не получится, пока фильтр туда не завезли.
Повторяем команду dig и получаем пустой ответ:
;; QUESTION SECTION:
;ifconfig.co. IN HTTPS
Теперь dnsmasq отклоняет все запросы с типом записи HTTPS. Вот так ECH отключается на роутере c OpenWrt. За нужный фильтр и тесты, спасибо участнику сообщества.
Кто-то говорит, что технология полезная и отключать не нужно. Согласен, что полезная, но какие варианты?
Если знаете, как отключить ECH на роутерах с другими ОС - кидайте в комменты, сформирую общую заметку.
Вкратце Encrypted Client Hello - часть TLS 1.3, которая позволяет шифровать SNI. SNI - это домен, передающийся при установке соединения с сервером. Та часть, которую видит сетевое оборудование между вами и сервером. Не буду сильно расписывать, суть в том, что по задумке третья сторона, с включенным у вас и на сервере ECH, не знает, к какому домену вы идёте. И это работает, но есть нюанс 🌚
Так вот, месяц назад CF активировала у себя этот режим и многие ликовали. А вчера в России началась блокировка ECH.
Теперь все сайты, использующие ECH, не работают. А CF врубил ECH всем.
Если ваш сайт за Cloudflare
Вы можете отключить ECH в админке. Но только если у вас платный тариф. В бесплатном тарифе это можно сделать с помощью их API и curl-запроса (гуглится). Но зная CF, вангую, что они скоро прикроют этот лайфхак.
Отключение ECH на клиентах
Многие сайты уже отключили ECH. Но не все станут это делать. И у вас они открываться, скорее всего, не будут.
1. ECH поддерживается на уровне браузера, поэтому выключить его можно тоже в браузере, в FireFox about:config - DisableEncryptedClientHello - false. В Chrome оно пока не отключается.
2. Так как ECH приходит к нам в DNS ответах, когда браузер делает запрос к типу записи HTTPS, можно вырубить ECH на уровне DNS. А значит, это можно сделать на роутере.
Сначала смотрим, что в ответе нам приходит строка с ECH. DNS-запрос к роутеру c типом записи HTTPS:
dig ifconfig.co HTTPS @192.168.1.1
У ресурса ifconfig.co включен ECH. Получаем ответ, содержащий в себе ECH запись:
;; ANSWER SECTION:
ifconfig.co. 64 IN HTTPS 1 . alpn="h3,h2" ipv4hint=104.21.54.91,172.67.168.106 ech=AEX+DQBBPgAgACCNP+n8tzXKkxwsN0FCl58LJ5ik5dpjMSUVW34XGDuGPwAEAAEAAQASY2xvdWRmbGFyZS1lY2guY29tAAA= ipv6hint=2606:4700:3030::ac43:a86a,2606:4700:3037::6815:365b
Пример отключения ECH для OpenWrt и любой другой ОС, использующей dnsmasq:
echo 'filter-rr=HTTPS' >> /etc/dnsmasq.conf && service dnsmasq restart
Да, через UCI тут не получится, пока фильтр туда не завезли.
Повторяем команду dig и получаем пустой ответ:
;; QUESTION SECTION:
;ifconfig.co. IN HTTPS
Теперь dnsmasq отклоняет все запросы с типом записи HTTPS. Вот так ECH отключается на роутере c OpenWrt. За нужный фильтр и тесты, спасибо участнику сообщества.
Кто-то говорит, что технология полезная и отключать не нужно. Согласен, что полезная, но какие варианты?
Если знаете, как отключить ECH на роутерах с другими ОС - кидайте в комменты, сформирую общую заметку.