cat_mucius: (Default)
У Микрософта нашли очередную дыру, и не абы где, а в святая святых, в домен контроллере. В общем, патчим, товарищи, не ленимся.




Там, похоже, читают мой бложик: cтоило обругать Azure Firewall, как в нём появилась именно та фича, которой мне и не хватало. :-) То есть можно указать в качестве destination любое имя, которое резолвится DNS в IP-адрес или список адресов, и Firewall разрешит (ну или заблокирует) соединение на любой из этих адресов, независимо от аппликативного протокола.

Но есть некоторая разница с Фортигейтом - для этой фичи Микрософт требуют превратить Azure Firewall в DNS proxy и настоятельно рекомендуют указать его внутренний адрес в качестве DNS-резолвера для всей живности, что будет через него свой трафик пускать. Делается это для того, чтобы минимизировать ситуации, когда Firewall резолвит то же имя в один список IP-адресов, а клиент - в другой.

Тем не менее, пока эта фича в preview и работает скорее теоретически. В моём опыте, примерно две трети соединений блокировались файерволлом даже тогда, когда он сам же клиенту список IP и резолвил. Правда, у DNS-имени, с которым я экспериментил, был очень короткий TTL, секунд в десять. Ну, будем надеяться, к запуску в продакшен её доведут до ума.




В связи с этими делами, стал стучаться в башку такой вопрос: поле Host в HTTP и SNI в TLS вводили, конечно, не ради файерволлов, а чтобы можно было множество сайтов на один серверный IP вешать. Но тем не менее, получилось довольно удобно, что теперь файерволл, работающий в режиме explicit / transparent proxy, может их использовать для сверки со своими правилами:
- и правила эти можно сделать гораздо более точными, чем если иметь для принятия решения лишь пару destination IP & port;
- и файерволл теперь может самостоятельно новое соединение к цели открыть, согласно собственному DNS lookup, независимо от destination IP в пакете, пришедшему от клиента;
- и заодно серверный сертификат может сверить на соответствие.

Так может стоит эту практику на прочие аппликативные протоколы распространить? Ну скажем, на NTP, IMAP, SMTP. Прописывать в явном виде "авторскую интенцию" - DNS-имя, на которое открывается соединение или посылается запрос.

В наш-то век облачных сервисов, когда то же DNS-имя переводится тем же самым DNS-сервером в разные списки IP в ответ на разные запросы, причём интервал между этими разными ответами может измеряться секундами, с традиционным файерволлом пытаться ограничивать исходящий трафик - практически безнадёжная задача, проще сразу "destination = ALL" прописать.

Из-за того иногда приходится прибегать к разным уродливым костылям, чтобы разрешить нужный исходящий трафик, не разрешая всё на свете. Ну, скажем, нужно позволить посылать письма через smtp.googlemail.com. Но поскольку даже если на файерволле можно прописать этот FQDN, по прежнему вероятна ситуация, когда клиент резолвнет этот адрес в IP1, а файерволл - в IP2 (даже используя тот же DNS-сервер!) и заблокирует соединение, то приходится идти на следующий некрасивый трюк: прописывать на внутреннем DNS-сервере (используемый ими обоими) зону smtp.googlemail.com с постоянным ограниченным набором IP-адресов - а дальше надеяться, что Гугл их в обозримом времени будет поддерживать в рабочем состоянии.




С другой стороны, это мне-то, решающему задачу ограничения исходящего трафика, это было бы удобно. Но вообще-то, это огромный вопрос - должен ли сетевой протокол быть дружелюбным к файерволлу или же напротив, максимально недружелюбным к нему - и вопрос этот политический. Если мы исходим из того, что государственная цензура - зло (а я так и считаю), то напротив, протокол должен быть как более непрозрачен, чтобы затруднить жизнь Великому китайскому файерволлу, Роскомнадзору и их аналогам. И тенденция идёт как раз в этом направлении - см. Encrypted SNI.

