Администраторы ресурсов, использующих имена хостов с символом подчёркивания, столкнулись (https://github.com/systemd/systemd/issues/6426) с проблемами, проявляющимися в новых выпусках systemd и Apache httpd, и вызванными неоднозначной трактовкой требований к именам в DNS.
В соответствии с RFC 1123 (https://tools.ietf.org/html/rfc1123) в DNS запрещено использовать символ подчёркивания в именах хостов, но разрешено (http://domainkeys.sourceforge.net/underscore.html) в именах меток. Т.е. в записях типа "A" и "MX", а также в содержимом полей "SOA" и "NS", символы подчёркивания недопускаются, но, в соответствии с RFC-2782 (http://ietf.org/rfc/rfc2782.txt), разрешены во вспомогательных полях, подобных "TXT" и "SRV", что активно используется, например, в системе DomainKeys. Обычно клиентское и серверное ПО достаточно лояльно относится к символу "_" в именах хостов, не требуя жесткого следования RFC, поэтому в обиходе часто встречаются поддомены с символом подчёркивания, например, в популярном на западе сервисе доставки видео Netflix используются имена подобные "ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net", а проект Fedora использует хост "_443._tcp.fedoraproject.org".
Проблемы всплыли после формировния новых выпусков systemd и Apache httpd. В systemd 234 была добавлена экспериментальная поддержка использования библиотеки libidn2 (https://gitlab.com/libidn/libidn2) вместо libidn для обработки доменных имён с символами национальных алфавитов. При сборке c libidn2 в systemd-resolver применялся предлагаемый в libidn2 фильтр имён хостов, который просто вырезал (https://gitlab.com/libidn/libidn2/issues/30) символ "_", что привело к проблемам с использованием сервиса Netflix на клиентских систмах с systemd-resolver. Проблема уже решена (https://gitlab.com/libidn/libidn2/commit/05d753ea69e2308cd02...) в libidn2 и войдёт (https://gitlab.com/libidn/libidn2/tags) в состав следующего обновления. Для systemd также выпущен (https://github.com/keszybz/systemd/commit/0926f34) патч, обходящий проблему при использовании старых версий libidn2.
Администраторы серверных систем столкнулись (https://ma.ttias.be/apache-httpd-2-2-15-60-underscores-hostn...) с похожей проблемой при переходе на Apache 2.4.25 или установке в RHEL/CentOS обновления httpd-2.2.15-60 (https://rhn.redhat.com/errata/RHSA-2017-1721.html). В рамках устранения уязвимости
CVE-2016-8743 (https://security-tracker.debian.org/tracker/CVE-2016-8743) код разбора HTTP-заголовков был приведён в строгое соответствие с RFC-7230 (http://ietf.org/rfc/rfc7230.txt). В случае наличия некорректного заголовка, оформление параметров которого не соответстует требованиям стандарта, теперь выдаётся ошибка 500
"Bad Request". В основном исправление было нацелено на блокирование использования закодированных символов пробелов к именах, но за одним было запрещено и применение других недопустимых символов, в том числе подчёркивания. Таким образом после установки обновления, перестали обрабатываться запросы к хостам, в именах которых присутствует символ "_". Для обхода проблемы можно использовать настройку "HttpProtocolOptions Unsafe".
URL: https://www.theregister.co.uk/2017/07/24/underscore_domain_n.../
Новость: https://www.opennet.ru/opennews/art.shtml?num=46905
Вот интересно, а зачем они вообще в доменных именах подчёркивание запретили?
> Вот интересно, а зачем они вообще в доменных именах подчёркивание запретили?Чтобы с тире не путать, но с IDN все эти запреты стали глубокой историей - для фишеров теперь раздолье, подбирай похожие Unicode-символы разных алфавитов и открытый вами аpple.com может отказаться xn--pple-43d.com
Причем тут путать с тире. Ссылки в классическом виде подчеркнутым текстом отображаются, и подчеркивание текста закрывало символ подчеркивания.
> Причем тут путать с тире. Ссылки в классическом виде подчеркнутым текстом отображаются, и подчеркивание текста закрывало символ подчеркивания.DNS как-бы раньше HTTP с HTML появилось. Ни о каких ссылках тогда и не думали.
Подчёркивание текста было ещё в древних терминалах VT100.
http://hackipedia.org/Protocols/Terminal,%20DEC%20VT100/html/VT100%20Escape%20Codes.html
сейчас опять начнется про "поцтера и его уё..ищный системд"...а клоуны нарушающие стандарты(типа нетфликс) - они молодцы, чо.
Расскажи мне еще про стандарты, про systemd-resolved решивший резолвить днс рендомно положив болт на очередность записей и сломав vpn к корпоративному интранету.
А мы тут послушаем про то что поттеринг так видит.
Не хочу вас огорчать, но DNS round-robin действительно не предписывает очередности записей.
Есть подозрение, что там "корпоративный vpn" держался только на том, что в resolv.conf один DNS был прописан раньше другого, что позволяло разруливать конфликты имен.resolved резолвит не последовательно, а параллельно, и поэтому на нем такие костыли не прокатят.
P.S. Админу, у которого разные DNS-сервера на одно имя выдают разные ответы, нужно выдрать руки из задницы и пересадить обратно в плечи.
К сожалению это мало относится к админам. Это скорее организационный вопрос, в частности, так в госсекторе - в интернете стоит тупая заглушка на ресурсы, доступные изнутри.
> К сожалению это мало относится к админам. Это скорее организационный вопрос, в
> частности, так в госсекторе - в интернете стоит тупая заглушка на
> ресурсы, доступные изнутри.Хороший админ сказал бы, "нет, так нельзя делать" начальству. Этим инженер от кодера отличается -- ответственностью.
В некоторых странах (типа Канады), есть даже специальный Кодекс чести Инженера. И за его нарушение лишают лицензии. Правда это относится к настоящим инженерам, а не software engineer самозванцам-дилетантам. Как один из этих самых software "engineer" говорю.
Бывает что приходишь к начальству, говоришь "так нельзя", а тебе говорят "да, нельзя но надо" потому что совсем уж высокое начальство требует именно так во имя "интересов бизнеса". И увольняться бесполезно, в большинстве мест так.И да, если в Канаде так круто, то почему мы ничего не слышим о крутых канадских IT'шниках? Может потому что они неконкурентноспособны в условиях рынка, на фоне например индусов, у которых единственный кодекс это "хренак хренак и в продакшн!"?
PS Отредактировал пост т.к. изначально не совсем правильно понял.
> И да, если в Канаде так круто, то почему мы ничего не слышим о крутых канадских IT'шниках?Они на опеннет не ходят? И на ЛОРе твой тупняк не комментируют?
Ну т.е. по существу никто ничего не ответил, ожидаемо.
а чем вам вью так насолили? вполне удобный механизм, когда для локальных пользователей отдается адрес внутреннего ресурса, для интернета - внешний. или вы имели в виду что-то другое?
> а чем вам вью так насолили? вполне удобный механизм, когда для локальных
> пользователей отдается адрес внутреннего ресурса, для интернета - внешний. или вы
> имели в виду что-то другое?Особенно удобно, когда локальный пользователь запрашивает адрес у какого-нибудь 8.8.8.8, получает внешний адрес, пытается на него зайти, а сервак отвечает ему с внутреннего, соединение отваливается по таймауту, и юзер бежит жаловаться админу.
>локальный пользовательа какого хрена он пользует сторонние ДНС а еще потом и ноет?
>>локальный пользователь
> а какого хрена он пользует сторонние ДНС а еще потом и ноет?"Баг systemd" из #25 без "внешнего" ДНС не воспроизводится, печаль.
>> а чем вам вью так насолили? вполне удобный механизм, когда для локальных
>> пользователей отдается адрес внутреннего ресурса, для интернета - внешний. или вы
>> имели в виду что-то другое?
> Особенно удобно, когда локальный пользователь запрашивает адрес у какого-нибудь 8.8.8.8,
> получает внешний адрес, пытается на него зайти, а сервак отвечает ему
> с внутреннего, соединение отваливается по таймауту, и юзер бежит жаловаться админу.то есть вы ссзб, но виноваты вью?
>> Особенно удобно, когда локальный пользователь запрашивает адрес у какого-нибудь 8.8.8.8,
>> получает внешний адрес, пытается на него зайти, а сервак отвечает ему
>> с внутреннего, соединение отваливается по таймауту, и юзер бежит жаловаться админу.
> то есть вы ссзб, но виноваты вью?Нет, ССЗБ автор #25, который одновременно использует два резолвера, дающие разные ответы на одно имя, но виноват в этом systemd-resolved.
> положив болт на очередность записейСложно положить болт на то, чего нет.
DNS-резолвер в init-е в принципе нарушает все законы логики.
> DNS-резолвер в init-еЭто где такое?
В systemd
> В systemdСовсем виндyзятники обленились: набрасывают, не зная матчасти.
Не хочу вас огорчать, но в systemd, init и resolved - это две разные программы.
Ага, а Слава КПСС - вообще не человек.
resolved не сидит в pid1, это отдельная программа
Ну как бы да. Давно стало приметой: нет systemd - нет уязвимостей и прочих багов, сюрпризов, новшеств от этого дурачка, которые появляются с завидной регулярностью.
Нет systemd - есть уязвимости и баги в других программах. А уж в ядре их вообще немеряно (стоит только вспомнить CVE-2016-7117). Так что единственно эффективное лечение удалением - это rm -rf /*
> CVE-2016-7117А еще были CVE-2016-8632 и CVE-2016-7039/CVE-2016-8666.
Зачем мне ломать какой-то там системг, если в ядре есть куча дырок remote root, от которых никакой фаервол не спасает?
> Нет systemd - есть уязвимости и баги в других программах. А уж
> в ядре их вообще немеряно (стоит только вспомнить CVE-2016-7117). Так что
> единственно эффективное лечение удалением - это rm -rf /*Уж кто бы заикался про rm -rf
https://github.com/systemd/systemd/issues/5644
> tmpfiles: R! /dir/.* destroys roothttps://www.opennet.ru/opennews/art.shtml?num=43795
> Выполнение rm -rf / может привести к неработоспособности UEFI-прошивки ноутбука
> tmpfiles: R! /dir/.* destroys rootsystemd - на страже вашей безопасности!
Автоматическое удаление уязвимых компонентов из системы (жаль, что эту фичу убрали).
> сейчас опять начнется про "поцтера и его уё..ищный системд"...а клоуны нарушающие стандарты(типа нетфликс) - они молодцы, чо.А с другой стороны посмотрите, какое у системд-шников раздолье, как сразу набросились-то: "смотриииитеееее, лёня не виновааааааат".
Интересная реакция.
notabug (c)
Как бы плохо я не относился к systemd, ошибка всё же в libidn2, а не в systemd
Не согласен, во-первых они вызывали IDN-фильтр для всех доменов, а не только для "xn--". Во-вторых они вызывали его с дефолтовыми опциями толком не ознакомившись, что они там фильтруют. Нужно было явно указать "IDN2_NFC_INPUT | IDN2_NONTRANSITIONAL", а не приплетать в фильтр IDN2_USE_STD3_ASCII_RULES.
> Не согласен, во-первых они вызывали IDN-фильтр для всех доменов, а не только
> для "xn--". Во-вторых они вызывали его с дефолтовыми опциями толком не
> ознакомившись, что они там фильтруют. Нужно было явно указать "IDN2_NFC_INPUT
> | IDN2_NONTRANSITIONAL", а не приплетать в фильтр IDN2_USE_STD3_ASCII_RULES.но "ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net" стандарт же нарушает ?
> но "ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net" стандарт же нарушает ?Только если используется запись "A", с SRV и подобным такое имя вполне допустимо. systemd-resolver фильтровал независимо от типа записи на стадии начальной фильтрации, т.е. какой-нибудь вполне валидный "_domainkey.ebay.com", который "IN TXT", а не IN A", отфильтровывался и резолвился уже как несуществующий "domainkey.example.com".
> systemd-resolver фильтровал независимо от типа записиНе он, а libidn2. Кстати, ее использование в resolved находится на стадии "technology preview", и чтобы ее включить, нужно пересобирать systemd со специальной опцией.
systemd реализует свой функционал используя libidn2, значит он.
> systemd реализует свой функционалПриятно поговорить с грамотным человеком, знающим смысл слова "функционал".
> Не он, а libidn2Не libidn2, а systemd-resolver. libidn2 это библиотека, она сама ничего не делает.
> это библиотека, она сама ничего не делает.Ну офигенно же. Как говорили лет 10 назад, "олoло, на башорг!"
> Не libidn2, а systemd-resolver.Просмотрел весь systemd, никакого systemd-resolver не нашел. У вас методичка неправильная.
>> Не libidn2, а systemd-resolver.
> Просмотрел весь systemd, никакого systemd-resolver не нашел. У вас методичка неправильная.То ли они ему ужк клоакинг https://www.opennet.ru/opennews/art.shtml?num=46771 запилили, то ли у кого-то косоглазие.
>>> Не libidn2, а systemd-resolver.
>> Просмотрел весь systemd, никакого systemd-resolver не нашел. У вас методичка неправильная.
> То ли они ему ужк клоакинг https://www.opennet.ru/opennews/art.shtml?num=46771 запилили,
> то ли у кого-то косоглазие.Там про systemd-resolved. Повторяю: у вас методичка неправильная. Обратитесь к своему куратору из Microsoft Corporation, возможно, они уже выпустили обновленную версию.
>Повторяю:у вас методичка
> из Microsoft Corporation,Зато у тебя правильная, война это мир, чёрное это белое, тебя ждёт победа -- разбег голова стена, скорее. Может косоглазие-таки поправишь, если доктора бессильны, -- всюду _свои_ методички косоглазишь.
Там там и есть "A" запись:; <<>> DiG 9.11.1-P3 <<>> ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 2554
;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net. IN A;; ANSWER SECTION:
ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net. 3600 IN A 37.77.187.142
И об этом в новости написано.
Да это звездец просто!
Эти ушлепки просто разрешили использовать подчеркивание в именах доменов. Это называется решение проблемы...
На RFC всем пох, имя хоста у Федоры, конечно же, важнее, его не сменишь ведь. Пришлось, бедным, под федору и нетфликс прогнуться...
> Эти ушлепки просто разрешили использовать подчеркивание в именах доменов. Это называется
> решение проблемы...
> На RFC всем пох,Перечитайте второй абзац новости подчёркивание можно использовать в именах доменов, но только которых не отдаются по записи "A". У Fedora хост как раз по назначению используется:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 14362
;; flags: qr rd ra; QUERY: 1, ANSWER: 4, AUTHORITY: 0, ADDITIONAL: 0;; QUESTION SECTION:
;_443._tcp.fedoraproject.org. IN ANY;; ANSWER SECTION:
_443._tcp.fedoraproject.org. 86400 IN NSEC _kerberos._tcp.fedoraproject.org. RRSIG NSEC TLSA
_443._tcp.fedoraproject.org. 86400 IN RRSIG NSEC 5 4 86400 20170819222008 20170720222008 7725 fedoraproject.org. R...k=
_443._tcp.fedoraproject.org. 300 IN TLSA 0 0 1 19400BE5B7A31FB733917700789D2F0A2471C0C9D506C0E504C06C16 D7CB17C0
_443._tcp.fedoraproject.org. 300 IN RRSIG TLSA 5 4 300 20170819222008 20170720222008 7725 fedoraproject.org. X...Yo=
А вот Netfix сам виноват:ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net. 157 IN A 37.77.187.142
ipv6_1-cxl0-c088.1.lhr004.ix.nflxvideo.net. 157 IN AAAA 2a00:86c0:5:5::142
>А вот Netfix сам виноват:Помню обсуждение тут, где я сказал что БЗДы в Netflix не знак того, что БЗДишный стек круто видео раздаёт, а лишь знак того что архитектор дубинушка. Ещё один признак второго. Сколько ещё надо? :)
> Помню обсуждение тут, где я сказал что БЗДы в Netflix не знак
> того, что БЗДишный стек круто видео раздаёт, а лишь знак того
> что архитектор дубинушка.Ну зачем дубинушка? Может, он просто знает толк в извращениях (настоящие фанаты BSD, как известно, за любовью ходят на кладбище).
А что такое RFC? Просьба присылать комментарии, это не ГОСТ, формально если.
> А что такое RFC? Просьба присылать комментарии, это не ГОСТ, формально если.За пределами СНГ никто не следует ГОСТ'ам. Правда, в России тоже - их заменили на ТУ.
Слава богу, хоть RFC все уважают.
> За пределами СНГ никто не следует ГОСТ'ам. Правда, в России тоже -
> их заменили на ТУ.
> Слава богу, хоть RFC все уважают.ГОСТ никто не отменял. ТУ - для тех, кто выпускает некритичную к качеству хрень.
еду например
> еду напримерОт еды в наше время требуется только то, чтобы потребитель от нее не умирал (по крайней мере, сразу). Иначе бы макдаки едой не были.
> А что такое RFC? Просьба присылать комментарии, это не ГОСТ, формально если.Формально -- да, RFC не формален. А если неформально, то таки вполне формален.
> Да это звездец просто!
> Эти ушлепки просто разрешили использовать подчеркивание в именах доменов. Это называется
> решение проблемы...
> На RFC всем пох, имя хоста у Федоры, конечно же, важнее, его
> не сменишь ведь. Пришлось, бедным, под федору и нетфликс прогнуться...Даки всё путём. Вы не понимаете! _Теперь_ на их таки Request for Comments обнаружились таки комментс. Процесс идёт. >>?<<
Ульриха Дреппера на вас нет!
Stop reopening!
> Stop reopening!Да, очень жаль, что Ленька так не разговаривает. Было бы гораздо веселее.
Это ссыкло просто отключает комментарии к багу.
> Это ссыкло просто отключает комментарии к багу.Так да, лучше бы он в ответ на любую критику писал "stop reopening, idiot" и "fuck you". Тогда бы он быстро превратился в кумира труЪ-линуксоидов.
И Ганса Райзера.
Тот редкий случай, когда авторам systemd хочется пожать руку.
Если какие-то долбодятлы из netflix или fedora нарушили RFC, то последствия этого шага - их проблемы.
статью не читай, Поттера защищай
> статью не читай, Поттера защищайПрочитал статью, убедился, что Поттер прав. Лучше бы не читал.
systemd тут не при делах, libidn - проект GNU
> systemd тут не при делах, libidn - проект GNUНо GNU - агенты редхата, а лидер редхата - Поттер, все сходится.
> Тот редкий случай, когда авторам systemd хочется пожать руку.Редкий, а я бы даже сказал исключительный, случай -- это не повод жать руку таким людям.
> 500
> Bad RequestСкажите мне, что это опечатка
>> 500
>> Bad Request
> Скажите мне, что это опечаткаПроиграл в голос, чудесно.
>> 500
>> Bad Request
> Скажите мне, что это опечаткаЭто новый стандарт протокола HTTP.
Клиент: GET / HTTP/0.9
Сервер: 500 Bad Request
Клиент: 400 You Idiot
Опечатка. В RedHat Errata ( https://rhn.redhat.com/errata/RHSA-2017-1721.html ):Note: The fix for the CVE-2016-8743 issue causes httpd to return "400 Bad Request" error to HTTP clients which do not strictly follow HTTP protocol specification. A newly introduced configuration directive "HttpProtocolOptions Unsafe" can be used to re-enable the old less strict parsing. However, such setting also re-introduces the CVE-2016-8743 issue.
Какой-то упырь насовал подчёркиваний в имена хостов, а виноват поцтер. Этак умело оперируя конфликтами и бинарным мышлением обывателей, можно превратить весь окружающий мир в дерьмо.
> Этак умело оперируя конфликтами и бинарным мышлением обывателей, можно превратить весь окружающий мир в дерьмо.У моего брата в стране так революцию устроили :-/
Ага-ага. named что-то в новости не упоминается. А Лёнька - звезда всех передовиц газет в колонке "светские рукожопы".
> Ага-ага. named что-то в новости не упоминается. А Лёнька - звезда всех
> передовиц газет в колонке "светские рукожопы".Ой, почему-то в каждом релизе named фиксят пачку дыр, а чтобы воспользоваться "рукожопостью Леньки", нужно
1. Установить экспериментальную версию библиотеки.
2. Пересобрать systemd с поддержкой этой версии.
3. Настроить resolved в качестве единственного резолвера.
4. Запросить имя хоста, составленное с нарушением RFC.It's super easy!
> It's super easy!Как там, говорите, наступили? Ай-яй-яй, кто-то взял и сделал пп. 1--3 прям в федоре?..
Неа. К федоре относится только багрепорт по libidn2.А связку libidn2+systemd собрал (видимо, вручную задав USE-флаги) некий гентушник https://github.com/systemd/systemd/issues/6426
(причем, учитывая, что v234 пока в тестинге https://packages.gentoo.org/packages/sys-apps/systemd , он ее специально размаскировал).
В общем, обычные будни любителей bleeding edge.
> А связку libidn2+systemd собрал (видимо, вручную задав USE-флаги)Не флаги, а флаг https://packages.gentoo.org/useflags/libidn2
(кстати, dnsmasq тоже affected, но так как автор не поттер, то всем пофиг).
> Ага-ага. named что-то в новости не упоминается. А Лёнька - звезда всех
> передовиц газет в колонке "светские рукожопы".Сравнил жалкие 15 дырок https://security-tracker.debian.org/tracker/source-package/s...
с сотней https://security-tracker.debian.org/tracker/source-package/b...Стало обидно за Леньку. Сколько бы версии он не крутил, настоящих профессионалов по дырявости и рукожопию он никогда не догонит.
>> Ага-ага. named что-то в новости не упоминается.В смысле тамошних войн с подчёркиванием?
> Стало обидно за Леньку. Сколько бы версии он не крутил, настоящих профессионалов
> по дырявости и рукожопию он никогда не догонит.Вот вкрутит DNS-сервер, тогда будет смысл сравнивать и в этом плане (хотя с bind8 было ещё веселей).
> Вот вкрутит DNS-сервер, тогда будет смысл сравнивать и в этом плане (хотя
> с bind8 было ещё веселей).bind9: 1 функция, сотня дыр
systemd: 20..30 функций, десяток дыр.Вряд ли добавление одной функции в systemd поменяет картину.
>> Вот вкрутит DNS-сервер, тогда будет смысл сравнивать и в этом плане (хотя
>> с bind8 было ещё веселей).
> bind9: 1 функция, сотня дыр
> systemd: 20..30 функций, десяток дыр.
> Вряд ли добавление одной функции в systemd поменяет картину.Сколько лет вашему любимому поделию? Какой дыркой оно светит в интернет? Не надо сравнивать жопу с пальцем.
Linus: user does not care
ССЗБ "стандарт плох, но он стандарт" перефразируя.
Netflix, конечно, дятлы. Но ведь какой интересный момент: все остальное ПО как в линуксе, так и в других операционках, чхать хотело на этот RFC
> Netflix, конечно, дятлы. Но ведь какой интересный момент: все остальное ПО как
> в линуксе, так и в других операционках, чхать хотело на этот
> RFCRFC предписывает быть требовательным к себе, но терпимым к другим. Другое ПО соответствует RFC, т.к. терпит чужие ошибки. А вот Netflix RFC не соответствует, т.к. не требовательны к себе. В общем, то, что кто-то может спокойно в ресторане жрать руками и ему никто ничего не скажет, ещё не значит, что нет никаких правил.