Записки IT специалиста
8.8K subscribers
2.32K photos
57 videos
16 files
2.52K links
IT-канал, просто о сложном
https://interface31.ru

Купить рекламу:
https://telega.in/c/interface31
Download Telegram
Какие DNS-протоколы вы используете? Доступно несколько ответов.
Anonymous Poll
56%
Обычный DNS
18%
DNS over TLS (DoT)
38%
DNS over HTTPS (DoH)
3%
DNS over QUIC (DoQ)
4%
DNSCrypt
20%
Просто посмотреть ответы
👍31
Некоторые мысли по поводу организации DNS-трафика в сетях с Mikrotik

Последние нововведения буквально уже прямым текстом говорят, что незащищенный DNS-трафик становится небезопасен и может потенциально принести множество проблем на ровном месте.

Сегодня мы рассмотрим один из возможных вариантов в сетях с использованием в качестве шлюза роутеров Mikrotik.

Ой, да что там думать, скажет иной читатель, включаем DoH и понеслась! Но не все так просто. При включении DoH перестают работать записи типа FWD, что во многих случаях неприемлемо, поэтому нужно искать другое решение.

Завернуть DNS-запросы в трубу… Ну такое себе решение, скажем честно. Труба в наше время может отвалиться в любой момент, и тогда вся ваша сеть вообще окажется без DNS.

Поэтому работать надо через основное подключение, но исключительно по защищенным протоколам.

Сегодня в домашней сети был опробован данный вариант и результат его можно считать отличным.

Мы не будем вдаваться в технические подробности, сделаем это позже, в других заметках, а обрисуем общую канву, тем более что вариативность здесь достаточная.

Для разрешения запросов мы подняли дополнительный кеширующий DNS-сервер Unbound, но вы можете использовать любое иное решение, главное, чтобы оно умело использовать в качестве апстрима сервера DoT/DoH.

Как вы уже должны были понять, в качестве вышестоящего сервера для Unbound мы использовали один из публичных серверов по протоколу DoT.

Почему DoT, а не DoH? DoT проще в настройке и позволяет четко определять такой трафик, что полезно если вы используете сложные правила фильтрации. С другой стороны, это делает видимым такой трафик для провайдера, но доступа к нему он все равно не имеет.

Смысла прятать факт наличия DNS-трафика в зашифрованном виде особо нет, но если вы хотите скрыть такую активность, то лучше использовать DoH. В общем – на ваш выбор.

После чего в качестве используемого DNS-сервера для Mikrotik указываем адрес нашего Unbound. Для клиентов сети основным DNS как был Mikrotik, так и остался, это нужно для того, чтобы работали FWD записи и разные другие правила.

Этот режим показан на диаграмме зелеными стрелочками. DNS-запрос приходит на Mikrotik и если его не нужно перенаправлять на какой-либо специфический сервер, то он уходит на Unbound, а с него по DoT/DoH на выбранный вышестоящий DNS-сервер.

А что будет, если клиент явно укажет на своем устройстве другие DNS-сервера? Все просто, решаем при помощи правила на Mikrotik:

/ip firewall nat
add action=dst-nat chain=dstnat comment="SAFE DNS" dst-address=!192.168.1.0/24 dst-port=53 protocol=udp to-addresses=192.168.1.53


Где 192.168.1.0/24 – адрес вашей внутренней сети, а 192.168.1.53 – адрес сервера Unbound.

После чего ваш роутер будет перехватывать все транзитные DNS-запросы и отправлять их на ваш Unbound-сервер. Этот режим показан на схеме голубыми стрелочками.

Также для контроля возможной утечки DNS советуем вам на первых порах добавить в брандмауэр, на самый верх, еще два правила:

/ip firewall filter
add action=passthrough chain=output dst-address=!192.168.1.0/24 dst-port=53 log=yes log-prefix=LEAK_DNS protocol=udp
add action=passthrough chain=forward dst-address=!192.168.1.0/24 dst-port=53 log=yes log-prefix=LEAK_DNS protocol=udp