Наверное, дело решится настройкой, позволяющей клиенту запускать соответствующий протокол как в firewall-friendly, так и в unfriendly режимах. Корпоративные сети будут использовать первый, частные юзеры - второй. Серверам, по идее, должно быть всё равно.




Технически этот Encrypted SNI представляет собой раздражающий костыль. Давайте посылать юзеру шифровальный ключ в сертификате, а чтобы никто не догадался, какой именно сертификат (и сайт) запрашивается - разместим ещё один ключ в DNS, и пускай клиент свой запрос этим ключом шифрует. Блин, а почему б тогда сам первый ключ в DNS не разместить? А потому, что если враги его подменят, то это будет game over, а так они разве что увидят, на какой сайт юзер лезет. Хорошо, а по DNS-запросам они это не поймут? Поймут, но вот если юзер будет обращаться к заранее известным надёжным DNS-серверам, расположенным за границей, и само соединение с ними шифровать по TLS... Ну хорошо, а если враги запретят с такими серверами соединяться?...

В общем, похоже, пока моё старое предложение располагать крамольный сайт так, чтобы по хостнейму опознать его было нельзя, релевантности не теряет.
cat_mucius: (Default)
Внезапно пригодился генератор ругательств шекспировской эпохи, который когда-то доставленный [personal profile] el_d в Удел. Я на него перенаправляю незаконные запросы к API.



За последнее время много работаю с микрософтовым облачком, Azure - весь вокабуляр этого генератора очень хочется приложить к его, облачка, создателям. Там есть много что ругать - и невозможность переименовывать объекты, и скорость внесения изменений (вместе прекрасный эффект выходит: хочешь исправить опечатку - стирай-пересоздавай кучу всего, убей на это часа четыре) - но больше всего бесит сваливание ответственности за функционирование и безопасность платформы на пользователя.

Вот, к примеру, есть у них типа как изолированная среда для запуска веб-приложений, ASE. Заливаешь туда код сайта или вебсервиса, он автоматически размещается на каких-то закадровых виртуалках - и всё это в твоей изолированной сети. Сам регулируй доступ из и в эту сеть, направляй трафик по каким хошь маршрутам, ставь какие хошь фильтры - всё в твоих руках.

Звучит клёво. Да только при первой же попытке это построить натыкаешься на вот такущий список исключений, который ты обязан реализовать - и в раутинге, и в фильтрации - и все они относятся к общению между этим микрософтовским продуктом, ASE, и другими микрософтовскими же сервисами в том же Ажуре, и всё это общение должно почему-то проходить через твою типа частную сеть. Причём список этот максимально недружелюбен - не во всякий файерволл его и вобьёшь. Хочешь просто указать IP-диапазоны? - а хрен тебе. Нет, на тебе стопиццот хостнеймов, причём их один и тот же DNS-сервер будет резолвить в разное время в разный список IP-адресов. Мало тебе? - на ещё и wildcard-хостнеймы, которые файерволлу вообще указать нельзя, тут transparent proxy нужен. И причём отделить трафик собственно ASE от трафика живущих в нём приложений нельзя по определению - всё из того же сабнета.

А не реализуешь по списку - ну пожалуйста, либо у тебя дыра в безопасности будет, либо наш замечательный ASE возьмёт и сломается, сам будешь виноват, дурень.

И то же самое с каждым ихним изобретением - к каждому прилагается список УРЛов, без регулярного общения с которыми оно помрёт, хорошего вам настроения.

Какого чёрта? Почему я должен отвечать за связность микрософтовского продукта с микрософтовскими сервисами в микрософтовском же облаке? Почему нельзя вывести всю эту радость в отдельную сеть, оставив мне мой трафик? Доступ-то физических серверов к Windows Update вы же как-то осилили, не сбрасывая его организацию на клиентскую шею?

