<?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>Воронин</title>
<link>https://voronin.one/</link>
<description>воронин, voronin, it</description>
<author></author>
<language>ru</language>
<generator>Aegea 11.4 (v4171)</generator>

<itunes:subtitle>воронин, voronin, it</itunes:subtitle>
<itunes:image href="" />
<itunes:explicit></itunes:explicit>

<item>
<title>MatrixRTC сервер на базе Synology</title>
<guid isPermaLink="false">60</guid>
<link>https://voronin.one/all/matrixrtc-server-na-baze-synology/</link>
<pubDate>Mon, 30 Mar 2026 16:33:28 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/matrixrtc-server-na-baze-synology/</comments>
<description>
&lt;p&gt;развернём свой matrix сервер используя средства synology&lt;/p&gt;
&lt;p&gt;для начала подготовим папки, где будят хранится настройки сервера и база PostgreSQL&lt;br /&gt;
в каталоге &lt;b&gt;docker&lt;/b&gt; создал папку &lt;b&gt;matrix&lt;/b&gt; а в ней уже &lt;b&gt;data&lt;/b&gt; и &lt;b&gt;db&lt;/b&gt; соответственно&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-97.png" width="800" height="298.67947178872" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;так же нам нужно получить id пользователя и группы, &lt;a href="https://voronin.one/all/kak-poluchit-id-polzovatelya-i-gruppy-v-synology/"&gt;uid и gid&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;затем идём в «Панель управления» -&gt; «Планировщик задач» -&gt; «Создать» -&gt; «Запланированная задача» -&gt; «Скрипт, созданный пользователем»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-98.png" width="800" height="472.72727272727" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём задачу «MATRIX», указываем пользователя «root» и обязательно отключаем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-99.png" width="532" height="581" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;в расписание обязательно «не повторять»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-100.png" width="532" height="581" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и пишем скрипт для запуска, нам нужно запустить его один раз для создания структуры&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-101.png" width="531" height="582" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;сам скрипт:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;#!/bin/bash
docker run --rm \
--user 1026:100 \
-v /volume1/docker/matrix/data:/data \
-e SYNAPSE_CONFIG_PATH=/data/homeserver.yaml \
-e SYNAPSE_SERVER_NAME=matrixchat \
-e SYNAPSE_REPORT_STATS=yes \&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;в скрипт подставляем «user 1026:100» uid и gid &lt;a href="https://voronin.one/all/kak-poluchit-id-polzovatelya-i-gruppy-v-synology/"&gt;полученные выше&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;после того как создали задачу, выбираем её в списке и жмём «выполнить», вам потребуется указать пароль текущего пользователя и он должен быть с правами администратора&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-111.png" width="590" height="152" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь готовим файл &lt;b&gt;compose.yaml&lt;/b&gt; следующего содержимого&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;services:
  synapse-db:
    image: postgres:16
    container_name: Synapse-DB
    hostname: synapse-db
    security_opt:
      - no-new-privileges:true
    healthcheck:
      test: [&amp;quot;CMD&amp;quot;, &amp;quot;pg_isready&amp;quot;, &amp;quot;-q&amp;quot;, &amp;quot;-d&amp;quot;, &amp;quot;synapsedb&amp;quot;, &amp;quot;-U&amp;quot;, &amp;quot;synapseuser&amp;quot;]
      timeout: 45s
      interval: 10s
      retries: 10
    volumes:
      - /volume1/docker/matrix/db:/var/lib/postgresql/data:rw
    environment:
      - POSTGRES_DB=synapsedb
      - POSTGRES_USER=synapseuser
      - POSTGRES_PASSWORD=synapsepass
      - POSTGRES_INITDB_ARGS=--encoding=UTF-8 --lc-collate=C --lc-ctype=C
    restart: on-failure:5

  synapse:
    image: matrixdotorg/synapse:latest
    container_name: Synapse
    hostname: synapse
    security_opt:
      - no-new-privileges:true
    user: 1026:100
    environment:
      - TZ=Europe/Moscow
      - SYNAPSE_CONFIG_PATH=/data/homeserver.yaml
    volumes:
      - /volume1/docker/matrix/data:/data:rw
    ports:
      - 8450:8008/tcp
    restart: on-failure:5
    depends_on:
      synapse-db:
        condition: service_started&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;обратите внимание, что пусти &lt;b&gt;/volume1/docker/matrix/db&lt;/b&gt; и &lt;b&gt;/volume1/docker/matrix/data&lt;/b&gt; должны вести на папки, созданные выше&lt;/p&gt;
&lt;p&gt;идём в &lt;b&gt;Container manager&lt;/b&gt;, &lt;b&gt;Проект&lt;/b&gt; и жмём «создать»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-113.png" width="800" height="333.26063249727" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;даём название проекту, указываем путь к нашей папке &lt;b&gt;matrix&lt;/b&gt; и выбираем с компьютера файл &lt;b&gt;compose.yaml&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;настройки web портала не трогаем, мы будем настраивать обратный прокси&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-114.png" width="740" height="578" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;запускаем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-115.png" width="741" height="578" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;ждём старта проекта&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-116.png" width="800" height="503" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь надо остановить проект и отредактировать файл конфигурации нашего сервера&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-112.png" width="800" height="333.22314049587" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;добавляем следующие параметры после названия сервера&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;enable_registration: true
enable_registration_without_verification: true
enable_group_creation: true&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-119.png" width="797" height="454" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь меняем параметры базы данных, заменим следующие строчки&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;database:
  name: sqlite3
  args:
    database: /data/homeserver.db&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-120.png" width="417" height="88" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;на&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;database:
  name: psycopg2
  args:
    user: synapseuser
    password: synapsepass
    database: synapsedb
    host: synapse-db
    cp_min: 5
    cp_max: 10&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-121.png" width="521" height="165" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;при редактировании файла конфигурации важно не ошибиться в отступах&lt;/p&gt;
&lt;p&gt;настраиваем обратный прокси&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-122.png" width="689" height="442" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём новую запись, указываем имя нашего сервера, например «im.server.ru», порт 443, обязательно включаем HSTS и порт нашего контейнера 8450&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-123.png" width="604" height="563" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём заголовки под websocket&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-124.png" width="603" height="561" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;выпускаем сертификат для нашего сервера&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-125.png" width="800" height="312.59418729817" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="652" data-ratio="1.1790235081374"&gt;
&lt;img src="https://voronin.one/pictures/image-126.png" width="652" height="553" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-127.png" width="650" height="552" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-128.png" width="653" height="550" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-129.png" width="650" height="550" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;идём в настройки и назначаем сертификат домену&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-130.png" width="795" height="342" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-131.png" width="600" height="419" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;осталось скачать клиент и подключиться к серверу&lt;br /&gt;
&lt;a href="https://element.io/download"&gt;https://element.io/download&lt;/a&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-132.png" width="800" height="619.53125" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;жмём «редактировать» чтобы сменить сервер на наш&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-133.png" width="800" height="625.54027504912" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-134.png" width="800" height="621.7008797654" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём новую учётную запись&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-137.png" width="800" height="617.25490196078" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;мы вошли&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-136.png" width="800" height="622.48289345064" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;поздравляю&lt;/p&gt;
</description>
</item>