Если вдруг счетчики по этим правилам показывают значения отличные от нуля, то переходим в лог и ищем записи с префиксом LEAK_DNS по которым смотрим кто и куда пытался пойти в обход нашей схемы.

Сразу дадим одну наколку, если у вас используются коммутируемые подключения или вы получаете настройки по DHCP – обязательно снимите галочку Use Peer DNS.

Данная схема не претендует на полноту и оригинальность, но поставленную задачу она полностью решила – открытые DNS запросы более за пределы локальной сети не уходят.
1👍24💯21
А можно мы сами?

- А у нас тут 1С не запускается, пишет недостаточно места…

- Значит недостаточно места, надо почистить.

- А если вы подключитесь, то возьмете как за час работы?

- Да, это минимальная такса.

- Но там же просто место почистить.

- Да какая разница, мы тратим свое время. Время – деньги.

- А можно мы сами почистим?

- Можно.

На следующий день сообщают, что они почистили, место есть, но теперь 1С вообще не запускается. 😫

Наверное, вы уже догадались, они удалили самую большую папку в корне диска, с простым и понятным названием «СТ», в которой была база 1С. 🤦‍♀️

Сэкономили денег, однако.

Последний бекап от марта месяца. Но документов немного, дня за два-три в пару рук внесут все обратно.

Морали не будет. Каждый сам определяет, что дорого, а что нет. И несет последствия своего выбора.
👍45😁25🔥7🤝31
Не спеши, а то успеешь

В начале нашей заметки я расскажу одну поучительную историю. В студенческие годы физрук подрядил нас почистить от снега спортплощадку. Срок – пара. Ну мы минут за 30 справились, пришли к нему гордые и довольные.

А он отправил нас… обратно снег по спортплощадке разбрасывать. Ну бывший военный, что с него взять. Но, оказалось, в этом действе был заложен глубокий смысл. Который он нам наглядно продемонстрировал.

Любые нормы на чем-то да основаны, проверены временем и т.д. и т.п. Сказали чистить снег пару – значит пару. Это сегодня снега пару сантиметров выпало, и вы за полчаса справились, а завтра его по колено наметет? А норма – штука такая, если ее регулярно перевыполнять, то ее обязательно поднимут (или сократят) и легче никому от этого не станет.

Это правило я тогда запомнил, и оно сильно помогает по жизни. Вот есть работа, которая по нормам занимает два часа, а вы набили руку и делаете ее за час. Не спешите никого радовать. Два часа и точка!

Иначе через некоторое время нормой у вас будет именно час и если что-то вдруг пойдет не так, то запаса по времени у вас не будет и никто даже слушать не захочет про два часа, потому что это было давно и неправда, а не справились вы сейчас.

Ну ладно, это заказчик внутренний, а внешнему можно и сдать пораньше, получить денег и радоваться жизни. Оно, конечно, можно, но при условии, что вы этого заказчика видите первый и последний раз.

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

Еще хуже, если это проект с большим количеством этапов. На проекте самой большой ценностью является время. И если у вас указано, что данный этап занимает неделю – занимайтесь неделю, даже если справились за три дня.

Не спешите сдавать этот этап, оставьте эти два дня себе, есть возможность – начните работу над следующим этапом или просто подготовьтесь к нему, что делать – всегда найдется. Но у вас будет запас времени.

Сдали этап – такого запаса нет, приступайте к следующему. И далеко не факт, что, быстро взяв старт вы не упадете лицом в асфальт, потому что забыли завязать шнурки.

На любом проекте, как его не прорабатывай, всегда что-то да всплывет и запас по времени тут будет настоящим спасательным кругом.

Но даже если вы успешно «выполнили пятилетку за три года» ничего хорошего из этого не выйдет. Потому что заказчик поймет, что вы можете работать быстрее, а также то, что вы не умеете ставить и выдерживать сроки.