Подозрение, что это делается с целью заставить использовать Azure Firewall, не добавляет желания всем этим пользоваться. Файерволл, кстати, хороший, с фичей transparent proxy, частично удолетворяющих моим мечтаниям. Но есть и раздражающий момент: указать ему хостнейм, чтобы он сам его перевёл в IP-адрес или список адресов, нельзя. Фортигейт умеет, а он нет. Точнее, умеет, но лишь для тех протоколов, что поддерживает его proxy - HTTP(S) и MSSQL. А для всех остальных шиш, вбивайте по IP.

Ye roguish sour-faced cutpurses!
cat_mucius: (Default)
Подрядился пофрилансить - построить облачную инфраструктуру под мемориальный сайт "Мучеников Аль-Аксы". Что скажете, где лучше разместить - в Azure, в Амазоне, ещё где? Израильские облака, понятно, лучше не использовать.
cat_mucius: (Default)
Нашёл ответ на давно мучивший меня вопрос, который, я уверен, и вам покоя не давал, дорогие читатели - почему в виртуальных сетях микрософтовского облачка, Azure, нельзя передавать любой трафик, что не на unicast IPv4. Не значит ли это, что у них там не привычный Ethernet, а что-то своё эзотерическое?

Ну в общем-то да.
cat_mucius: (Default)
Накатал много букв с картинками по поводу своих облачных странствий и изысканий - как построить высокодоступный файлсервер без общих дисков. Авось кому из братьев-админов и пригодится.

Поправки, замечания, идеи - всё приветствуется.

Попутно хочу поблагодарить продакт-менеджеров корпорации Микрософт - эти славные люди взяли две абсолютно разные про природе и функциональности сущности и обозвали их одинаково - "witness". При том, что обе имеют отношение к Failover Cluster, и обе - к shared folders. Чтобы жизнь мёдом не казалась, очевидно.
cat_mucius: (Default)
Пришла в голову идея объеденить два VLAN-а в разных облачных датацентрах в один - прокинув между ними туннель VXLAN. Чтобы Ethernet-фреймы между ними ходили, как у себя дома.

Сказано - сделано: разобрался, как это делается на Фортигейте, для пущей безопасности пустил VXLAN поверх IPsec. Сценарий с NAT документирован не был, но ничего, скумекал. Ура, заработал мой туннель. И не успел я возликовать, как получил лопатой по всей морде. Облачко-то на VMware, ограничивает каждую виртуалочку её собственным MAC-адресом, и изменить это возможности не даёт. Стало быть, если мой Фортигейт начнёт вдруг фреймы от других машин передавать, то их жестокий vSwitch выкинет, и конец делу. Элементарная же штука, сто лет её знаю - а вовремя не сообразил. Ну хоть конфигурацию в технобложик задокументировал, и то хлеб.

Попутно это дело зарезало мне ещё пару-тройку идеек. Мир их праху.

Но до чего ж обидно, а! Посылает, скажем, виртуалка ARP-запрос. Фортигейт его принимает, инкапсулирует в VXLAN, шифрует IPsec-ом, суёт в UDP-пакет для NAT traversal, внешний раутер меняет source IP, пакет через ещё надцать раутеров добирается до дальнего датацентра, там всё это декапсулируется обратно, удалённая виртуалка посылает ARP-ответ, тот проходит весь этот путь в обратном направлении - и вот когда осталось Фортигейту своему соседу по VLAN-у ответ вручить, вмешивается таможня и выкидывает его нафиг. Эх.
cat_mucius: (Default)
За последнее время много вожусь с IaaS-облаком; хочется излить несколько наблюдений, как подходы, принятые в обычных, невиртуализированных системах некритически переносятся в облачную среду:

1. Неоднократно наблюдал, как на облачных серверах баз данных или там Exchange люди привычно ставят диск для баз, и отдельно - диск на transaction logs, думая, что это улучшит производительность. Да с чего бы? На обычном железе в этом был простой, понятный смысл: на диске баз данных считывающая головка может прыгать между секторами как угодно, а на диске логов будет большую часть времени просто записывать в хвост. Соответственно, лучше, чтобы диски были разные.
Но зачем это делать в облаке, где все эти диски - всего лишь файлы на датасторе? Если они хранятся на одном и том же физическом хард-диске - ну так значит, он обречён крутиться псевдорандомально. Но даже если мы разнесём их на разные хранилища - один чёрт каждое из них используется тучей прочего народу. Предсказать, как реально будут крутиться хард-диски в этих хранилищах - абсолютно невозможно.