<item>
<title>как получить id пользователя и группы в synology</title>
<guid isPermaLink="false">61</guid>
<link>https://voronin.one/all/kak-poluchit-id-polzovatelya-i-gruppy-v-synology/</link>
<pubDate>Mon, 30 Mar 2026 14:00:17 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/kak-poluchit-id-polzovatelya-i-gruppy-v-synology/</comments>
<description>
&lt;p&gt;чтобы получить id пользователя и группы в synology есть 2 пути:&lt;/p&gt;
&lt;ol start="1"&gt;
&lt;li&gt;используем подключение ssh&lt;br /&gt;
включаем терминал в панели управления&lt;/li&gt;
&lt;/ol&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-102.png" width="800" height="456.39344262295" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;дальше подключаемся чрез ssh (в windows и linux клиент встроен в систему)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-103.png" width="612" height="175" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;выполните команду &lt;b&gt;id&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-104.png" width="739" height="302" alt="" /&gt;
&lt;/div&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;uid=1026(axl) gid=100(users)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;у меня пользователь id (uid) — 1026&lt;br /&gt;
id группы (gid) — 100&lt;/p&gt;
&lt;ol start="2"&gt;
&lt;li&gt;чуть дольше, делается через web интерфейс, никаких ssh не требуется&lt;/li&gt;
&lt;/ol&gt;
&lt;p&gt;идём в «Панель управления» -&gt; «Планировщик задач» -&gt; «Создать» -&gt; «Запланированная задача» -&gt; «Скрипт, созданный пользователем»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-105.png" width="800" height="610.09174311927" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём задание, которое будет выполняться от имени нужного нам пользователя, обязательно отключаем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-106.png" width="534" height="581" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;указываем «не повторять»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-107.png" width="532" height="583" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;результат получим на почту, укажем адрес&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-108.png" width="529" height="580" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и команда&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;id&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;после того как создали задачу, выбираем её в списке и жмём «выполнить»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-109.png" width="611" height="224" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и ждём, когда нам на почту придём результат&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-110.png" width="777" height="284" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>подключаем AI к нашему synology</title>
<guid isPermaLink="false">59</guid>
<link>https://voronin.one/all/podklyuchaem-ai-k-nashemu-synology/</link>
<pubDate>Fri, 09 Jan 2026 12:41:00 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/podklyuchaem-ai-k-nashemu-synology/</comments>
<description>
&lt;p&gt;Я использовал свою систему запущенную на Ollama (Nvidia RTX4090), по производительности просадок нет. Как поднять на debian ollama расписывать не стану, сразу перейду к настройке совместной работы с synology.&lt;/p&gt;
&lt;p&gt;Для начала на м надо сделать модель, которую сможет вызывать synology, для этого я склонировал Qwen/Qwen3-235B-A22B в gpt-4o-mini&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;echo &amp;quot;FROM qwen3:235b&amp;quot; &amp;gt;&amp;gt; gpt-4o-mini.Modelfile&lt;/code&gt;&lt;/pre&gt;&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;ollama create gpt-4o-mini -f ./gpt-4o-mini.Modelfile&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;проверка работы&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;curl http://localhost:11434/api/generate -d &amp;#039;{ &amp;quot;model&amp;quot;: &amp;quot;gpt-4o-mini&amp;quot;, &amp;quot;prompt&amp;quot;: &amp;quot;Why is the sky blue?&amp;quot; }&amp;#039;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-93.png" width="800" height="417.2131147541" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;URL по-умолчанию для подключения к локальной Ollama &lt;a href="http://ip_нашего_сервера:11434"&gt;http://ip_нашего_сервера:11434&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;формат API идентичный OpenAI&lt;/p&gt;
&lt;p&gt;теперь в Synology добавляем новую LLM&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-94.png" width="686" height="483" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;название указываем своё, ключ API — любой (можно пробел)&lt;/p&gt;
&lt;p&gt;открываем «Дополнительные настройки» и прописываем нашу URL&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-95.png" width="691" height="491" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;готово&lt;/p&gt;
</description>
</item>

<item>
<title>как подружить synology с непроверенными дисками</title>
<guid isPermaLink="false">58</guid>
<link>https://voronin.one/all/kak-podruzhit-synology-s-neproverennymi-diskami/</link>
<pubDate>Tue, 30 Dec 2025 12:37:48 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/kak-podruzhit-synology-s-neproverennymi-diskami/</comments>
<description>
&lt;p&gt;Многие уже столкнулись с ошибкой совместимости дисков сторонних производителей с новыми моделями серверов synology. Да, это новая политика для продвижения OEM дисков, производимых под своим брендом.&lt;/p&gt;
&lt;p&gt;Экономя до 30% стоимости на покупке и ставя диски не synology мы теряем возможность мониторинга smart.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-87.png" width="598" height="93" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Ежемесячных отчётов и т. д.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="446" data-ratio="0.94893617021277"&gt;
&lt;img src="https://voronin.one/pictures/image-96.png" width="446" height="470" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-88.png" width="616" height="542" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;и критично это становится, когда мы используем не домашние решения, а большие серверы с дисками SAS, тут разница стоимости дисков может превышать и 500 тыс. руб.&lt;/p&gt;
&lt;p&gt;Зато теперь, благодаря, &lt;a href="https://github.com/007revad"&gt;Дейву Расселу&lt;/a&gt; у нас есть возможность «подружить» диски сторонних производителей с нашим сервером.&lt;/p&gt;
&lt;p&gt;Для применения исправления, нужен доступ к серверу через SSH. Чтобы его включить перейдите в «Панель управления» -&gt; «Терминал» и установите галочку напротив «Включить службу SSH», обязательно смените 22 порт на свой уникальный (49152-65535).&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-89.png" width="800" height="354.42114858706" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;далее подключаемся по SSH (в linux и так понятно) в windows откройте терминал Win+X&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-90.png" width="346" height="556" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;подключитесь к серверу&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-91.png" width="800" height="178.48244620612" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;где&lt;/div&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;адрес_сервера — это имя или ip адрес вашего сервера&lt;/li&gt;
&lt;li&gt;пользователь — это логин администратора сервера (именно дефолтного администратора)&lt;/li&gt;
&lt;li&gt;порт — порт, который назначили службе SSH (см. выше)&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;после подключения перейдите в режим администратора (укажите пароль пользователя)&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;sudo -i&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;теперь создаём папку opt и скачиваем скрипты&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;mkdir -m775 /opt
cd /opt
curl -O &amp;quot;https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_db.sh&amp;quot;
curl -O &amp;quot;https://raw.githubusercontent.com/007revad/Synology_HDD_db/refs/heads/main/syno_hdd_vendor_ids.txt&amp;quot;
chmod 750 /opt/syno_hdd_db.sh&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;выполните скрипт для обновления базы данных дисков&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;/opt/syno_hdd_db.sh&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;скрипт сам определит модель сервера, версию DSM, установленные диски и пропишет их в лист совместимости&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/kak-podruzhit-synology-s-neproverennymi-diskami.png" width="527" height="625" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и практически сразу диски станут «зелёными»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-92.png" width="582" height="645" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;рекомендую запустить «исправление ошибок данных», чтобы всё было идеально&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/kak-podruzhit-synology-s-neproverennymi-diskami-1.png" width="800" height="530.65326633166" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>Скрипт для проверки валидности сертификата сервера</title>
<guid isPermaLink="false">57</guid>
<link>https://voronin.one/all/skript-dlya-proverki-validnosti-sertifikata-servera/</link>
<pubDate>Wed, 24 Dec 2025 18:35:30 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/skript-dlya-proverki-validnosti-sertifikata-servera/</comments>
<description>
&lt;p&gt;Обратились коллеги, скину скрин ошибки соединения с teamwork&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-83.png" width="800" height="642.95874822191" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;надо проверить валидность сертификата&lt;/p&gt;
&lt;p&gt;собственный тест сервера ошибки не выявил&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-84.png" width="800" height="583.47578347578" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;как и собственный тест менеджера подключений&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-85.png" width="800" height="811.59420289855" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;обратите внимание, все соединения защищены шифрованием ssl&lt;/p&gt;
&lt;p&gt;давайте, напишем простой скрипт на bash для тестирования серификата на каждом подключении снаружи&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class="bash"&gt;#!/bin/bash

HOST=&amp;quot;имя сервера&amp;quot; # Замените на ваш домен
#PORT=&amp;quot;443&amp;quot;
PORT=&amp;quot;27001&amp;quot;
DAYS_THRESHOLD=30 # За сколько дней предупреждать об истечении

# 1. Получаем даты окончания сертификата
# -connect: Подключаемся к хосту:порту
# -servername: Указываем SNI (Server Name Indication) для SNI-серверов
# x509 -noout -dates: Извлекаем даты из сертификата
END_DATE_STR=$(openssl s_client -connect $HOST:$PORT -servername $HOST 2&amp;gt;/dev/null | openssl x509 -noout -dates | grep &amp;quot;notAfter&amp;quot;)

if [ -z &amp;quot;$END_DATE_STR&amp;quot; ]; then
    echo &amp;quot;Не удалось получить сертификат или ошибка соединения для $HOST&amp;quot;
    exit 1
fi