А это значит, что можно на эту тему вас прогнуть и на следующий проект установить сроки самостоятельно. Итог – вы в цейтноте и бегаете в мыле по потолку, чтобы успеть выполнить все работы. Оно вам надо?

На недостаток времени жалуются многие коллеги, но если копнуть поглубже и провести разбор полетов, то выясняется, что в эту ситуацию они загнали себя сами.

Любую норму или план можно перевыполнить только один раз, в этом случае вас похвалят и дадут конфетку, второй раз вас просто одобрительно похлопают по плечу, а на третий сделают замечание, что плохо работаете, недорабатываете.

Для себя я давно вывел некоторые эмпирические коэффициенты, любые материалы на проекте умножаем на 1,25, а время просто увеличиваем в полтора, а то и два раза. Запас карман не тянет, особенно если это такой ресурс, как время.
👍3511🔥4👨‍💻2
Hacknect – беспроводной USB-кабель для взлома
 
Казалось бы, что может быть безобиднее простого кабеля USB? Деталь максимально рутинная и привычная. Ну воткнут и воткнут, наверное, надо так, подключено чего-то.
 
Только вот подключено может быть совсем не чего-то, а настоящий хакерский инструмент. На Kickstarter  засветился интересный девайс - на вид обычный USB-кабель, который содержит в своем составе: микроконтроллер ESP32-S3, microSD-карту и модуль Wi-Fi.
 
Возможности тоже богатые:
 
▫️ Внедрение нажатий клавиш — выполнение автоматизированных клавиатурных команд с использованием высокоскоростной эмуляции HID.

▫️ Внедрение действий мыши — имитация сложных движений курсора и автоматизация действий.

▫️ Слоты для полезной нагрузки — хранение и управление несколькими полезными нагрузками непосредственно на устройстве.

▫️ Wi-Fi-триггеры — запуск действий по беспроводной команде со смартфона или компьютера.

▫️ Веб-панель управления — полный контроль над Hacknect через браузер.

▫️ Однократный запуск полезной нагрузки — мгновенное выполнение команды одним щелчком.

▫️ Два в одном USB + TF — встроенная поддержка microSD/TF-карты прямо в разъёме USB-A.

▫️ USB-интерфейс полной скорости — быстрая и отзывчивая USB-связь.

▫️ Режим самоуничтожения — быстрое удаление сохранённых полезных нагрузок и конфиденциальных данных.

▫️ Компактный скрытый дизайн — выглядит как обычный повседневный USB-кабель.

▫️ Совместимость с мобильными и настольными устройствами — работает с телефонами, планшетами, ноутбуками и ПК.
 
Управляется все удаленно, через браузер. Радует, разве только то, что управление ограничено дальностью модулей беспроводной связи. Но лиха беда начало.
 
Поэтому теперь нужно постоянно приглядываться к привычным на вид вещам и постоянно думать, а нет ли тут чего? А лучше всего вообще не использовать никакие чужие устройства, даже кабели.
 
Паранойя? Может быть, но в этом деле лучше перебдеть, чем недобдеть.
👀16👍116🤷‍♂2👨‍💻1
witr – или почему это работает?
 
witr – удобная интерактивная утилита название которой составлено как аббревиатура от фразы «Why is this running?» (почему это работает) и в этом заключается основное назначение этой утилиты.
 
Как пишет сам разработчик, основные задачи, которые выполняет утилита заключаются в быстром ответе на вопросы:
 
▫️ Что это запущено?
▫️ Как оно было запущено?
▫️ Что отвечает за его работу?
▫️ В каком контексте оно работает?
 
Утилита следует принципу одного экрана, что облегчает понимание ситуации и не заставляет пользователя переключаться, чтобы сопоставить различные источники информации. Что, по мнению разработчика, важно в условиях стресса при расследовании сбоев или вторжений.
 
И тут мы с ним полностью согласимся. Каждый кто занимался расследованием непонятных инцидентов знает, как важно быстро получить и сопоставить, а потом еще интерпретировать информацию из различных источников, особенно в условии авральной ситуации.
 
