<?xml version="1.0" encoding="utf-8"?> 
<rss version="2.0"
  xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd"
  xmlns:atom="http://www.w3.org/2005/Atom">

<channel>

<title>Андрей Садулин: заметки с тегом administration</title>
<link>https://closed-ai.tech/tags/administration/</link>
<description>Андрей Садулин — заметки разработчика</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.3 (v4134)</generator>

<itunes:subtitle>Андрей Садулин — заметки разработчика</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>Ubuntu на VMware Fusion</title>
<guid isPermaLink="false">33</guid>
<link>https://closed-ai.tech/all/ubuntu-na-vmware-fusion/</link>
<pubDate>Mon, 11 Aug 2025 06:17:13 +0500</pubDate>
<author></author>
<comments>https://closed-ai.tech/all/ubuntu-na-vmware-fusion/</comments>
<description>
&lt;p&gt;Попробовал поработать на виртуалке c Ubuntu 25.04, поднятой в VMware Fusion — пока что очень нравится. Хост машина у меня — MacBook на M1 Pro с 32 GB памяти, для гостевой я немного поправил базовые настройки: выделил ей 4 vCPU, 8 GB RAM, 40 GB HDD и ткнул опцию «Use full resolution for Retina display». Уже в Ubuntu выбрал разрешение экрана 4K и поднял масштабирование интерфейса до 200%. Супер. Работает быстро, визуально разве что скроллинг не такой плавный, как на Mac, ну и есть явно ощутимые задержки в выводе звука, например, с видео на YouTube. И пока почему-то не работает copy-paste ни в какую сторону даже после установки VMware Tools — пока не понятно, почему, попробую разобраться на досуге. В целом, с учетом того, что VMware Fusion официально распространяется бесплатно (хотя нынче всё-таки, видимо, придется регистрироваться на портале Broadcom — я раньше писал, что можно было скачать его напрямую по &lt;a href="https://softwareupdate.vmware.com/cds/vmw-desktop/"&gt;ссылке&lt;/a&gt; или с помощью &lt;a href="https://formulae.brew.sh/cask/vmware-fusion#default"&gt;Brew&lt;/a&gt;, но лавочку прикрыли), на текущий момент это неплохая замена платному Parallels, если вам не нужна бесшовная интеграция с MacOS.&lt;/p&gt;
</description>
</item>

<item>
<title>Cloudflare: HTTPS и SSL</title>
<guid isPermaLink="false">18</guid>
<link>https://closed-ai.tech/all/cloudflare-https-i-ssl/</link>
<pubDate>Tue, 28 May 2024 23:10:48 +0500</pubDate>
<author></author>
<comments>https://closed-ai.tech/all/cloudflare-https-i-ssl/</comments>
<description>
&lt;p&gt;Итак, у вас есть домен, который вы перенесли в Cloudflare. Сразу же после его добавления и настройки на платформе к нему автоматически выдаются два SSL-сертификата: основной и запасной, с разными Certificate Authority — Let’s Encrypt, Sectigo, Google Trust Services. Время жизни сертификатов — 3 месяца, после — автопродление. Удобно.&lt;/p&gt;
&lt;p&gt;Вот, как это выглядит:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-21.57.37@2x.png.jpg" width="2560" height="1672" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Обратите внимание, что это &lt;b&gt;Edge Certificates&lt;/b&gt;. Поскольку платформа по-умолчанию проксирует трафик на сайт через себя, эти «пограничные» сертификаты используются &lt;b&gt;только на участке «пользователь — Cloudflare»&lt;/b&gt;. Там же можно включить настройку «Always use HTTPS», и ожидаемо получить автоматические редиректы — но только всё на том же участке! Трафик от Cloudflare до сервера будет передаваться без шифрования!&lt;/p&gt;
&lt;p&gt;Обновив страницу блога, я получил несколько ошибок в консоли вида &lt;a href="https://developers.cloudflare.com/ssl/troubleshooting/mixed-content-errors/." class="nu"&gt;«&lt;u&gt;Mixed content: request has been blocked&lt;/u&gt;»&lt;/a&gt; — падали асинхронные запросы, инициированные где-то в JavaScript. Также не работало сохранение записей и некоторые редиректы — видимо, всё по той же причине 😭&lt;/p&gt;
&lt;p&gt;Опытным путем я понял, что надо бы шифровать весь трафик E2E, а для этого нам понадобится &lt;b&gt;Origin Certificate&lt;/b&gt; — как раз-таки тот, который отвечает за оставшийся путь от Cloudflare до сервера (в моем случае до Nginx).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-22.44.07@2x.png.jpg" width="2560" height="1672" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;Да, его действительно можно получить на 15 (!) лет&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Нажав на кнопку «Create», мы получим, по сути, две строки: сам сертификат и приватный ключ для него. Для добавления их в Nginx Proxy Manager, я сохранил их как файлы и импортировал так, как показано на втором снимке в галерее ниже:&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2560" data-ratio="1.5311004784689"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-22.51.14@2x.png.jpg" width="2560" height="1672" alt="" /&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-22.53.04@2x.png.jpg" width="2560" height="1672" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Отлично, осталось только подключить полное шифрование в Cloudflare...&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-23.04.00@2x.png.jpg" width="2560" height="1657" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;...и проверить, что всё прекрасно работает.&lt;/p&gt;
</description>
</item>