# Извлекаем дату в формате &amp;#039;notAfter=...&amp;#039;
END_DATE=$(echo &amp;quot;$END_DATE_STR&amp;quot; | cut -d &amp;#039;=&amp;#039; -f 2)

# 2. Конвертируем дату в секунды с эпохи Unix
# date -d: Парсит дату
# +%s: Выводит в секундах
END_TIMESTAMP=$(date -d &amp;quot;$END_DATE&amp;quot; +%s)
CURRENT_TIMESTAMP=$(date +%s)

# 3. Вычисляем оставшиеся дни
DAYS_LEFT=$(( (END_TIMESTAMP - CURRENT_TIMESTAMP) / 86400 )) # 86400 секунд в дне

echo &amp;quot;Сертификат для $HOST действителен до: $END_DATE ($DAYS_LEFT дней осталось)&amp;quot;

# 4. Проверка на истечение срока
if [ &amp;quot;$DAYS_LEFT&amp;quot; -lt 0 ]; then
    echo &amp;quot;!!! ВНИМАНИЕ: Сертификат для $HOST истек $((-1 * DAYS_LEFT)) дней назад !!!&amp;quot;
elif [ &amp;quot;$DAYS_LEFT&amp;quot; -le &amp;quot;$DAYS_THRESHOLD&amp;quot; ]; then
    echo &amp;quot;!!! ВНИМАНИЕ: Сертификат для $HOST истекает через $DAYS_LEFT дней (менее $DAYS_THRESHOLD) !!!&amp;quot;
else
    echo &amp;quot;Сертификат для $HOST в порядке.&amp;quot;
fi&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ну и результат выполнения (проверял 443 и 27001 порты)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-86.png" width="800" height="57.26872246696" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>traccar на synology</title>
<guid isPermaLink="false">56</guid>
<link>https://voronin.one/all/traccar-na-synology/</link>
<pubDate>Thu, 06 Jun 2024 18:16:21 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/traccar-na-synology/</comments>
<description>
&lt;p&gt;развернём систему &lt;a href="https://www.traccar.org/"&gt;traccar&lt;/a&gt; в Docker Synology&lt;/p&gt;
&lt;p&gt;для начала создадим базу данных&lt;br /&gt;
для простоты воспользуемся двумя пакетами MariaDB и phpMyAdmin&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="135" data-ratio="0.98540145985401"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology.png" width="135" height="137" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/image-82.png" width="142" height="137" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;открываем phpMyAdmin и задаём нового пользователя&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-1.png" width="800" height="550.42735042735" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Заполните поля, имя пользователя лучше сделать уникальным, так будет сложнее взломать сервер. И обязательно поставьте галочку, чтобы создалась база с тем же именем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-15.png" width="674" height="532" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;отлично, дальше создаём структуру для хранения изменяемых данных&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-4.png" width="530" height="220" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;основную папку&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-3.png" width="670" height="181" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;и подпапки&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-6.png" width="225" height="310" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;не забудьте на основной папке отключить наследование&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-7.png" width="330" height="148" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и дать права на запись всем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-8.png" width="736" height="292" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;скачайте с git файл конфигурации &lt;a href="https://github.com/traccar/traccar/blob/master/setup/traccar.xml"&gt;https://github.com/traccar/traccar/blob/master/setup/traccar.xml&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;и отредактируйте конфигурацию подключения к базе данных&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-2.png" width="800" height="264.1056422569" alt="" /&gt;
&lt;/div&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;&amp;lt;?xml version=&amp;quot;1.0&amp;quot; encoding=&amp;quot;UTF-8&amp;quot;?&amp;gt;
&amp;lt;!DOCTYPE properties SYSTEM &amp;#039;http://java.sun.com/dtd/properties.dtd&amp;#039;&amp;gt;
&amp;lt;properties&amp;gt;

    &amp;lt;!-- Documentation: https://www.traccar.org/configuration-file/ --&amp;gt;

    &amp;lt;entry key=&amp;#039;database.driver&amp;#039;&amp;gt;com.mysql.cj.jdbc.Driver&amp;lt;/entry&amp;gt;
    &amp;lt;entry key=&amp;#039;database.url&amp;#039;&amp;gt;jdbc:mysql://ip_of_synology:3306/traccar_db?serverTimezone=UTC&amp;amp;amp;useSSL=false&amp;amp;amp;allowMultiQueries=true&amp;amp;amp;autoReconnect=true&amp;amp;amp;useUnicode=yes&amp;amp;amp;characterEncoding=UTF-8&amp;amp;amp;sessionVariables=sql_mode=&amp;#039;&amp;#039;&amp;lt;/entry&amp;gt;
    &amp;lt;entry key=&amp;#039;database.user&amp;#039;&amp;gt;traccar_db&amp;lt;/entry&amp;gt;
    &amp;lt;entry key=&amp;#039;database.password&amp;#039;&amp;gt;password&amp;lt;/entry&amp;gt;

&amp;lt;/properties&amp;gt;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;файл загрузите на сервер synology в папку /docker/traccar/conf&lt;/p&gt;
&lt;p&gt;дальше идём в Docker synology и жмём создать проект&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-10.png" width="800" height="325.05263157895" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;заполняем поля&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-11.png" width="745" height="584" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;пишем следующий compose.yaml&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;version: &amp;#039;3&amp;#039;
services:
  traccar:
    container_name: traccar_latest
    image: traccar/traccar:debian
    volumes:
      - /volume1/docker/traccar/conf/traccar.xml:/opt/traccar/conf/traccar.xml:rw
      - /volume1/docker/traccar/logs:/opt/traccar/logs:rw
    network_mode: &amp;#039;host&amp;#039;
    restart: always&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;жмём далее и тут можно было бы сразу создать свой web портал, но приложение использует в работе web интерфейса протокол websocket, а его можно настроить только в «Обратном прокси»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-12.png" width="747" height="587" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём и запускаем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-13.png" width="749" height="590" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-14.png" width="659" height="424" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;в случае проблем запуска контейнера — смотрите логи docker/traccar/logs/tracker-server.log&lt;/p&gt;
&lt;p&gt;дальше осталось настроить «Обратный прокси» и выпустить сертификат&lt;/p&gt;
&lt;p&gt;я думаю, вы уже зарегистрировали домен для вашего сервиса&lt;/p&gt;
&lt;p&gt;открываем «Панель управления» -&gt; «Дополнительно» -&gt; «Обратный прокси»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-9.png" width="710" height="717" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём правило для вашего домена&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-16.png" width="600" height="565" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;не забудем включить поддержку Websocket&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-17.png" width="605" height="564" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;так же опционально сделаем подключение через ssl&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-18.png" width="606" height="566" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и Websocket не забываем&lt;/p&gt;
&lt;p&gt;остался последний штрих — выпустить Let’s Ecnrypt сертификат&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-19.png" width="800" height="628.36710369487" alt="" /&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;div class="fotorama" data-width="652" data-ratio="1.1833030852995"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-20.png" width="652" height="551" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-21.png" width="655" height="558" alt="" /&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-22.png" width="656" height="556" alt="" /&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;там же идём в настройки&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-23.png" width="800" height="432.18390804598" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и назначаем сертификат нашему домену&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/traccar-na-synology-24.png" width="603" height="423" alt="" /&gt;
&lt;/div&gt;
</description>
</item>

<item>
<title>WEB RustDesk на Synology</title>
<guid isPermaLink="false">55</guid>
<link>https://voronin.one/all/web-rustdesk-na-synology/</link>
<pubDate>Tue, 03 Oct 2023 15:29:40 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/web-rustdesk-na-synology/</comments>
<description>
&lt;p&gt;Если у вас настроен свой сервер ретрансляции в локальной сети, то вы замечали, наверное, что подключение к машинам в LAN происходит великолепно, а вот снаружи не получится.&lt;/p&gt;
&lt;p&gt;Есть «костыль», который решит вашу проблему, давайте настроим web сервер для RustDesk, который будет находится в той же сети, что и ретранслятор, и поможет не имея приложения-клиента подключаться к любой машине в LAN.&lt;/p&gt;
&lt;p&gt;Воспользуемся Docker на Synology.&lt;/p&gt;
&lt;p&gt;Для начала найдём в реестре контейнер &lt;b&gt;rustdesk-web-client&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-78.png" width="800" height="252.98570227082" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и скачаем его&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-79.png" width="800" height="329.62298025135" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;после скачивания выбираем «Запустить»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-80.png" width="800" height="406.21266427718" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;пробросим 5000 порт на 35000, чтобы не конфликтовал с  synology&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/web-rustdesk-na-synology.png" width="733" height="571" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;остальное оставляем по-умолчанию&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/web-rustdesk-na-synology-1.png" width="731" height="577" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь просто в браузере открываем на наш synology порт 35000&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/web-rustdesk-na-synology-5.png" width="706" height="476" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;готово&lt;/p&gt;
</description>
</item>

<item>
<title>RustDesk на Synology</title>
<guid isPermaLink="false">54</guid>
<link>https://voronin.one/all/rustdesk-na-synology/</link>
<pubDate>Tue, 03 Oct 2023 13:07:38 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/rustdesk-na-synology/</comments>
<description>
&lt;p&gt;запустим свой сервер ретрансляции для RustDesk на Synology&lt;/p&gt;
&lt;p&gt;за основу взял статью на официальном сайте: &lt;a href="https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/docker/"&gt;https://rustdesk.com/docs/en/self-host/rustdesk-server-oss/docker/&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;нам потребуется создать на компьютере файл &lt;b&gt;docker-compose.yml&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;version: &amp;#039;3&amp;#039;

services:
  hbbs:
    container_name: hbbs
    image: rustdesk/rustdesk-server:latest
    command: hbbs
    volumes:
      - ./data:/root
    network_mode: &amp;quot;host&amp;quot;

    depends_on:
      - hbbr
    restart: unless-stopped


  hbbr:
    container_name: hbbr
    image: rustdesk/rustdesk-server:latest
    command: hbbr
    volumes:
      - ./data:/root
    network_mode: &amp;quot;host&amp;quot;
    restart: unless-stopped&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;на Synology создайте папку &lt;b&gt;RustDesk&lt;/b&gt; в структуре &lt;b&gt;/volume1/docker&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-65.png" width="777" height="411" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;далее в папке &lt;b&gt;RustDesk&lt;/b&gt; создайте папку &lt;b&gt;data&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-66.png" width="702" height="324" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и дайте на неё полные права для записи&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-67.png" width="645" height="260" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь откройте &lt;b&gt;Container Manager&lt;/b&gt; и нажмите кнопку создать&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-68.png" width="800" height="439.31623931624" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;заполните соответствующие поля и укажите путь к файлу &lt;b&gt;docker-compose.yml&lt;/b&gt; на компьютере&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-69.png" width="734" height="575" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;настройки веб-портала я пропустил&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-70.png" width="731" height="364" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;создаём и запускаем&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-71.png" width="726" height="568" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;ждём когда скачаются соответствующие образы и сформируются контейнеры&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-72.png" width="636" height="406" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;всё готово и наш проект запустился&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-73.png" width="800" height="291.05058365759" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;внутри него два зависимых контейнера&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-74.png" width="800" height="234.03185247276" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;можно смотреть их свойства, например, журнал сервера&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-75.png" width="800" height="423.09623430962" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;а в папке &lt;b&gt;/volume1/docker/RustDesk&lt;/b&gt; появился файл &lt;b&gt;compose.yaml&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-76.png" width="800" height="318.81918819188" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;в папке &lt;b&gt;data&lt;/b&gt; структура файлов и нужный нам для подключения публичный ключ&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-77.png" width="800" height="343.99008674102" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;готово&lt;/p&gt;
&lt;p&gt;PS не забудьте дать доступ к портам вашего synology&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;TCP (21115, 21116, 21117, 21118, 21119)&lt;/li&gt;
&lt;li&gt;UDP (21116)&lt;/li&gt;
&lt;/ul&gt;
</description>
</item>

<item>
<title>Ставим Rustdesk на synology</title>
<guid isPermaLink="false">53</guid>
<link>https://voronin.one/all/stavim-rustdesk-na-synology/</link>
<pubDate>Wed, 09 Aug 2023 14:19:05 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/stavim-rustdesk-na-synology/</comments>
<description>
&lt;p&gt;Воспользуемся пакетом «Container manager»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-61.png" width="130" height="106" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Для вашей простоты я уже подготовил рабочие конфигурации, вам лишь осталось немного подготовить сервер, для этого создайте папку общего доступа &lt;b&gt;RustDesk&lt;/b&gt;. Все настройки безопасности по-умолчанию.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-62.png" width="605" height="447" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;внутри папки общего доступа создадим подпапки, в них будут храниться настройки сервиса&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-63.png" width="156" height="89" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Затем в «Container manager» найдите и загрузите образ &lt;b&gt;rustdesk/rustdesk-server&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-64.png" width="800" height="288.84688090737" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;ну, а теперь самое простое, ниже выкладываю листинги настроенных конфигураций контейнеров&lt;/p&gt;
&lt;p&gt;сохраните этот в файл с именем &lt;b&gt;hbbr.json&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;{
   &amp;quot;CapAdd&amp;quot; : null,
   &amp;quot;CapDrop&amp;quot; : null,
   &amp;quot;cmd&amp;quot; : &amp;quot;hbbr&amp;quot;,
   &amp;quot;cpu_priority&amp;quot; : 50,
   &amp;quot;enable_publish_all_ports&amp;quot; : false,
   &amp;quot;enable_restart_policy&amp;quot; : false,
   &amp;quot;enable_service_portal&amp;quot; : null,
   &amp;quot;enabled&amp;quot; : true,
   &amp;quot;env_variables&amp;quot; : [
      {
         &amp;quot;key&amp;quot; : &amp;quot;PATH&amp;quot;,
         &amp;quot;value&amp;quot; : &amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;
      }
   ],
   &amp;quot;exporting&amp;quot; : false,
   &amp;quot;id&amp;quot; : &amp;quot;79ece58ece789b007f88a1940cc2a93737b47eca9de138e4a99d46efa4fa274e&amp;quot;,
   &amp;quot;image&amp;quot; : &amp;quot;rustdesk/rustdesk-server:latest&amp;quot;,
   &amp;quot;is_ddsm&amp;quot; : false,
   &amp;quot;is_package&amp;quot; : false,
   &amp;quot;labels&amp;quot; : {
      &amp;quot;org.opencontainers.image.created&amp;quot; : &amp;quot;2022-09-02T10:46:15.873Z&amp;quot;,
      &amp;quot;org.opencontainers.image.description&amp;quot; : &amp;quot;RustDesk Server Program&amp;quot;,
      &amp;quot;org.opencontainers.image.licenses&amp;quot; : &amp;quot;AGPL-3.0&amp;quot;,
      &amp;quot;org.opencontainers.image.revision&amp;quot; : &amp;quot;4bdc205fca189e2d3e8207d2a68c0dd9c166429d&amp;quot;,
      &amp;quot;org.opencontainers.image.source&amp;quot; : &amp;quot;https://github.com/rustdesk/rustdesk-server&amp;quot;,
      &amp;quot;org.opencontainers.image.title&amp;quot; : &amp;quot;rustdesk-server&amp;quot;,
      &amp;quot;org.opencontainers.image.url&amp;quot; : &amp;quot;https://github.com/rustdesk/rustdesk-server&amp;quot;,
      &amp;quot;org.opencontainers.image.version&amp;quot; : &amp;quot;1.1.6-1&amp;quot;
   },
   &amp;quot;links&amp;quot; : [],
   &amp;quot;memory_limit&amp;quot; : 0,
   &amp;quot;name&amp;quot; : &amp;quot;hbbr&amp;quot;,
   &amp;quot;network&amp;quot; : [
      {
         &amp;quot;driver&amp;quot; : &amp;quot;host&amp;quot;,
         &amp;quot;name&amp;quot; : &amp;quot;host&amp;quot;
      }
   ],
   &amp;quot;network_mode&amp;quot; : &amp;quot;host&amp;quot;,
   &amp;quot;port_bindings&amp;quot; : [],
   &amp;quot;privileged&amp;quot; : false,
   &amp;quot;services&amp;quot; : null,
   &amp;quot;shortcut&amp;quot; : {
      &amp;quot;enable_shortcut&amp;quot; : false,
      &amp;quot;enable_status_page&amp;quot; : false,
      &amp;quot;enable_web_page&amp;quot; : false,
      &amp;quot;web_page_url&amp;quot; : &amp;quot;&amp;quot;
   },
   &amp;quot;use_host_network&amp;quot; : true,
   &amp;quot;version&amp;quot; : 2,
   &amp;quot;volume_bindings&amp;quot; : [
      {
         &amp;quot;host_volume_file&amp;quot; : &amp;quot;/RustDesk/hbbr&amp;quot;,
         &amp;quot;is_directory&amp;quot; : true,
         &amp;quot;mount_point&amp;quot; : &amp;quot;/root&amp;quot;,
         &amp;quot;type&amp;quot; : &amp;quot;rw&amp;quot;
      }
   ]
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;и второй файл сохраните с именем &lt;b&gt;hbbs.json&lt;/b&gt; и обязательно отредактируйте, заменив &lt;b&gt;SYNOLOGY_IP&lt;/b&gt; на ip вашего сервера&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;{
   &amp;quot;CapAdd&amp;quot; : null,
   &amp;quot;CapDrop&amp;quot; : null,
   &amp;quot;cmd&amp;quot; : &amp;quot;hbbs -r SYNOLOGY_IP&amp;quot;,
   &amp;quot;cpu_priority&amp;quot; : 50,
   &amp;quot;enable_publish_all_ports&amp;quot; : false,
   &amp;quot;enable_restart_policy&amp;quot; : false,
   &amp;quot;enable_service_portal&amp;quot; : null,
   &amp;quot;enabled&amp;quot; : true,
   &amp;quot;env_variables&amp;quot; : [
      {
         &amp;quot;key&amp;quot; : &amp;quot;PATH&amp;quot;,
         &amp;quot;value&amp;quot; : &amp;quot;/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin&amp;quot;
      }
   ],
   &amp;quot;exporting&amp;quot; : false,
   &amp;quot;id&amp;quot; : &amp;quot;5072e615b973f22d24e46b3517cd999ee1a04d317d3dad8c6cc47fb074e16953&amp;quot;,
   &amp;quot;image&amp;quot; : &amp;quot;rustdesk/rustdesk-server:latest&amp;quot;,
   &amp;quot;is_ddsm&amp;quot; : false,
   &amp;quot;is_package&amp;quot; : false,
   &amp;quot;labels&amp;quot; : {
      &amp;quot;org.opencontainers.image.created&amp;quot; : &amp;quot;2022-09-02T10:46:15.873Z&amp;quot;,
      &amp;quot;org.opencontainers.image.description&amp;quot; : &amp;quot;RustDesk Server Program&amp;quot;,
      &amp;quot;org.opencontainers.image.licenses&amp;quot; : &amp;quot;AGPL-3.0&amp;quot;,
      &amp;quot;org.opencontainers.image.revision&amp;quot; : &amp;quot;4bdc205fca189e2d3e8207d2a68c0dd9c166429d&amp;quot;,
      &amp;quot;org.opencontainers.image.source&amp;quot; : &amp;quot;https://github.com/rustdesk/rustdesk-server&amp;quot;,
      &amp;quot;org.opencontainers.image.title&amp;quot; : &amp;quot;rustdesk-server&amp;quot;,
      &amp;quot;org.opencontainers.image.url&amp;quot; : &amp;quot;https://github.com/rustdesk/rustdesk-server&amp;quot;,
      &amp;quot;org.opencontainers.image.version&amp;quot; : &amp;quot;1.1.6-1&amp;quot;
   },
   &amp;quot;links&amp;quot; : [],
   &amp;quot;memory_limit&amp;quot; : 0,
   &amp;quot;name&amp;quot; : &amp;quot;hbbs&amp;quot;,
   &amp;quot;network&amp;quot; : [
      {
         &amp;quot;driver&amp;quot; : &amp;quot;host&amp;quot;,
         &amp;quot;name&amp;quot; : &amp;quot;host&amp;quot;
      }
   ],
   &amp;quot;network_mode&amp;quot; : &amp;quot;host&amp;quot;,
   &amp;quot;port_bindings&amp;quot; : [],
   &amp;quot;privileged&amp;quot; : false,
   &amp;quot;services&amp;quot; : null,
   &amp;quot;shortcut&amp;quot; : {
      &amp;quot;enable_shortcut&amp;quot; : false,
      &amp;quot;enable_status_page&amp;quot; : false,
      &amp;quot;enable_web_page&amp;quot; : false,
      &amp;quot;web_page_url&amp;quot; : &amp;quot;&amp;quot;
   },
   &amp;quot;use_host_network&amp;quot; : true,
   &amp;quot;version&amp;quot; : 2,
   &amp;quot;volume_bindings&amp;quot; : [
      {
         &amp;quot;host_volume_file&amp;quot; : &amp;quot;/RustDesk/hbbs&amp;quot;,
         &amp;quot;is_directory&amp;quot; : true,
         &amp;quot;mount_point&amp;quot; : &amp;quot;/root&amp;quot;,
         &amp;quot;type&amp;quot; : &amp;quot;rw&amp;quot;
      }
   ]
}&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;далее идём в «Container manager» -&gt; Контейнер -&gt; Импорт -&gt; С локального устройства&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/stavim-rustdesk-na-synology.png" width="800" height="383.38945005612" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;и выбираем по очереди наши json файлы&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/stavim-rustdesk-na-synology-1.png" width="636" height="199" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;после того, как мы их импортировали — можно запускать «Действие» -&gt; «Пуск»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/stavim-rustdesk-na-synology-2.png" width="475" height="163" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь идём в Журнал контейнера hbbs и ищем запись, куда сохранён публичный ключ&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/stavim-rustdesk-na-synology-3.png" width="800" height="356.74769488684" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;файл лежит в папке, которую мы делали выше&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/stavim-rustdesk-na-synology-4.png" width="800" height="242.61555806088" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;готово! все молодцы.&lt;/p&gt;
</description>
</item>

<item>
<title>замена вложения в почтовом сообщении</title>
<guid isPermaLink="false">52</guid>
<link>https://voronin.one/all/zamena-vlozheniya-v-pochtovom-soobschenii/</link>
<pubDate>Mon, 31 Jul 2023 19:29:26 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/zamena-vlozheniya-v-pochtovom-soobschenii/</comments>
<description>
&lt;p&gt;действуем в несколько этапов:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;подключаем к нашей почте клиент Thunderbird&lt;/li&gt;
&lt;li&gt;устанавливаем расширение ImportExportTools NG&lt;/li&gt;
&lt;li&gt;загружаем письмо на локальный компьютер&lt;/li&gt;
&lt;li&gt;редактируем содержимое письма&lt;/li&gt;
&lt;li&gt;загружаем обратно письмо на сервер&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;первый пункт я пропущу, т. к. для этого есть официальные инструкции (не важно какой у вас почтовый сервер)&lt;/p&gt;
&lt;p&gt;для того, чтобы установить расширение, нажмите Alt и в меню выберите «Инструменты» -&gt; «Дополнения и темы»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-45.png" width="602" height="335" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;через поиск найдите расширение &lt;b&gt;ImportExportTools NG&lt;/b&gt; и установите его&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-46.png" width="800" height="369.23076923077" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;далее мы получаем сообщение с вложением (роза)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-47.png" width="800" height="482.10180623974" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;далее скачиваем письмо в формате eml&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-48.png" width="629" height="698" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;если пользуетесь windows — то проще воспользоваться Total Commander и Notepad++, если другая платформа — пишите в комментарии, я дополню инструкцию&lt;/p&gt;
&lt;p&gt;получаем такой файл&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-49.png" width="412" height="123" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;готовим документ, на который нам надо заменить исходный, кодируем его в формат base64&lt;br /&gt;
отметьте файл для кодирования и в меню выберите «Кодировать (MIME, UUE, XXE)...»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-50.png" width="421" height="437" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;кодируем в ту же папку, выбрав формат «MIME (Base64)»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-51.png" width="407" height="172" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;был файл «.jpeg», стал «.b64»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-52.png" width="405" height="94" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;открываем файл в редакторе Notepad++ и копируем кодированную часть сообщения, пропуская технический заголовок (с 6 строки и до конца)&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-53.png" width="697" height="616" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь открываем для редактирования файл eml, если видите ошибку при открытии — завершите Thunderbird&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-54.png" width="373" height="151" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;закодированные вложения хранятся в конце письма, т. к. изначально почтовый протокол поддерживал передачу только текста, то и бинарные файлы кодируются в текст, обратите внимание:&lt;br /&gt;
1 — разделитель&lt;br /&gt;
2 — служебный заголовок вложения&lt;br /&gt;
3 — само тело вложения&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-55.png" width="693" height="843" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;нам надо заменить само тело вложения, не затрагиваем заголовки и разделитель&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-56.png" width="699" height="700" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;после замены, уберите из атрибутов (в заголовке вложения) размер файла, он изменился, по понятным причинам, а почтовую программу не будем смущать, просто удалите строку&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-57.png" width="701" height="536" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;сохраните письмо!&lt;br /&gt;
осталось загрузить его обратно н сервер&lt;/p&gt;
&lt;p&gt;правый клик на папке «Входящие» -&gt; «ImportExportTools NG» -&gt; «Импортировать файл eml»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-58.png" width="800" height="515.49609810479" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;загружаем наше отредактированное письмо и мы получаем два идентичных письма во «Входящих»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-59.png" width="800" height="576.47058823529" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;одно с розой (обратите внимание на объем сложения)&lt;/div&gt;
&lt;/div&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-60.png" width="800" height="548.21052631579" alt="" /&gt;
&lt;div class="e2-text-caption"&gt;второе с зимнем цветком&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;даже имена вложенных файлов остались идентичны&lt;/p&gt;
&lt;p&gt;это самый надёжный способ замены вложения в существующем письме&lt;/p&gt;
</description>
</item>

<item>
<title>черный и белый список для postfix</title>
<guid isPermaLink="false">50</guid>
<link>https://voronin.one/all/cherny-i-bely-spisok-dlya-postfix/</link>
<pubDate>Thu, 29 Jun 2023 14:09:04 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/cherny-i-bely-spisok-dlya-postfix/</comments>
<description>
&lt;p&gt;Делаем черный и белый список для postfix.&lt;/p&gt;
&lt;p&gt;создаем файл &lt;b&gt;/etc/postfix/rbl_override&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/postfix/rbl_override&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;пишем в него, узлы, которые хотим исключить из проверки&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;1.2.3.4 OK
1.2.3.5 OK
mail.freemailer.tld OK&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;преобразуем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo postmap /etc/postfix/rbl_override&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;осталось подключить к нашей системе, для этого отредактируем &lt;b&gt;/etc/postfix/main.c&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/postfix/main.cf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;находим раздел &lt;b&gt;smtpd_recipient_restrictions&lt;/b&gt; и добавляем &lt;b&gt;check_client_access hash:/etc/postfix/rbl_override&lt;/b&gt; после &lt;b&gt;reject_unauth_destination&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-43.png" width="445" height="176" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;теперь просто перегружаем службу postfix&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo service postfix restart&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>proxmox, настраиваем резервирование на внешний USB диск</title>
<guid isPermaLink="false">48</guid>
<link>https://voronin.one/all/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk/</link>
<pubDate>Wed, 28 Jun 2023 17:44:12 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk/</comments>
<description>
&lt;p&gt;С целью защиты своих данных, я придумал бэкапить виртуальные машины на внешний жесткий диск. Для этого был приобретён seagate на 4Тб.&lt;/p&gt;
&lt;p&gt;Давайте познакомим его с нашим proxmox. После подключения переходим через web интерфейс и убеждаемся видит ли его система.&lt;/p&gt;
&lt;p&gt;Откроем наш PVE сервер, раздел Disks&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-2.png" width="410" height="481" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Обновим список устройств и увидим диск с типом USB&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-11.png" width="800" height="253.43855693348" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Почему наш диск &lt;b&gt;/dev/sda&lt;/b&gt;, поинтересуетесь вы, да потому что первый диск NVMe подключен через m.2 разъем&lt;/p&gt;
&lt;p&gt;Для начала очистим диск от заводских разметок&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk.png" width="771" height="218" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Затем проведём инициализацию&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-1.png" width="765" height="205" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Теперь перейдём в раздел Directory и создадим новую директорию&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-3.png" width="438" height="361" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Выберем наш диск &lt;b&gt;/dev/sda&lt;/b&gt;, укажем файловую систему &lt;b&gt;ext4&lt;/b&gt;, название директории &lt;b&gt;backup&lt;/b&gt; и не забудем галочку «Add storage»&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-4.png" width="327" height="233" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Когда задача будет выполнена — идём в &lt;b&gt;Datacenter&lt;/b&gt; и выбираем &lt;b&gt;Storage&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-5.png" width="407" height="286" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В списке доступных хранений будет наша директория на диске USB&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-6.png" width="800" height="162.29327453142" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Откроем свойства и убедимся, что у нас в списке доступных функций есть &lt;b&gt;VZDump backup file&lt;/b&gt;&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-7.png" width="622" height="328" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Теперь можно настроить ротацию хранения, например хранить 5 последних копий&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-8.png" width="620" height="332" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;В том же разделе &lt;b&gt;Datacenter&lt;/b&gt; перейдём в &lt;b&gt;Backup&lt;/b&gt; и добавим новую задачу&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-9.png" width="327" height="263" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Укажем наш PVE сервер, хранилище &lt;b&gt;backup&lt;/b&gt;, расписание «ежедневно в 4:30», все виртуальные машины, в режиме &lt;b&gt;Snapshot&lt;/b&gt;, с уведомлением на почту в случае ошибки&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/proxmox-nastraivaem-rezervirovanie-na-vneshniy-usb-disk-10.png" width="594" height="234" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Готово! Вы молодцы.&lt;/p&gt;
</description>
</item>

<item>
<title>переносим базу SpamAssassin bayes в MySQL</title>
<guid isPermaLink="false">47</guid>
<link>https://voronin.one/all/perenosim-bazu-spamassassin-bayes-v-mysql/</link>
<pubDate>Tue, 13 Jun 2023 17:59:28 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/perenosim-bazu-spamassassin-bayes-v-mysql/</comments>
<description>
&lt;p&gt;для начала проверим версию SpamAssassin&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ sudo spamassassin -V
SpamAssassin version 3.4.6
  running on Perl version 5.32.1&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;в нашем случае это 3.4.6&lt;/p&gt;
&lt;p&gt;теперь качаем нужный файл со структурой mysql&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ cd ~
$ wget http://svn.apache.org/repos/asf/spamassassin/tags/spamassassin_release_3_4_6/sql/bayes_mysql.sql&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;подключаемся к движку базы и загружаем структуру&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ mysql -uroot -p
MariaDB [(none)]&amp;gt; CREATE DATABASE sa_bayes;
MariaDB [(none)]&amp;gt; USE sa_bayes;
MariaDB [(none)]&amp;gt; SOURCE ~/bayes_mysql.sql;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;создадим пользователя &lt;b&gt;sa_user&lt;/b&gt; с паролем &lt;b&gt;Pa$$W0rd&lt;/b&gt; (замените на свой) и правами на нашу базу&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;MariaDB [(none)]&amp;gt; GRANT SELECT, INSERT, UPDATE, DELETE ON sa_bayes.* TO sa_user@localhost IDENTIFIED BY &amp;#039;Pa$$W0rd&amp;#039;;
MariaDB [(none)]&amp;gt; FLUSH PRIVILEGES;
MariaDB [sa_bayes]&amp;gt; quit;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;отредактируем конфиг &lt;b&gt;/etc/mail/spamassassin/local.cf&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;use_bayes          1
bayes_auto_learn   1
bayes_auto_expire  1

# Store bayesian data in MySQL.
# Please make sure you have correct server address, port and database name.
bayes_store_module Mail::SpamAssassin::BayesStore::MySQL
bayes_sql_dsn      DBI:mysql:sa_bayes:127.0.0.1:3306

# Store bayesian data in PostgreSQL.
# Please make sure you have correct server address, port and database name.
#bayes_store_module Mail::SpamAssassin::BayesStore::PgSQL
#bayes_sql_dsn      DBI:Pg:database=sa_bayes;host=127.0.0.1;port=5432

# SQL username and password.
bayes_sql_username sa_user
bayes_sql_password Pa$$W0rd

# Override the username used for storing data in the database.
# This could be used to group users together to share bayesian filter data.
# You can also use this config option to trick sa-learn to learn data as a specific user.
#bayes_sql_override_username vmail
bayes_sql_override_username amavis&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;рестартим службу&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ sudo service amavis restart&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;проверяем, скармливаем тестовое сообщение&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ sa-learn --spam --username=amavis /usr/share/doc/spamassassin/examples/sample-spam.txt
Learned tokens from 1 message(s) (1 message(s) examined)&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;и проверим наполняемость базы&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$ mysql -uroot -p
MariaDB [(none)]&amp;gt; USE sa_bayes;
MariaDB [sa_bayes]&amp;gt; SELECT username,spam_count,ham_count FROM bayes_vars;
+----------+------------+-----------+
| username | spam_count | ham_count |
+----------+------------+-----------+
| amavis   |          1 |         1 |
+----------+------------+-----------+
1 row in set (0,000 sec)
MariaDB [sa_bayes]&amp;gt; quit;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;и не забудьте отредактировать файл резервирования &lt;b&gt;/var/vmail/backup/backup_mysql.sh&lt;/b&gt;, чтобы добавить и нашу базу&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Databases we should backup.
# Multiple databases MUST be seperated by SPACE.
export DATABASES=&amp;#039;mysql vmail roundcubemail amavisd iredadmin sogo iredapd sa_bayes&amp;#039;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;PS мне скрипт резервирования не пришлось менять, там уже быза бала прописана&lt;/p&gt;
</description>
</item>

<item>
<title>iRedMail и Roundcube</title>
<guid isPermaLink="false">46</guid>
<link>https://voronin.one/all/iredmail-i-roundcube/</link>
<pubDate>Tue, 30 May 2023 17:16:55 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/iredmail-i-roundcube/</comments>
<description>
&lt;p&gt;После установки и настройки iRedMail мы получаем удобный почтовый клиент Roundcube.&lt;/p&gt;
&lt;p&gt;Давайте немного его улучшим для работы.&lt;/p&gt;
&lt;h2&gt;установим необходимые компоненты и обновим существующие модули&lt;/h2&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo apt install composer php-ldap

cd /opt/www/roundcubemail
sudo composer update&lt;/code&gt;&lt;/pre&gt;&lt;h2&gt;установим и включим контекстное меню&lt;/h2&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo composer require johndoh/contextmenu&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/iredmail-i-roundcube-1.png" width="407" height="294" alt="" /&gt;
&lt;/div&gt;
&lt;h2&gt;установим и включим календарь&lt;/h2&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo composer require kolab/calendar&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/iredmail-i-roundcube.png" width="800" height="364.08163265306" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;отредактируем файл с конфигурацией Roundcube &lt;b&gt;/opt/www/roundcubemail/config/config.inc.php&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;// PLUGINS
$config[&amp;#039;plugins&amp;#039;] = [
        &amp;#039;managesieve&amp;#039;,
        &amp;#039;password&amp;#039;,
        &amp;#039;zipdownload&amp;#039;,
        &amp;#039;acl&amp;#039;,
        &amp;#039;markasjunk&amp;#039;,
        &amp;#039;contextmenu&amp;#039;,
        &amp;#039;libkolab&amp;#039;,
        &amp;#039;libcalendaring&amp;#039;,
        &amp;#039;calendar&amp;#039;,
];&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;убедитесь, что у вас в списке плагинов есть &lt;b&gt;’acl’&lt;/b&gt; и &lt;b&gt;’markasjunk’&lt;/b&gt;, первый отвечает за расшаривание почтовых папок, второй за манипуляции со СПАМ сообщениями.&lt;/p&gt;
&lt;h2&gt;включим возможность отмечать сообщения как СПАМ&lt;/h2&gt;
&lt;p&gt;отредактируем файл с конфигурацией ’markasjunk’ &lt;b&gt;/opt/www/roundcubemail/plugins/markasjunk/config.inc.php&lt;/b&gt;&lt;br /&gt;
и укажем следующие значения для параметров:&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$config[&amp;#039;markasjunk2_learning_driver&amp;#039;] = &amp;#039;cmd_learn&amp;#039;;
$config[&amp;#039;markasjunk2_spam_cmd&amp;#039;] = &amp;#039;/usr/bin/sa-learn --spam --username=amavis %f&amp;#039;;
$config[&amp;#039;markasjunk2_ham_cmd&amp;#039;] = &amp;#039;/usr/bin/sa-learn --ham --spam --username=amavis %f&amp;#039;;&lt;/code&gt;&lt;/pre&gt;&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/Screenshot_20230530_171451.png" width="274" height="56" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;PS не забудьте разрешить php исполнение внешних команд, для этого отредактируйте файл &lt;b&gt;/etc/php/7.4/fpm/php.ini&lt;/b&gt;&lt;/p&gt;
&lt;p&gt;и удалите в параметре &lt;b&gt;disable_functions&lt;/b&gt; значение &lt;b&gt;shell_exec&lt;/b&gt;&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;disable_functions = posix_uname,eval,pcntl_wexitstatus,posix_getpwuid,xmlrpc_entity_decode,pcntl_wifstopped,pcntl_wifexited,pcntl_wifsignaled,phpAds_XmlRpc,pcntl_strerror,ftp_exec,pcntl_wtermsig,mysql_pconnect,proc_nice,pcntl_sigtimedwait,posix_kill,pcntl_sigprocmask,fput,phpinfo,system,phpAds_remoteInfo,ftp_login,inject_code,posix_mkfifo,highlight_file,escapeshellcmd,show_source,pcntl_wifcontinued,fp,pcntl_alarm,pcntl_wait,ini_alter,posix_setpgid,parse_ini_file,ftp_raw,pcntl_waitpid,pcntl_getpriority,ftp_connect,pcntl_signal_dispatch,pcntl_wstopsig,ini_restore,ftp_put,passthru,proc_terminate,posix_setsid,pcntl_signal,pcntl_setpriority,phpAds_xmlrpcEncode,pcntl_exec,ftp_nb_fput,ftp_get,phpAds_xmlrpcDecode,pcntl_sigwaitinfo,pcntl_get_last_error,ftp_rawlist,pcntl_fork,posix_setuid&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ну и перезапустим php&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo service php7.4-fpm restart&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;Более полный список расширений вы сможете найти по ссылке: &lt;a href="https://packagist.org/?type=roundcube-plugin"&gt;https://packagist.org/?type=roundcube-plugin&lt;/a&gt;&lt;/p&gt;
</description>
</item>

<item>
<title>Fedora и драйверы Nvidia</title>
<guid isPermaLink="false">45</guid>
<link>https://voronin.one/all/fedora-i-drayvery-nvidia/</link>
<pubDate>Fri, 19 May 2023 10:42:44 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/fedora-i-drayvery-nvidia/</comments>
<description>
&lt;p&gt;Когда вы попробуете установить драйверы, скаченные с официального сервера Nvidia, вам сообщат, что инсталляция возможна только с отключенной графической оболочкой.&lt;/p&gt;
&lt;div class="e2-text-picture"&gt;
&lt;img src="https://voronin.one/pictures/image-40.png" width="735" height="481" alt="" /&gt;
&lt;/div&gt;
&lt;p&gt;Как запустить систему без Иксов, установить видеодрайвер и опять вернуться к графической оболочке?&lt;/p&gt;
&lt;p&gt;всё просто (отключаем графику)&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl set-default multi-user.target
sudo reboot&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;логинимся в терминале и устанавливаем драйверы&lt;/p&gt;
&lt;p&gt;возвращаем всё обратно&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl set-default graphical.target
sudo reboot&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Обновляем clamav на территории РФ</title>
<guid isPermaLink="false">44</guid>
<link>https://voronin.one/all/obnovlyaem-clamav-na-territorii-rf/</link>
<pubDate>Wed, 03 May 2023 13:20:54 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/obnovlyaem-clamav-na-territorii-rf/</comments>
<description>
&lt;p&gt;Есть проблемы с антивирусом clamav на территории РФ, после первоначальной установки он у вас просто не запустится, т. к. не сможет обновить свои базы, как решить?&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/clamav/freshclam.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;редактируем конец файла, указав зеркало «pivotal-clamav-mirror.s3.amazonaws.com»&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;Checks 24
#DatabaseMirror db.local.clamav.net
#DatabaseMirror database.clamav.net
DatabaseMirror pivotal-clamav-mirror.s3.amazonaws.com&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;удалим старый файл с данными об обновлении баз&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo rm /var/lib/clamav/freshclam.dat&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;останавливаем службу обновления антивируса&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl stop clamav-freshclam.service&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;запускаем обновление баз вручную&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo freshclam&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;запускаем службу обновления антивируса&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl start clamav-freshclam.service&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Увеличиваем размер принимаемого сообщения в iRedMail</title>
<guid isPermaLink="false">43</guid>
<link>https://voronin.one/all/uvelichivaem-razmer-prinimaemogo-soobscheniya-v-iredmail/</link>
<pubDate>Wed, 03 May 2023 13:18:44 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/uvelichivaem-razmer-prinimaemogo-soobscheniya-v-iredmail/</comments>
<description>
&lt;p&gt;Увеличим размер почтового сообщения до 35Мб&lt;/p&gt;
&lt;p&gt;меняем настройки postfix&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;postconf -e message_size_limit=36700160
postconf -e mailbox_size_limit=36700160&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перечитываем изменения службой postfix&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl reload postfix&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;редактируем php.ini&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/php/7.4/fpm/php.ini&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ищем переменные и меняем значения на нужные нам&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;memory_limit = 256M;
upload_max_filesize = 35M;
post_max_size = 37M;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;рестартим php&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl restart php7.4-fpm&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;редактируем конфиг roundcube&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /opt/www/roundcubemail/config/config.inc.php&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ищем настройку максимального размера сообщения и меняем значение&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;$config[&amp;#039;max_message_size&amp;#039;] = &amp;#039;35M&amp;#039;;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;редактируем конфиг nginx&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/nginx/conf-enabled/client_max_body_size.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ищем переменную и меняем значение на своё&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;client_max_body_size 100m;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;проверяем правильность конфига&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo nginx -t&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перечитываем изменения службой nginx&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Выпускаем сертификат Let’s encrypt и настраиваем автоматический перевыпуск в iRedMail</title>
<guid isPermaLink="false">42</guid>
<link>https://voronin.one/all/vypuskaem-sertifikat-lets-encrypt-i-nastraivaem-avtomaticheskiy/</link>
<pubDate>Wed, 03 May 2023 13:16:05 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/vypuskaem-sertifikat-lets-encrypt-i-nastraivaem-avtomaticheskiy/</comments>
<description>
&lt;p&gt;устанавливаем certbot&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo apt update
sudo apt install certbot&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;запрашиваем новый сертификат для домена mail.{domain}.ru&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo certbot certonly --webroot --agree-tos --email postmaster@{domain}.ru -d mail.{domain}.ru -w /var/www/html/&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;открываем конфиги nginx и если нужно вносим изменения, сначала для http&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/nginx/sites-enabled/00-default.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;убедились, чтобы эти поля были раскомментированы&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;enable listen [::]:80;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;затем для https&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/nginx/sites-enabled/00-default-ssl.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;убедились, чтобы эти поля были раскомментированы&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;add listen [::]:443 ssl http2;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;проверяем правильность конфига&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo nginx -t&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перечитываем изменения службой nginx&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;редактируем поти к сертификатам, самоподписанные меняем на let’s encrypt&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/nginx/templates/ssl.tmpl&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;находим&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssl_certificate /etc/ssl/certs/iRedMail.crt;
ssl_certificate_key /etc/ssl/private/iRedMail.key;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;меняем на это&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssl_certificate /etc/letsencrypt/live/mail.{domain}.ru/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/mail.{domain}.ru/privkey.pem;&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;проверяем правильность конфига&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo nginx -t&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перечитываем изменения службой nginx&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl reload nginx&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;правим кофиг postfix&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/postfix/main.cf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;находим&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;smtpd_tls_key_file = /etc/ssl/private/iRedMail.key
smtpd_tls_cert_file = /etc/ssl/certs/iRedMail.crt
smtpd_tls_CAfile = /etc/ssl/certs/iRedMail.crt&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;заменяем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;smtpd_tls_key_file = /etc/letsencrypt/live/mail.{domain}.ru/privkey.pem
smtpd_tls_cert_file = /etc/letsencrypt/live/mail.{domain}.ru/cert.pem
smtpd_tls_CAfile = /etc/letsencrypt/live/mail.{domain}.ru/chain.pem&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перечитываем изменения службой postfix&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl reload postfix&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;правим другой кофиг postfix, указываем на необходимость использования tls&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/postfix/master.cf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;добавляем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;465     inet  n       -       n       -       -       smtpd
  -o syslog_name=postfix/smtps
  -o smtpd_tls_wrappermode=yes
  -o smtpd_sasl_auth_enable=yes
  -o smtpd_client_restrictions=permit_sasl_authenticated,reject
  -o content_filter=smtp-amavis:[127.0.0.1]:10026&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перечитываем изменения службой postfix&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl reload postfix&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;правим конфиг dovecot&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/dovecot/dovecot.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;находим&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssl_cert = &amp;lt;/etc/ssl/certs/iRedMail.crt
ssl_key = &amp;lt;/etc/ssl/private/iRedMail.key&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;заменяем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;ssl_cert = &amp;lt;/etc/letsencrypt/live/mail.{domain}.ru/fullchain.pem
ssl_key = &amp;lt;/etc/letsencrypt/live/mail.{domain}.ru/privkey.pem&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перечитываем изменения службой dovecot&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo systemctl reload dovecot&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;осталось добавить в ротацию перевыпуск сертификата, для этого редактируем crontab&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo crontab -e&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;add&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# перевыпуск сертификатов Let&amp;#039;s Encrypt
43 3 9 * * /usr/bin/certbot renew --post-hook &amp;quot;/usr/bin/systemctl reload nginx; /usr/bin/systemctl reload dovecot; /usr/bin/systemctl reload postfix&amp;quot;
45 3 9 * * /usr/sbin/service nginx reload
46 3 9 * * /usr/sbin/service postfix reload
47 3 9 * * /usr/sbin/service dovecot reload&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;не забудьте оставить пустую строку в конце (такие требования синтаксиса crontab)&lt;/p&gt;
</description>
</item>

<item>
<title>Отключаем протокол pop3 iRedMail</title>
<guid isPermaLink="false">41</guid>
<link>https://voronin.one/all/otklyuchaem-protokol-pop3-iredmail/</link>
<pubDate>Wed, 03 May 2023 13:13:34 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/otklyuchaem-protokol-pop3-iredmail/</comments>
<description>
&lt;p&gt;Редактируем конфиг dovecot&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/dovecot/dovecot.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;меняем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Enabled mail protocols.
protocols = pop3 imap sieve lmtp&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;на&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;# Enabled mail protocols.
protocols = imap sieve lmtp&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;перезапускаем dovecot&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo service dovecot restart&lt;/code&gt;&lt;/pre&gt;</description>
</item>

<item>
<title>Cистема индексации lucene для Dovecot (debian)</title>
<guid isPermaLink="false">40</guid>
<link>https://voronin.one/all/cistema-indeksacii-lucene-dlya-dovecot-debian/</link>
<pubDate>Wed, 03 May 2023 13:10:17 +0300</pubDate>
<author></author>
<comments>https://voronin.one/all/cistema-indeksacii-lucene-dlya-dovecot-debian/</comments>
<description>
&lt;p&gt;Крайне рекомендую установить систему индексации lucene, когда ваших писем перевалит за 10 тыс., вы вспомните меня добрым словом 😉&lt;/p&gt;
&lt;p&gt;установим из репозиториев&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo apt update
sudo apt install dovecot-lucene&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;теперь редактируем конфиг dovecot&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo mcedit /etc/dovecot/dovecot.conf&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ищем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mail_plugins = quota mailbox_alias acl mail_log notify&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;меняем на&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;mail_plugins = quota mailbox_alias acl mail_log notify fts fts_lucene&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;ищем&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;plugin {
    # Quota configuration.
    # Reference: http://wiki2.dovecot.org/Quota/Configuration
    quota = dict:user::proxy::quotadict&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;меняем на&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;plugin {
    fts = lucene
    fts_lucene = whitespace_chars=@. normalize default_language=russian
    fts_autoindex = yes

    # Quota configuration.
    # Reference: http://wiki2.dovecot.org/Quota/Configuration
    quota = dict:user::proxy::quotadict&lt;/code&gt;&lt;/pre&gt;&lt;p&gt;осталось только перезапустить dovecot&lt;/p&gt;
&lt;pre class="e2-text-code"&gt;&lt;code class=""&gt;sudo service dovecot restart&lt;/code&gt;&lt;/pre&gt;</description>
</item>


</channel>
</rss>