Сам по себе witr не сообщит вам ничего нового, всю эту информацию можно получить самостоятельно, воспользовавшись ps, top, lsof, ss, systemctl, docker ps и т.д. Но, если вы не занимаетесь этим постоянно, то вам нужно помнить или искать нужные ключи, собирать и сопоставлять информацию, пытаться сделать правильные выводы.
 
Здесь же вы быстро получите всю возможную картину в одном месте, существенно сэкономив себе время и перейдя от догадок к уверенности.
 
Для установки утилиты воспользуйтесь скриптом от разработчика. Для Linux, macOS или FreeBSD выполните:
 
curl -fsSL https://raw.githubusercontent.com/pranshuparmar/witr/main/install.sh | bash

 
Для Windows:
 
irm https://raw.githubusercontent.com/pranshuparmar/witr/main/install.ps1 | iex

 
Отметим, что версия утититы для Windows обладает более узкими возможностями, в частности не умеет работать с файлами.
 
После чего просто запустите ее от имени суперпользователя или sudo:
 
sudo witr

 
По умолчанию мы попадаем в интерактивный режим, перед нами открыт список процессов и переходя по ним мы можем сразу посмотреть всю его подноготную. В нашем случае показан процесс mc. Мы разу видим, что запущен он из SSH-сессии, в которой были повышены права через su.
 
Для подробностей мы можем нажать Enter и посмотреть подробное описание процесса, здесь мы уже видим кем и откуда запущен процесс, его рабочую директорию, переменные окружения, статистику его работы.
 
Следующая закладка – сетевые порты, по умолчанию показаны только порты в режиме прослушивания, но нажав кнопку a можно увидеть все используемые сетевые порты, и мы сразу видим связанный с этим портом процесс. Нажатие Enter на процессе сразу покажет нам все подробности.
 
Третья закладка – контейнеры, четвертая – файлы, по умолчанию нам покажут только заблокированные, но мы можем переключиться в режим всех открытых файлов. Здесь точно также по Enter мы можем получить все подробности о контейнере или работающему с файлом процессе.
 
Узнать больше о возможностях и применениях утилиты можно на официальной странице проекта: https://github.com/pranshuparmar/witr
 
Но в любом случае рекомендуем добавить ее в свой инструментарий, лишней не будет, особенно в авральной или непонятной ситуации.
👍431
Новый формат DEB822 для источников APT

Так уж пошло, что многие привычные вещи воспринимаются нами чем-то незыблемым, а попытка нарушить текущий ход вещей часто воспринимается в штыки. Новый формат источников APT - DEB822 не исключение, он появился начиная с выпуска Debian 13, а пользователи Ubuntu познакомились с ним немного раньше, начиная с Ubuntu 24.04. В данной статье мы подробно разберем новый формат, его основные отличия и преимущества перед привычным старым.

Заметка на эту тему уже была, теперь полноценная статья, которую мы достали из черновиков, вычитали, причесали и опубликовали.

Статья серьезно расширена и дополнена, кроме подробного разбора опций в ней есть новые разделы, которых не было в заметке.

Читать: https://interface31.ru/post/novyj-format-deb822-dlya-istochnikov-apt/
5👍152
Их нравы
 
На конференции Linux App Summit Себастьян Вик (Sebastian Wick), мэйнтейнер инструментария Flatpak, и Адриан Вовк (Adrian Vovk), создатель инсталлятора для GNOME OS и один из разработчиков systemd-homed и systemd-sysupdate, выступили с докладом о будущем системы самодостаточных пакетов Flatpak.
 
В докладе упоминалось намерение создать для нужд Flatpak новый процесс systemd-appd для управления правами приложений и вложенной изоляции. Важный нюанс: код ещё не написан, а поддержка пока только задумывалась.
 
Но тут «разверзлись хляби небесные» в социальной сети Fediverse началась волна агрессии. Разработчиков обвинили в «насаждении диктатуры», «предательстве портативности» и «союзничестве с Ландьюком». Критика сыпалась на этапе концепции, без анализа доклада. Аргументы «мы ещё даже код не написали» игнорировались.
 