Впрочем, по мере ухода магнитных дисков этот вопрос отпадёт окончательно. Хотя и тогда по инерции админы будут разносить базы и логи - у нас так заведено.


2. Продолжая тему дисков - объясните мне кто-нибудь, а какой смысл в локальных дисках в облаке? Почему не определить любой, или хотя бы любой data disk как shared? (Шишков, прости...) Это в физическом мире у нас есть либо SAN, либо просто SCSI-кабель к дискам, который больше чем в один компьютер не воткнёшь. А в виртуальном какая разница, какое устройство эмулировать - SCSI-контроллер или HBA какой-нибудь? Один чёрт наши диски - просто файлы на каком-то датасторе.

Сегодня облака shared disks обычно не предоставляют, и поэтому, чтобы завести какой-нибудь кластер на виртуалках, который их требует (да хотя бы файлсервер на микрософтовском Failover Cluster) нужно сооружать дикие турусы на колёсах. А как было бы просто: кликаешь в облачном портале мышкой пару раз - вот тебе виртуалка с диском. Кликаешь ещё - вот тебе вторая, третья, восьмая виртуалка, и все видят тот же диск. А дальше дело твоё, как их координировать: либо только главный сервер кластера юзает диск, либо ставь файловую систему, поддерживающую доступ со многих, типа VMFS или GFS2.


3. VLANs и, шире говоря, Ethernet вообще. Как-то упускается из виду, что в обычных локальных сетях broadcast domains существуют не от хорошей жизни, а оттого, что каждый компьютер в порт файерволла не воткнёшь. Хотелось бы инспектировать трафик между любыми двумя хостами - но что делать, свитчи функциональностью современного файерволла не обладают, а если такие и есть, то цена у них заоблачная, pun intended. Поэтому, если не хочется угробить производительность, приходится разбивать сеть на какие-то секьюрити-зоны, отказываться от возможности фильтровать трафик внутри них и удолетворяться фильтрацией между ними. Кроме того, VLAN-ы позволяют с лёгкостью гонять групповой и широковещательный трафик.

Но это не то, что я хотел бы от облака! Там-то мне возможность фильтровать трафик между двумя любыми машинами гораздо чаще пригождалась бы, чем преимущества broadcast domains.

Пример: допустим, у меня классический расклад - 20 вебных фронтэндов, за ними SQL Server. По логике секьюрити-зон, мне надо засунуть фронтэнды в один VLAN, SQL - в другой, и контролировать трафик между ними. Но тогда фронтэнды могут между собой неограниченно общаться - а зачем мне это надо? Им нужно говорить с HTTP-клиентами и с SQL-сервером, а друг дружке им что-либо передавать незачем.

Тут пригодился бы Private VLAN, но облако такое не предоставляет. Наштамповать отдельный VLAN под каждый фронтэнд можно, но мы упрёмся в иные ограничения. Приходится сажать их в общий, а это лишний риск.

Надо сказать, что Микрософт это как раз осознали - в Azure классического Ethernet-а нету, они там наворотили что-то своё на Layer2 (апдейт - таки да). В результате можно фильтровать трафик между любыми машинами, даже если они сидят в одном сабнете - но любой неюникастовый и, шире, любой не-IP трафик не поддерживается. По-моему, выбор в правильную сторону.


А у вас какие наблюдения?

Profile

cat_mucius: (Default)
cat_mucius

June 2025

S M T W T F S
1 234567
891011121314
15161718192021
22232425262728
2930     

Syndicate

RSS Atom

Most Popular Tags

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 3rd, 2025 02:19 pm
Powered by Dreamwidth Studios