<item>
<title>Обновление инфраструктуры</title>
<guid isPermaLink="false">17</guid>
<link>https://closed-ai.tech/all/obnovlenie-infrastruktury/</link>
<pubDate>Tue, 28 May 2024 04:58:32 +0500</pubDate>
<author></author>
<comments>https://closed-ai.tech/all/obnovlenie-infrastruktury/</comments>
<description>
&lt;p&gt;Сегодня хочу рассказать про то, как я подключил платформу &lt;b&gt;Cloudflare&lt;/b&gt; для обеспечения безопасного доступа к сервисным приложениям, которыми я пользуюсь для управления этим сайтом.&lt;/p&gt;
&lt;h3&gt;Начало&lt;/h3&gt;
&lt;p&gt;Кратко про архитектуру: «под капотом» здесь VPS c Ubuntu 22.04, веб-сервер и база данных запускаются в Docker-контейнерах, для их удобного администрирования я использую &lt;a href="https://docs.portainer.io/v/2.20"&gt;Portainer&lt;/a&gt;. Также здесь установлен &lt;a href="https://nginxproxymanager.com/"&gt;Nginx Proxy Manager&lt;/a&gt; (тоже в контейнере), который перенаправляет трафик с www на основной домен, обеспечивает подключение по HTTPS, проверяет подлинность домена, и т. д. В качестве удобного интерфейса для конфигурации сервера и доступа к терминалу я выбрал &lt;a href="https://cockpit-project.org/"&gt;Cockpit&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Поскольку все эти инструменты — веб-приложения, доступные публично (мне хотелось иметь возможность подключаться с любого устройства), необходимо было по-максимуму &lt;b&gt;защитить их от несанкционированного доступа&lt;/b&gt;. Да, у них у всех по-умолчанию есть формы авторизации, но проверка там однофакторная, по логину и паролю — они хоть и длинные, но все равно могут быть скомпрометированы путем фишинга или подбора. Также вполне возможно появление уязвимостей и эксплойтов для них, позволяющих, в теории, каким-то образом обойти защиту. В общем, хотелось бы что-то понадежнее, в идеале — вообще не давать случайному пользователю доступ к этим сервисам.&lt;/p&gt;
&lt;h3&gt;Подключаем Cloudflare&lt;/h3&gt;
&lt;p&gt;&lt;a href="https://developers.cloudflare.com/cloudflare-one/connections/connect-networks/"&gt;Zero Trust Tunnel&lt;/a&gt; позволяет связать субдомен и внутренний адрес на host-машине с установленным приложением-коннектором (его, кстати, тоже можно развернуть в контейнере). Не нужно открывать порты или отключать firewall, т. к. коннектор поднимает egress-соединение с облаком, и самое крутое — через панель управления Cloudflare можно также &lt;b&gt;задать правила доступа&lt;/b&gt; к ресурсу и &lt;b&gt;подключить дополнительный фактор аутентификации&lt;/b&gt;, например, отправку одноразового кода на почту или вход через Google-аккаунт.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://closed-ai.tech/pictures/network-diagram_hu35c98d3bbf0ecf738b5b543af7009e44_79161_2296x1101_resize_q75_box_3-fe1feb83.png.jpg" width="2560" height="1427" alt="" /&gt;
&lt;/div&gt;
&lt;p class="lead"&gt;То есть, можно буквально в два клика открыть доступ по HTTPS к &lt;tt&gt;localhost:9090&lt;/tt&gt; через &lt;tt&gt;private-service.my-site.com&lt;/tt&gt; для тех, кто введет правильный email из whitelist’а и укажет верный код, отправленный в письме.&lt;/p&gt;
&lt;p&gt;Красота! ❤️&lt;/p&gt;
&lt;p&gt;Вот, как это выглядит в панели управления Cloudflare: на каждый «приватный» сервис я создал отдельный туннель. Обратите внимание на адреса — контейнер с коннектором &lt;tt&gt;cloudflared&lt;/tt&gt; я добавил в bridge-сеть в Docker, которую создал вручную. Благодаря этому, во-первых, работает DNS, и можно обращаться к контейнерам по имени, а также легко можно получить доступ к host, указав Default Gateway.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-01.52.08@2x.png.jpg" width="2560" height="1722" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Добавим policy с группой доступа по-умолчанию — у меня это «разрешить любому пользователю с email из списка получать одноразовый код на почту». Настраивать можно как угодно: работает фильтрация по странам, по IP-адресам, можно проверять токены и т. д.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2560" data-ratio="1.3897937024973"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-15.51.20@2x.png.jpg" width="2560" height="1842" alt="" /&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-15.51.49@2x.png.jpg" width="2560" height="1842" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Теперь при попытке обратиться к туннелю по public hostname, откроется форма авторизации. Выглядит она вот так, и её, кстати, можно настроить — добавить свой логотип, поменять цвет фона, написать какой-нибудь текст, добавить подсказки для входа.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="2560" data-ratio="1.4997070884593"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-03.57.53@2x.png.jpg" width="2560" height="1707" alt="" /&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-04.38.08@2x.png.jpg" width="2560" height="1722" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;На всякий случай повторюсь — если введенного адреса нет в whitelist, код просто не придет.&lt;/p&gt;
&lt;p&gt;А ещё можно создать «приложения» и добавить их на главный экран — он называется App Launcher. Естественно, он тоже доступен только для авторизованных пользователей.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://closed-ai.tech/pictures/CleanShot-2024-05-28-at-01.47.32@2x.png.jpg" width="2560" height="1722" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Отмечу, что работает это всё только с доменами, перенесенными в Cloudflare или изначально приобретенными у них. Мой был куплен в reg.ru, перенос занял минут 15, ничего сложного.&lt;/p&gt;
&lt;h3&gt;Сколько стоит?&lt;/h3&gt;
&lt;p&gt;Весь описанный выше функционал &lt;b&gt;абсолютно бесплатен&lt;/b&gt;, как и кэширование, защита от DDOS, и куча разных дополнительных виртуальных сетевых функций, но нужно привязать карточку. Наверное, единственный минус, который я могу выделить — Cloudflare функционально довольно перегружен: много дашбордов, панелей, настроек; но, благо, есть хорошая документация.&lt;/p&gt;
&lt;h3&gt;P. S.&lt;/h3&gt;
&lt;p&gt;В Cloudflare можно автоматически добавить SSL-сертификат и настроить редиректы с HTTP на HTTPS — об этом читайте &lt;a href="/all/cloudflare-https-i-ssl/"&gt;в следующей заметке&lt;/a&gt;.&lt;/p&gt;
&lt;p&gt;Большое спасибо Михаилу Щербине за консультации.&lt;/p&gt;
</description>
</item>


</channel>
</rss>