Брайан Ландьюк (Bryan Lunduke) — известный технический блогер, яростный критик systemd и корпоративного влияния в Linux . В данном контексте обвинение в «союзничестве» с ним используется как токсичный ярлык и обвинение в намеренном вреде проекту ради идеологии.  

 
В результате Адриан Вовк заявил, что до начала этой токсичной кампании он искренне хотел найти элегантное решение для пользователей альтернативных init-систем (например, выделить appd в отдельный демон, как это сделали с elogind). Но после потока неконструктивной агрессии и обвинений у него пропала мотивация тратить личное время и силы на это:
 
Но, честно говоря, всё это обсуждение сейчас совершенно бессмысленно, пока мы не написали ни единой строчки кода. Если быть откровенным, до этой травли в Феди я планировал максимально тактично отнестись к сценарию использования без systemd. Но тут я увидел, как кто-то в открытую обвиняет нас в том, что мы «союзники Ландьюка».

Так что, извините, но у меня больше нет ни малейшего желания тратить своё время на это дерьмо. Оно того не стоит.

 
К чему это привело? Да к тому, что systemd теперь станет обязательной зависимостью Flatpak, альтернативные решения разработчики больше рассматривать не желают.
 
И это не первый случай токсичного поведения меньшинств, которые потом искренне удивляются почему никто не хочет поддерживать их решения и вообще тратить на них время. Многие начинают склоняться к теориям заговора и козням корпораций.
 
На самом деле проблема не в systemd vs openrc (или подставьте сюда все что хотите). Проблема в культуре дискуссии. Токсичное меньшинство, кричащее громче всех, создаёт иллюзию «общественного мнения». Но реальные мейнтейнеры видят: за громкими лозунгами стоит оголтелый фанатизм и догматическое отторжение инакомыслия.
👍22🤡1
TinyFileManager – простой и эффективный файловый веб-менеджер
 
В современных условиях часто встает вопрос удобного предоставления доступа к файлам самых разнообразных пользователей, в том числе мобильных и удаленных. Протокол SMB для этой задачи не самая лучшая идея, а создавать дублирующие хранилища наподобие Nextcloud избыточно.
 
Для такого случая может пригодиться TinyFileManager – простой файловый веб-менеджер в виде единственного PHP-файла. Но разработчик, судя по всему, сосредоточился именно на развитии самого скрипта, а подходы к созданию Docker-образа мягко скажем сомнительны. Поэтому образ мы будем собирать самостоятельно.
 
Общая структура проекта:

/opt/tinyfm/
├── Caddyfile
├── config.php
├── php-session.ini
├── docker-compose.yml
├── Dockerfile
└── data/

 
Dockerfile
 
FROM php:8.3-fpm-alpine

WORKDIR /var/www/html

RUN apk add --no-cache \
        libzip-dev \
        libpng-dev \
        libjpeg-turbo-dev \
        freetype-dev \
        oniguruma-dev \
        bzip2-dev \
        curl \
    && docker-php-ext-configure gd --with-freetype --with-jpeg \
    && docker-php-ext-install zip gd mbstring bz2

RUN curl -L -o index.php https://raw.githubusercontent.com/prasathmani/tinyfilemanager/master/tinyfilemanager.php \
    && chown -R www-data:www-data /var/www/html

 
docker-compose.yml
 
services:

  tinyfilemanager:
    build: .
    container_name: tinyfilemanager
    restart: unless-stopped
    user: "82:82"
    volumes:
      - app_code:/var/www/html
      - ./data:/var/www/html/data
      - ./config.php:/var/www/html/config.php:ro
      - ./php-session.ini:/usr/local/etc/php/conf.d/session.ini:ro
    tmpfs:
      - /tmp:uid=82,gid=82,mode=1777
    security_opt:
      - no-new-privileges:true
    cap_drop:
      - ALL

  caddy:
    image: caddy:2-alpine
    container_name: tinyfm-caddy
    restart: unless-stopped
    ports:
      - "80:80"
      - "443:443"
      - "443:443/udp"
    volumes:
      - ./Caddyfile:/etc/caddy/Caddyfile:ro
      - app_code:/var/www/html:ro
      - ./data:/var/www/html/data:ro
      - caddy_data:/data
      - caddy_config:/config
    depends_on:
      - tinyfilemanager

volumes:
  app_code:
  caddy_data:
  caddy_config:

 
Caddyfile

files.example.com {
    #tls internal
    encode gzip zstd

    header {
        Strict-Transport-Security "max-age=31536000; includeSubDomains; preload"
        X-Content-Type-Options nosniff
        X-Frame-Options DENY
        Referrer-Policy no-referrer
    }

    root * /var/www/html
    php_fastcgi tinyfilemanager:9000
    file_server
}

 
php-session.ini
 
session.gc_maxlifetime = 300
session.cookie_lifetime = 300

session.use_strict_mode = 1

session.cookie_secure = 1
session.cookie_httponly = 1
session.cookie_samesite = Lax

session.save_path = "/tmp"

 
config.php
 
<?php

$root_path = '/var/www/html/data';
$root_url = 'data';
$http_host = $_SERVER['HTTP_HOST'];

$use_auth = true;

$auth_users = array(
    'admin' => '$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW', //admin@123
    'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO', //12345
    'guest' => '$2y$10$a.DMI5sRjAnvhb.8rFAXY.XPSEO/eatVb4qCMmTc2YcxTDKp9xMyC' //guest
);

$readonly_users = array(
    'guest'
);

$exclude_items = array(
    '.htaccess',
    '.env',
    'docker-compose.yml',
    'Caddyfile',
    'php-session.ini',
    'config.php',
    '.git',
    '.DS_Store',
    '..',
    '.'
);

$online_viewer = false;
$default_timezone = 'Europe/Moscow';

 
После чего создаем директорию для хранения файлов и устанавливаем на нее нужные права:
 
mkdir -p /opt/tinyfm/data
chown -R 82:82 /opt/tinyfm/data

 
И сгенерируем хеши паролей реальным пользователям:
 
docker run --rm php:8.3-alpine php -r "echo password_hash('мой_пароль', PASSWORD_BCRYPT) . PHP_EOL;"

 
Обратите внимание, пользователи бывают двух типов, с правами загружать файлы и правами только на чтение.
 
Запускаем проект:
 
docker compose up -d -–build

 
И переходим в браузере по указанному адресу.
👍29
Настраиваем Visual Studio Code для удаленной работы через SSH

Сегодня все чаще и чаще для конфигурационных файлов используются продвинутые текстовые форматы, такие как JSON или XML, имеющие строгий синтаксис и структуру.

Их применение облегчает программную обработку данных, но при этом они все еще остаются легко читаемыми человеком.

Однако работа с ними в привычных консольных редакторах имеет ряд неудобств, в частности связанных с соблюдением синтаксиса и формата разметки.

Поэтому гораздо удобнее использовать для этого специальные среды разработки, например, VS Code, тем более что он прекрасно умеет работать через SSH.

Читать далее: https://interface31.ru/post/nastraivaem-visual-studio-code-dlya-udalennoy-raboty-cherez-ssh/
👍12🔥111
Обновление PostgreSQL в Docker через pg_dumpall
 
Обновление PostgreSQL между мажорными версиями задача не самая простая, недостаточно просто загрузить новый контейнер, нужно еще выполнить конвертацию структуры кластера СУБД, которая меняется от версии к версии.
 
Для небольших и средних баз идеально использовать импорт/экспорт при помощи утилиты pg_dumpall, что полностью исключает риск повреждения исходных данных, плюс у вас на руках всегда остается актуальная резервная копия в виде дампа всего кластера.
 
Итак, приступим, допустим мы изначально имеем:
 
services:
  db:
    container_name: postgres-db

 
В нашем случае:

▫️ db — имя сервиса Compose
▫️ postgres-db — реальное имя контейнера Docker
 
1️⃣ Остановим весь стек и запустим обратно только контейнер с СУБД, это исключит возможную запись в БД во время выгрузки:
 
docker compose stop
docker compose up -d db

 
Теперь выполним выгрузку дампа всего кластера:
 
docker exec -t postgres-db pg_dumpall -U postgres > full_backup.sql


Проверяем, что файл выгрузки создан. После чего останавливаем контейнер с БД:
 
docker compose down

 
2️⃣ Следующие шаги будут несколько различаться в отличие от того, используем ли мы Named Volumes или Bind mount, но в любом случае наша задача запустить новый контейнер СУБД с пустым томом.

🔹 Для Named Volumes было:
 
services:
  db:
    image: postgres:17
    volumes:
      - pg_data:/var/lib/postgresql/data
volumes:
  pg_data:

 
Стало:
 
services:
  db:
    image: postgres:18
    volumes:
      - pg_data_18:/var/lib/postgresql/data
volumes:
  pg_data_18:

 
🔹 Для Bind mount было:
 
services:
  db:
    image: postgres:17
    volumes:
      - ./postgres-data:/var/lib/postgresql/data


Стало:
 
services:
  db:
    image: postgres:18
    volumes:
      - ./postgres-data-18:/var/lib/postgresql/data

 
3️⃣ Запускаем СУБД:
 
docker compose up -d db

 
Мы нее запускаем весь стек, чтобы раньше времени приложения не начали писать в новую чистую БД.
 
Ждем пока база инициализируется и готова будет принимать соединения, для этого выполним команду:
 
docker logs -f postgres-db

 
Как только появится сообщение:
 
database system is ready to accept connections

 
Можно двигаться дальше. Загружаем дамп кластера СУБД:
 
docker exec -i postgres-db psql -U postgres < full_backup.sql

 
Теперь запускаем весь стек:
 
docker compose up -d

 
4️⃣ После чего рекомендуется выполнить оптимизацию загруженной базы:
 
docker exec -it postgres-db vacuumdb -U postgres --all --analyze-only

 
Это не мешает работе и можно запускать уже на работающем стеке. Старые тома лучше всего оставить на некоторое время, пока вы не убедитесь, что обновление прошло нормально.
👍83😁21
УТМ ЕГАИС 403 Forbidden - Доступ к странице с данного IP не разрешен

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

А дальше – проще, немного не подумал или опечатался и доступа у тебя больше нет. Как раз этим наш коллега и решил заняться, тем более что в регионе у нас три «для трезвости» подряд. Но что-то пошло не так и доступ пропал отовсюду.

Поиск в сети, к удивлению, результатов не дал, везде написана какая-то ерунда, а в тематических сообществах и вовсе советуют переустановить УТМ, он бы так и сделал, но за неожиданные выходные в УТМ собралось много входящих документов.

В любом случае переустановка – это не наш метод, всегда следует разобраться в проблеме, иначе переустанавливать на каждый чих просто утомишься.

Итак, белые списки, если они есть, то должны где-то хранится, а каком-то конфигурационном файле. Вот поиском этого и займемся. Недолгие поиски привели нас к файлу transport/conf/transport.properties в директории установки УТМ. У нас указан путь для Linux установки, в Windows его расположение аналогично.

В самом низу он содержит две интересные опции:

web.server.attempt.ip = 
web.server.access.ip =


Первая – это список адресов, с которых были попытки подключений. Хотя зачем они в конфиге? Логично было бы хранить их в логе. А вот последняя – это и есть наш белый список. Можете откорректировать его до нужных значений, а можете просто очистить.

Ошибка нашего коллеги была классическая, он набрал 192.186.х.х вместо 192.168.х.х.

После чего просто перезапустите службу УТМ и доступ восстановится.
👍22🔥32🤝2