ServerAdmin.ru
31.6K subscribers
853 photos
57 videos
23 files
3K links
Авторская информация о системном администрировании.

Информация о рекламе: @srv_admin_reklama_bot
Автор: @zeroxzed

Второй канал: @srv_admin_live
Сайт: serveradmin.ru

Ресурс включён в перечень Роскомнадзора
Download Telegram
Mikrotik меня на днях удивил. Увидел мельком в одном из видео на ютубе упоминание функции Kid Control. Думаю, такой, что это за контроль, впервые слышу. Открываю RouterOS 7 и и вижу там IP ⇨ Kid Control. Очень удивился. Я вообще впервые увидел этот раздел.

Думаю, наверное это в 7-й версии появилось, поэтому я не видел. Я все старые устройства оставил на родной для них 6-й версии. Специально не обновлял. А с 7-й мало работал, только с новыми устройствами.

Захожу в RouterOS 6, а там этот контроль тоже есть. Тут я ещё сильнее удивился. Пошёл в поиск, оказалось, что эта функциональность появилась в 2017 году. Как я умудрился не то, что её ни разу не заметить лично, но даже не слышать никогда о ней. Проходил обучение MTCNA, не помню, чтобы там об этом шла речь. Либо у меня из памяти всё это вылетело.

Проверил поиск по каналу, ни разу не писал о нём, значит не знал. Посмотрел поиск по чату, нашёл одно упоминание. Мне как раз говорят, что есть детский контроль, а я удивился и спросил, что это такое. Ну и благополучно забыл, хотя написал: "Пипец. Столько лет настраиваю Микротики. Никогда не замечал и не заглядывал в этот раздел. Даже не знал про его существование."

Дело в том, что я настраиваю детям ограничения, но делаю это примерно так:

/ip firewall address-list
add address=192.168.137.110 list=Ivan
add address=192.168.137.111 list=Olga
/ip firewall filter
add action=reject chain=forward reject-with=icmp-network-unreachable src-address-list=Ivan time=\
  22h-7h,sun,mon,tue,wed,thu,fri,sat
add action=reject chain=forward reject-with=icmp-network-unreachable src-address-list=Olga time=\
  21h-7h,sun,mon,tue,wed,thu,fri,sat


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

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

В разделе IP ⇨ Kid Control есть 2 вкладки: Kids и Devices. В раздел Kids добавляем ребёнка и назначаем ему часы, когда интернет будет работать. Там же можно настроить ограничение скорости. В целом это тоже может быть полезно. Для того, чтобы делать уроки, смотреть расписание и искать какую-то текстовую информацию большая скорость не нужна. Можно ограничить, чтобы не работали видео и не было соблазна быстренько что-то посмотреть. А вечером, когда уроки закончены, ограничение убрать.

В Devices добавляем по MAC адресу устройства ребёнка и привязываем их к нему.

Такой вот нехитрый контроль, который по факту делает примерно то же самое, что и я вручную. Для ограничения интернета добавляет и убирает блокирующие правила в файрвол для IP адресов устройств детей. А для ограничения скорости добавляет правила в Queues ⇨ Simple Queues.

Я этот же контроль придумал сам, только скорость не ограничивал. Большого смысла в этом не вижу. У меня дети по факту уроки нормально делают самостоятельно днём и с интернетом. Отключаю вечером, чтобы не было лишних разговор и разбирательств перед сном. Смартфоны тоже выключаются. Время пришло, всё автоматически выключилось. Спорить и что-то просить не у кого. Все идут чистить зубы и спать.

Вроде разработчики постарались сделать удобно, но по факту получилось так себе. Списки IP адресов устройств формируются на основе таблицы ARP. Если перезагрузить роутер в тот момент, когда устройства детей выключены, их IP адресов в ARP таблице не будет. Динамические правила в файрвол не добавятся. Я сначала не понял, почему там после перезагрузки пусто. Потом сообразил, когда посмотреть таблицу ARP и не увидел там нужных устройств.

Такая реализация может запутать в настройке файрвола. Проще как я раньше делал, писать правила с указанием времени вручную. Они всегда перед глазами, хоть и отключаются вне заданного диапазона времени.

#mikrotik #дети
👍129👎8
📊 Пришло время очередного опроса. Давно хотел его организовать, да всё забывал. На другое отвлекался. Тема очень дискуссионная. На канале не раз поднимались споры на этот счёт, но никогда не было опроса.

Интересно посмотреть на распределение по вопросу, кто каким текстовым редактором пользуется в консоли Linux. Скажу за себя. Я использую mcedit. Не считаю его очень удобным, но привык. Мои потребности закрывает, так как я особо много в консоли не редактирую. Если что-то большое, масштабное, то делаю на компьютере в VSCode.

Если стоит nano, то буду работать в нём. Vi или vim не люблю, закрою, если случайно откроется 😆 Но приходится мириться, так как по visudo открывается. Я обычно не переназначаю. Хотя это было раньше, на rpm дистрибутивах, с которыми я всё реже взаимодействую. В deb visudo открывает nano. И это здорово. Про vi теперь не вспоминаю.

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

#опрос
👍70👎3
Какой текстовый редактор вы предпочитаете для работы в консоли ОС на базе Linux?
Anonymous Poll
20%
mcedit
19%
vim
51%
nano
5%
vi
0%
emacs
2%
neovim
1%
Другой (напишу в комментариях)
3%
Не работаю в консоли Linux (посмотреть результаты)
👍94👎3
На днях на хабре прочитал полезную статью, поэтому решил акцентировать ваше внимание на ней. Я в принципе не знал, что так можно сделать. Не приходилось сталкиваться.

Защита от эксплойтов rdp, smb c помощью IPSec и сертификатов

Думаю у многих всё ещё трудятся устаревшие операционные системы Windows. По моим наблюдениям, чаще всего это Windows Server 2012 R2. Не помню уже чем они в то время так привлекали внимание, но мне кажется, их наустанавливали значительно больше, чем последующих 2016-х и 2019-х. Таковые имеются и у меня.

По понятным причинам, установить обновления на Windows Server 2012 R2 либо сложно, либо невозможно, потому что в свободный доступ они больше не публикуются. Есть обходные пути, но не сказать, что они простые.

Автор предлагает следующий простой и эффективный способ защиты удалённых подключений.

1️⃣ Разворачиваем роль центра сертификации.
2️⃣ Выпускаем сертификаты для пользователей.
3️⃣ На целевых серверах, куда пользователи будут подключаться по SMB или RDP, на штатном файрволе настраиваем правила входящих соединений, где включаем параметр Разрешить только безопасное подключение. Дополнительно можно ограничить список компьютеров, с которых разрешено подключаться. Если это не терминальный сервер, а обычный, куда по RDP подключаются только админы, можно ограничить список компьютеров.
4️⃣ Отдельно создаём правило для безопасных соединений, где включаем проверку подлинности компьютера, если настраивали ограничения по ним, и проверку подлинности пользователя, которая выполняется с помощью ранее выпущенного сертификата с нашего CA.

Теперь если у пользователя нет сертификата, в подключении будет отказано. Это не даёт стопроцентной защиты, но заметно сужает вектор атак, так как без сертификата по RDP или SMB уже не подключиться. А именно в этих сервисах обычно находят фатальные уязвимости.

Настраивается всё это относительно просто. В статье пошаговая инструкция. Странно, что у статьи так мало просмотров и совсем нет комментариев. Мне кажется, довольно актуальная информация. Меня постоянно беспокоят эти устаревшие системы. Конечно, их надо обновлять, но как это обычно бывает, не всегда это просто сделать по различным причинам. А где-то и невозможно. Я лично обслуживал системы для станков, которые нельзя было обновить. Продавалась связка станок-компьютер с драйверами под конкретную версию.

#windows #security
Please open Telegram to view this post
VIEW IN TELEGRAM
👍121👎2
Как понять, что системе на базе Linux требуется перезагрузка? Самый простой способ - использовать программу needrestart (deb дистрибутивы) или needs-restarting (rpm дистрибутивы). Я про неё подробно рассказывал. Её можно использовать для собственного мониторинга. Также другой софт может на неё опираться. Например, Lynis.

Needrestart установлен не всегда и не везде. Например, в базовых образах LXC контейнеров в Proxmox его нет. Если система не ваша, то самостоятельно лучше ничего не ставить.

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

# lsof -nP +L1 | grep '(deleted)'
systemd-l 488 root txt  REG  8,1  281096   0 270929 /usr/lib/systemd/systemd-logind (deleted)
dockerd  526 root txt  REG  8,1 75181152   0 265728 /usr/sbin/dockerd (deleted)
sshd   532 root txt  REG  8,1 1265432   0 262298 /usr/sbin/sshd (deleted)
systemd  582 root txt  REG  8,1  92544   0 270899 /usr/lib/systemd/systemd (deleted)
(sd-pam) 584 root txt  REG  8,1  92544   0 270899 /usr/lib/systemd/systemd (deleted)
bash   647 root txt  REG  8,1 1265648   0 263309 /usr/bin/bash (deleted)


Тут видно удалённые файлы системных сервисов, таких как systemd, sshd, ну и bash заодно. То есть было обновление, приехали новые версии этих файлов, заменили старые. Но так как службы не перезапускались, они до сих пор используют удалённые файлы.

Для systemd существует специальная команда для полного перезапуска службы в том числе после обновления:

# systemctl daemon-reexec


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

С другими службами проще. Для обновления sshd и bash достаточно переподключиться по SSH. В новой сессии загрузятся уже новые бинарники.

А вот если изменился systemd, glibc или ядро, то тут без reboot уже не обойтись. Ядро, кстати, можно так посмотреть:

# uname -r
6.1.0-35-amd64


Это текущая версия, а вот список установленных ядер:

# dpkg -l | grep linux-image
.................................
ii linux-image-6.1.0-39-amd64   6.1.148-1           amd64    Linux 6.1 for 64-bit PCs (signed)


Установлен пакет с более свежим ядром. Надо перезагружаться.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#linux
1👍150👎1
Поделюсь с вами необычным сервисом. Необычен он тем, что полностью бесплатно даёт интересные возможности, правда нужны они далеко не всем.

https://tastewp.com

С помощью этого сервиса можно бесплатно, без регистрации и вообще каких-то дополнительных действий получить себе в управление на 2-е суток чистую версию Wordpress.

Актуально это будет только тем, кто работает с Wordpress. Очень удобно проверить какие-то темы, плагины, загрузить бэкап своего сайта и посмотреть, как он заработает в новом окружении.

Свежесозданный сайт на удивление очень быстро работает. Удобно что-то проверять, смотреть. На своих серверах такой скорости работы админки не видел.

#бесплатно #wordpress
👍46👎1
backup-postgresql-restic.sh
2.1 KB
🔥 Бэкап баз postgresql с помощью restic!

Вновь возвращаюсь к очень удобному инструменту для бэкапов restic. Последнее время часто стал его использовать. Дальше вы поймёте, почему. На создание бэкапов баз данных с его помощью меня навела вот эта статья:

Restic: эффективное резервное копирование из Stdin

Автор с помощью restic дампит базы данных в Kubernetes. Я немного переделал его решение для своих локальных бэкапов. Основная проблема, которая там решена - корректная отработка ошибок снятия дампа. Я до этого сам не догадался, правда не сильно и пытался, поэтому дампил по старинке сначала в файл, проверял, а потом уже куда-то на хранение отправлял.

Но можно всё это сделать на лету и с проверкой ошибок. То есть делается дамп и тут же через pipe отправляется в restic. Этот способ удобен по нескольким причинам:

1️⃣ Самое основное - сырые дампы в restic очень хорошо дедуплицируются и экономят место. Если между дампами небольшие изменения, то даже хранение большого количества файлов за разные дни не съедает место на хранилище в отличие от обычного хранения в исходном виде на файловой системе.

2️⃣ Прямая отправка данных с pg_dump в restic исключает промежуточное сохранение, что существенно экономит ресурс SSD дисков, если у вас много баз приличного размера. Да и банально быстрее получается.

3️⃣ Если во время снятия дампа будет ошибка, то такой бэкап помечается отдельным тэгом и по этому тэгу вы сможете понять, что у вас какая-то проблема. Я специально проверил этот момент. Отрабатывает корректно. Если дамп прерывается по какой-то причине и не завершается без ошибок, то этот бэкап помечается отдельным тэгом.

В статье у автора подробно всё рассказано, не буду на этом останавливаться. Покажу свой итоговый скрипт, который бэкапит дампы условно локально, а не в S3. Если надо в S3 или куда-то ещё, то просто измените переменную REPO_PREFIX в скрипте и добавьте переменных для доступа к бакетам. Плюс, я поменял формат хранения данных. Вместо tar выгружаю в текстовый sql файл. Мне так удобнее. Ещё исправил там небольшую ошибку, которую выявил во время тестов. В строке:

restic forget -r "${REPO_PREFIX}/$db" --group-by=tags --keep-tag "completed"

Надо убрать ключ --group-by=tags, иначе команда на очистку будет возвращать ошибку:

refusing to delete last snapshot of snapshot group "tags [job-8dd4f544]"

Это, как я понял, связано с тем, что ключ --keep-tag не позволяет удалить при группировке по тэгам полную группу тэгов, если в ней не останется хотя бы одного снепшота. А так как у нас все тэги с job уникальны, все проблемные снепшоты будут с уникальными тэгами и по сути одни в группе. Поэтому группировку --group-by=tags надо убрать. По крайней мере у меня, когда я убрал, ошибка ушла и очистка стала нормально отрабатывать. В доках это так объясняется: "The forget command will exit with an error if all snapshots in a snapshot group would be removed as none of them have the specified tags."

И ещё важный момент. Не забудьте сохранить пароль от репозитория, который тоже задаётся в скрипте. Так как пароль передаётся в виде переменной окружения, его можно хранить где-то отдельно и подгружать перед запуском основного скрипта. Я в предыдущей заметке про restic упоминал об этом и показывал пример в конце.

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

Полезные материалы по теме:

▪️Описание Restic с примерами
▪️Мониторинг Restic с помощью Zabbix и Prometheus
▪️Бэкап с помощью Restic в S3 на примере Selectel

Restic очень удобный инструмент для бэкапов. Рекомендую присмотреться.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#backup #postgresql #restic
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍111👎1
This media is not supported in your browser
VIEW IN TELEGRAM
Youtube показал в рекомендациях тематический шорт:

▶️ POV: You are a Sys Admin

Смотрю, много просмотров и лайков для нашей темы. Думаю, что-то интересное. Посмотрел раз, два, три. Потом включил перевод, посмотрел ещё пару раз и не понял. В чём тут юмор? Прочитал комментарии и всё равно не понял.

Решил спросить у ChatGPT. Как оказалось, видео с ютуба он смотреть не может. Пришлось скачать и загрузить ему в чат. На что он ответил, что видео видит, а звук не слышит. Загрузил ему субтитры на английском. И он мне всё объяснил.
------------------------------------------------------
◽️Сотрудник просит change request (официальное разрешение на изменения), чтобы поработать с серверами.
◽️Само по себе это звучит абсурдно, ведь change request обычно оформляют для изменения серверов, а не для того, чтобы только начать работать с ними.
◽️Он возмущается: «Что я, инженер первой линии (tier one)?» — намекая, что такие формальности и бюрократия свойственны для самых простых задач.
◽️Финал: «IT-менеджер бы меня убил» — подчеркивает, что без бумажки он вообще не имеет права ничего делать, иначе будут большие проблемы.

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

Давай разберём по слоям, на чём держится шутка в этом видео:

🔹 1. Буквальный уровень
Фраза «i need a change request to work on these servers» звучит нелепо: админ вроде бы просто хочет поработать, но ему нужен специальный документ. Для несведущего зрителя это выглядит как чрезмерная бюрократия.

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

🔹 3. Профессиональный юмор
Change request — реальный процесс в ITIL/DevOps, когда любое изменение инфраструктуры фиксируется и согласовывается.

Tier one (1-я линия поддержки) — обычно выполняет простые задачи (перезапуск, проверка логов), а не занимается управлением серверами.

Герой намекает, что бюрократия опускает его уровень работы до "самых простых тикетов".

🔹 4. Гипербола (преувеличение)
«The IT manager would literally kill me» — естественно, менеджер никого не убьёт. Но преувеличение подчёркивает, насколько строго относятся к процедурам.

👉 Получается, это мета-юмор про корпоративные процессы в IT: формальности порой важнее самой работы.

То, что герой каждый раз рукой касается сервера, добавляет ещё один слой юмора:

Буквально — он демонстрирует: «Вот эти самые серверы, с которыми я хочу поработать». Жест подчёркивает объект, о котором идёт речь.

Визуальный акцент — чтобы зритель не потерял контекст: всё время идёт речь именно про «железо», а не про абстрактные тикеты.

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

Эффект комичности — повторение жеста делает сцену карикатурной. Сначала это естественно, а потом — всё более нелепо, словно герой доказывает очевидное: «Вот же они! Но я не могу их трогать!»
------------------------------------------------------

Как вам такой анализ от ИИ просто на основании короткого видео и нескольких строк субтитров? И это бесплатная версия. Я просто никогда не работал в крупном IT, поэтому юмора не понял.

#юмор #AI
Please open Telegram to view this post
VIEW IN TELEGRAM
👍64👎13
Субботняя тема, непосредственно с IT не связанная. Скорее с рабочим местом. Давно планировал купить себе датчик CO2, чтобы проверять воздух в разных комнатах дома и прежде всего у своего рабочего места.

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

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

Я в итоге купил себе анализатор воздуха Qingping Air Monitor 2 (CGS2) (~9000 р.). По моим тестам он работает адекватно и предсказуемо. Корректно отображает CO2 уличного воздуха, предсказуемо показывает повышение при закрытых форточках в комнате, резко повышает значения при дыхании на него.

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

В кабинете при закрытом окне через пол часа ppm уходит за 1200 и становится душновато. Откинутая форточка решает этот вопрос. Я так обычно и работаю.

Ну и в целом в доме всё проверил. У меня нет управляемой централизованной принудительной вентиляции, но приколхожена полуавтоматическая своя, которая делалась по наитию. На удивление, получилось неплохо. Постоянный тёплый пол и проветривание в ванной комнате через откинутую форточку тянут воздух с другого конца дома из кухонной вытяжки, которая в стене и всегда открыта. В итоге в гостинной и по пути следования воздуха всегда свежо. При включении кухонной вытяжки, воздух идёт в обратном направлении, так как она мощная.

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

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

Так что с одной стороны устройство удобное, могу рекомендовать. С другой стороны мои ощущения меня не подводили, и без него я всё делал правильно. Повышение СО2 я очень хорошо ощущаю. Всегда и везде приоткрываю окна, если нет принудительной вентиляции. Так что просто приобрёл современную игрушку.

Помимо CO2 в устройстве сменный картридж для анализа мелких и средних частиц пыли, термометр (я сравнил с другими в доме, показывает корректно), измеритель влажности. Проверить его нечем, показывает последние дни 60%, что совпадает плюс-минус с тем, что сейчас должно быть на улице. Отопление пока не включено, так что похоже на правду. Ну и уровень шума, что тоже более-менее корректно, так как видно изменение на датчике при звуках в помещении. Но мне лично это вообще не актуально.

За городом по пыли показания хорошие. Да это и без приборов заметно. Пыли в разы меньше, чем в городской квартире. Нет такого, что неделю не пользовался предметом и он весь запылился. Так что за здоровьем все за город, на удалёнку.

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

#железо
1👍128👎9
К заметкам про Restic уже не раз упоминали веб панель к нему Backrest. У меня были большие надежды на эту панель, но они не оправдались. Я почему-то думал, что это будет панель для управления множеством распределённых по хостам экземплярам Restic. Он работает по модели push, то есть сам отправляет данные в репозиторий и поэтому должен быть установлен локально.

С такой архитектурой затруднено централизованное управление. Это должна быть какая-то сторонняя система для установки самого restic, раскатки конфигураций на него и отслеживания выполнений заданий бэкапа. Для этого, к примеру, подойдёт Ansible Semaphore.

Я рассчитывал увидеть подобную панель, но с акцентом именно на возможности restic. Но увы. Backrest не про это. С её помощью можно настраивать только локальный бэкап на конкретном одиночном хосте. Для меня вообще неактуальна подобная функциональность, потому что я предпочитаю такие вещи настраивать в консоли на скриптах.

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

Запустить Backrest можно как локально, установив вручную из бинарника и создав службу, так и автоматически в Doсker Compose. Я выбрал второе. Немного доработал пример из репозитория. Получилось вот так:

services:
  backrest:
    image: garethgeorge/backrest:latest
    container_name: backrest
    hostname: backrest
    volumes:
      - ./backrest/data:/data
      - ./backrest/config:/config
      - ./backrest/cache:/cache
      - ./backrest/tmp:/tmp # для восстановления бэкапов
      - ./.ssh:/root/.ssh # для доступа к repo по sftp
      - /path/to/local/repos:/userdata # локальная директория, которая бэкапится
      - /path/to/local/repos:/repos # для использования в качестве local repo
    environment:
      - BACKREST_DATA=/data
      - BACKREST_CONFIG=/config/config.json
      - XDG_CACHE_HOME=/cache
      - TMPDIR=/tmp
      - TZ=Europe/Moscow
    ports:
      - "9898:9898"
    restart: unless-stopped


Обращаю внимание на подключаемую директорию .ssh. Она нужна для подключения репозитория по SFTP. По мне, так это самый простой и удобный способ подключиться к удалённому хосту для хранения бэкапов на нём. В этой директории должны быть 2 файла:

◽️id_ed25519 - приватный ключ для доступа к серверу, делаем так:
# ssh-keygen -t ed25519 -f ~/.ssh/id_ed25519 -C "$(whoami)@$(hostname)_$(date -I)"
id_ed25519.pub добавляем на удалённом сервере в authorized_keys.

◽️known_hosts - файл с открытым ключом удалённого сервера. Подключитесь к нему с какого-нибудь сервера, а потом скопируйте сохранённую строку из known_hosts в этот файл.

После запуска контейнера можно идти на порт 9898 и настраивать бэкап через браузер. Первым делом надо добавить Repo. Для SFTP строка Repository URI будет примерно такая: sftp:user@10.20.1.24:/mnt/backup. Остальные параметры указывайте по потребностям.

После этого можно создавать задание для бэкапа. Я в своём примере бэкаплю директорию /var/log, которую примапил в композ файле к /userdata.

Примеры настроек Repo и задания для бэкапа показал внизу на картинках.

Теперь можно либо вручную сделать бэкап здесь же, либо дождаться планировщика. Перейдя в репозиторий, можно посмотреть Snapshots уже сделанных бэкапов, увидеть список файлов в них и по желанию что-то восстановить. Для восстановления удобно использовать директорию tmp, которую добавили в compose.

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

🌐 Сайт / Исходники

#backup #restic
👍50👎5
В недавнем опросе про консольные редакторы было много упоминаний редактора micro. Никогда не пробовал и не работал в нём. Решил исправить. И вы знаете, он меня реально впечатлил. В нём удобно работать. Удобнее, чем во всех других, с которыми приходилось сталкиваться. Расскажу про основные моменты, на которые обратил внимание.

1️⃣ Установка. Тут всё просто. Micro есть в базовых репозиториях дистрибутивов, так что можно сделать так:

# apt install micro

Я хотел получить самую свежую версию, поэтому сделал вот так:

# curl https://getmic.ro | bash
# mv micro /usr/bin/micro

По сути это просто одиночный бинарник на Go. Можно скачать из репозитория.

2️⃣ Делаем micro редактором по умолчанию:

# update-alternatives --install /usr/bin/editor editor /usr/bin/micro 50
# update-alternatives --set editor /usr/bin/micro

Для того, чтобы в Midnight Commander (mc) он тоже выступал в качестве редактора, надо добавить в ~/.bashrc пару переменных:

export EDITOR=micro
export VISUAL=micro

И перечитать файл:

# source ~/.bashrc

В MC нажимаем F9 Options Configuration [ ] Use internal editor. Убираем галочку с внутреннего редактора. Теперь вместо mcedit будет использоваться micro.

📌Теперь что больше всего понравилось:

🔹В micro можно передать текст через pipe:

# docker inspect aa3a452f7320 | micro

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

🔹В micro работает копирование/вставка так же, как в гуишных редакторах. Не нужны какие-то особенные выделения через Shift, как это сделано в mcedit или через какие-то другие горячие клавиши.

В micro просто выделяете мышкой текст, копируете по Ctrl+c, выбираете мышкой место, куда будете вставлять и вставляете по Ctrl+v. Как в любом редакторе. Плюс, работает Ctrl+a для выделения всего текста.

Но тут же заметил и минус. Если в mcedit ты выделил текст через Shift, он копируется в буфер внешней системы, через которую ты подключился. Можно вставить текст куда-то во вне терминала. Если копируешь текст в micro, он остаётся в буфере на сервере, и вне терминала его не скопировать. Я не понял, как выйти из этой ситуации и скопировать текст из редактора куда-то во вне. Думаю, этот момент зависит от настроек и возможностей SSH клиента.

🔹В micro полная поддержка мышки. Помимо копирования, вставки, можно двойным кликом выделить слово, тройным всю строку, чтобы, к примеру, её скопировать или удалить.

Выписал для себя горячие клавиши, которыми буду пользоваться:

▪️Ctrl-q, F10 выход
▪️Ctrl-s, F2 сохранение
▪️Ctrl-f, F7 поиск
▪️Ctrl-o открыть файл
▪️Ctrl-z откатить изменения
▪️Ctrl-с копировать
▪️Ctrl-v вставить
▪️Ctrl-k вырезать строку
▪️Ctrl-e открыть командную строку для внутренних команд

Как видно, некоторые клавиши пересекаются с mcedit. Ну а в целом набор горячих клавиш типовой, хоть и непривычный для меня в консольном редакторе.

Я акцентировал внимание только на нескольких моментах, которые понравились больше всего. У Micro много других возможностей, про которые я не упомянул:

- Можно переназначать горячие клавиши
- У него различные темы и подсветки синтаксиса
- Есть плагины
- Можно открыть терминал в нижней строке редактора
- Можно делить экран на несколько рабочих областей

Лично мне micro понравился. Он объединил в себе набор полезной функциональности, простоту и удобство других редакторов. Много умеет, легко осваивается, можно усложнить плагинами, если захочется.

Если ещё не прикипели к какому-то редактору, то смело используйте micro. Я себе поставил его по умолчанию в WSL. Буду пользоваться. Если понравится и привыкну, то начну ставить его везде. Он по всем параметрам лучше и удобнее mcedit, которым я пользуюсь просто из-за привычки.

🌐 Сайт / Исходники

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#linux #terminal
Please open Telegram to view this post
VIEW IN TELEGRAM
3👍168👎4
Я написал подробный обзор на новую необычную систему INFRAX. Даже не знаю, как её коротко охарактеризовать или с чем-то сравнить. На ум не приходят аналоги. INFRAX объединяет в себе систему мониторинга, удалённого подключения к серверам и техподдержку с тикетами. Это если коротко.

Бегло посмотрел описание и возможности, и решил сразу её внедрить в небольшую реальную инфраструктуру. Примерно 2 недели попользовался, всё изучил и написал статью.

☝️Сразу обращаю внимание, что на текущий момент у системы очень лояльные ограничения бесплатной версии: 100 объектов мониторинга и 100 пользователей. Это закрывает потребности не только малого, но и некоторого среднего бизнеса, особенно если ставить только на сервера.

Для того, чтобы попробовать, не надо нигде регистрироваться, оставлять телефон, ждать, когда тебе ответят или что-то пришлют. Просто качайте и устанавливайте. По умолчанию будет активирована версия Community Edition. Нетипичный подход для разработки софта в РФ. Причём это именно своя разработка с нуля, без заимствования из других продуктов. Это видно и по внешнему виду, и по функциональности. INFRAX ни на кого не похож.

Расскажу коротко, как это работает.

1️⃣ Устанавливаете систему. Она упакована в Docker контейнеры. Установка автоматическая через консольное меню, как и дальнейшее управление. То есть сам Докер знать не обязательно. Всё интуитивно и просто.

2️⃣ INFRAX сканирует сеть, находит узлы, добавляет в систему. Вы потом можете сами настроить структуру и распределить узлы по папкам.

3️⃣ Для сбора базовых метрик нужно установить агенты мониторинга. Поддерживаются системы Linux и Windows. Установка автоматическая через панель управления. Достаточно указать учётные данные с правами на установку. Базовые метрики, графики и триггеры преднастроены. Дополнительно ничего делать не обязательно, если нет нужды в тонкой настройке.

4️⃣ Для каждого узла можно указать протокол подключения для управления (SSH, RDP, VNC, HTTP или Winbox) и настроить учётные данные для подключения. Подключаться к серверу можно будет через веб интерфейс или отдельное приложение. Все сессии через веб интерфейс автоматически записываются.

5️⃣ Если срабатывает какой-то триггер, автоматически создаётся тикет, приходит уведомление. В тикете можно посмотреть первичную аналитику по узлу, назначить ответственного, посмотреть метрики хоста, прошлые инциденты, или тут же подключиться к нему и решить проблему.

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

Очень кратко описал основную функциональность. В системе много дополнительных возможностей:

- полный аудит всего и вся
- планировщик заданий
- планировщик тикетов
- база скриптов для запуска на узлах
- база знаний
- отчёты и аналитика
- интеграция с LDAP, AD, OAuth
- 2FA с помощью TOTP или Email
- полноценный RBAC
- объединение узлов в бизнес-сервисы

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

Рекомендую посмотреть и попробовать:

INFRAX – управление, поддержка (HelpDesk), мониторинг, удаленный доступ и автоматизация ИТ-инфраструктуры

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#мониторинг #remote #infrax #отечественное
Please open Telegram to view this post
VIEW IN TELEGRAM
2👍216👎4
Заметил в 7-й версии RouterOS на Микротике в настройках DHCP сервера новую кнопку Send Reconfigure. Она находится в списке выданных аренд (Leases). Специально заглянул в старое устройство. Её там не было. Стало интересно, что это такое.

Как оказалось, DHCP сервер может инициировать обновление сетевых настроек. Для этого есть специальное DHCP-сообщение типа FORCERENEW. Вообще не знал и никогда не слышал, что это возможно. И не видел, чтобы кто-то так делал. Я всегда обновлял настройки со стороны клиента. Думал, только он может решать, когда ему это делать. Соответственно, если ты поменял настройки на сервере, то либо ждешь, когда закончится аренда, либо клиентом инициируешь обновление.

На эту тему есть RFC 3203 (DHCP reconfigure extension) аж от 2001 года. То есть это не что-то новое и уникальное. Просто в RouterOS добавили поддержку этой функциональности. Дай, думаю, попробую, как это работает. Выглядит удобно. Поменял IP адрес в аренде и отправил команду на обновление настроек. Но ничего не вышло.

Тут не всё так просто. Для того, чтобы кто попало не рассылал по сети сообщения на обновление настроек, в этот механизм добавлена защита, описанная в RFC 6704 (Forcerenew Nonce Authentication). При получении аренды от сервера, клиент сообщает, что он поддерживает механизм аутентификации. В ответ сервер отправляет ему ключ аутентификации.

В Mikrotik этот ключ можно посмотреть в статусе аренды, на вкладке Active, в поле Reconfigure Key. Если ключа там нет, значит обмена ключами не было, клиент не примет запрос FORCERENEW на смену настроек. Сервер, соответственно, когда отправляет запрос, в заголовок добавляет ключ для аутентификации.

Будет или нет работать команда FORCERENEW зависит опять от клиента. В клиенте того же Mikrotik сделали удобно. Там просто добавили опцию в свойства клиента - Allow Reconfigure Messages. Ставишь галочку и клиент обменивается с сервером ключами.

С другими клиентами сложнее. Стандартный dhclient в Linux по умолчанию не поддерживает реализацию RFC 3203 и RFC 6704. Нужно брать какой-то другой. Например, цисковский поддерживает, но я не знаю, можно ли его запустить в Linux. Не изучал этот вопрос.

Стандартный DHCP клиент в Windows тоже не имеет такой поддержки.

В итоге фичу в RouterOS завезли, причём весьма удобную, а на практике применить её негде. Только если в качестве DHCP клиентов у вас выступают те же устройства RouterOS. На практике это не особо и нужно, хотя и может где-то пригодиться.

Вы вообще знали о такой возможности? Не понимаю, почему её не реализовали в популярных клиентах. Удобно же.

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#mikrotik #network #dhcp
👍156👎3
Когда надо узнать скорость сетевого интерфейса в Linux, первое, что приходит на ум - ethtool. Это самая популярная утилита для просмотра и управления настройками сетевых адаптеров. С ней только одна проблема - в базовом наборе системных утилит её обычно нет. Надо ставить отдельно:

# apt install ethtool

Для разовых задач особого смысла в этом нет, потому что все подобные утилиты берут информацию у ядра. Нет никаких проблем самим её посмотреть. Проверяем имена своих сетевых интерфейсов:

# ip a

И смотрим скорость:

# cat /sys/class/net/enp4s0/speed
1000

В данном случае это скорость 1000Mb/s или 1Gb/s. Если у вас виртуальная машина, то в зависимости от типа эмуляции, вы можете получить неожиданные значения:

# cat /sys/class/net/ens18/speed
-1

В данном случае -1 - это отсутствие какого-либо значения, нет данных. Это характерно для виртуальных машин в KVM. Virtio-драйвер не сообщает реальную физическую скорость (у него её просто нет) даже если он в бридже с реальной сетевой картой. А вот драйвер в Hyper-V сообщает:

# cat /sys/class/net/eth0/speed
1000

Это скорость сетевой карты, которая в бридже с виртуальным коммутатором для виртуальных машин.

☝️Кстати, если хотите быстро узнать, в виртуалке вы или на железе, запустите:

# hostnamectl

Я всегда использую эту команду для таких задач.

Помимо скорости интерфейса, ядро может передать всю остальную информацию. Например, наличие линка, параметры дуплекса, mtu или mac адрес:

# cat /sys/class/net/enp4s0/carrier
1
# cat /sys/class/net/enp4s0/duplex
full
# cat /sys/class/net/enp4s0/mtu
1500
# cat /sys/class/net/enp4s0/address
00:25:22:dc:39:42

Можете зайти в директорию /sys/class/net/enp4s0/ и посмотреть всё, что там есть.

Таким образом можно посмотреть всё, что угодно из того, что показывают системные утилиты. Просто некоторые значения нужно преобразовывать. Например, открытые TCP порты:

# cat /proc/net/tcp

Номера портов будут в шестнадцатеричном формате. Подобным образом у ядра можно выведать массу информации. Примерно этим и занимаются многочисленные клоны *top-ов и им подобных утилит. Вы и сами что-то подобное можете написать под свои задачи относительно просто, особенно с помощью ИИ.

#linux #terminal
👍102👎2
Я давно и активно использую виртуальные машины с Linux в подсистеме WSL в Windows. Точнее одну конкретную виртуальную машину с Ubuntu. Она у меня давно установлена ещё версии 22.04. В системе она так и отображается - Ubuntu-22.04.

Внутри она давно обновилась до Ubuntu 24.04 LTS и мне не нравится, что теперь версия в названии не соответствует действительности. Всё руки не доходили исправить это. А тут подвернулся случай, потому что решил поставить ещё одну систему с Debian и заодно навести в целом порядок с WSL.

Я решил, во-первых, переименовать Ubuntu. А во-вторых, перенести все WSL системы для удобства в одну директорию. По умолчанию Убунта живёт вот тут:

C:\Users\User\AppData\Local\Packages\CanonicalGroupLimited.Ubuntu22.04LTS_79rhkp1fndgsc\LocalState\ext4.vhdx

Задумал перенести её и остальные виртуалки в C:\Users\User\Documents\WSL. Для переименования и одновременного переноса проще всего воспользоваться процедурой экспорт/импорт.

Смотрим список систем в терминале PowerShell:

> wsl -l -v
 NAME       STATE      VERSION
* Ubuntu-22.04  Running     2

У меня она пока одна. Останавливаем:

> wsl --shutdown

Делаем экспорт и потом сразу импорт:

> wsl --export Ubuntu-22.04 C:\Users\User\Documents\WSL\ubuntu24.tar
> wsl --import Ubuntu C:\Users\User\Documents\WSL\Ubuntu C:\Users\Zerox\Documents\WSL\ubuntu24.tar --version 2

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

> wsl -l -v
 NAME       STATE      VERSION
Ubuntu      Stopped     2
* Ubuntu-22.04  Stopped     2

Делаю новую системой по умолчанию:

> wsl --set-default Ubuntu

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

После этого зашёл в новый профиль и, соответственно, в перенесённую систему. Убедился, что с ней всё в порядке. Там единственный момент возник, что система почему-то сразу под пользователем root стартует, хотя в исходную я заходил всегда под обычным пользователем. Исправил это так. Создал файл /etc/wsl.conf и добавил туда:

[user]
default=zerox

После этого новый профиль открывался под моим пользователем. Убедившись, что импортированная система нормально работает, старую удалил:

> wsl --unregister Ubuntu-22.04

Образ старого диска автоматически удалился, а новый остался в C:\Users\Zerox\Documents\WSL\Ubuntu, куда я его импортировал.

Теперь пришло время поставить ещё одну систему. Смотрю список доступных из магазина:

> wsl -l -o

Вижу образ с Debian. Его и буду ставить. К сожалению, я не понял, как мне сразу указать директорию, куда я буду его устанавливать. Поэтому сначала просто установил:

> wsl --install -d Debian

А потом так же через экспорт/импрот перенёс в нужную директорию.

Для удобства я назначаю системе в WSL и основному хосту дополнительные статические IP адреса на виртуальном коммутаторе. Подробно об этом рассказывал отдельно. Задачу я решил костылём, а если хотите красиво и удобно, то лучше сделать вот так. Но лично мне такой режим не очень нравится. Мне больше подходит изолированная сеть у Linux, чтобы она не пересекалась с основной системой.

Ещё материалы по теме:
▪️Запуск графических приложений Linux в основной системе
▪️SSH туннели через WSL
▪️Проброс портов в WSL

❗️Если заметка вам полезна, не забудьте 👍 и забрать в закладки.

#windows #wsl
👍150👎3
Проработал вчера вопрос обновления Debian 12 до свежего релиза 13 Trixie. Предстоит много раз проделать эту процедуру, поэтому решил сам внимательно прочитать документацию к новому релизу и вручную выполнить обновление.

Как обновить Debian 12 до Debian 13 Trixie

Из особенностей отмечу следующее:

🔹У меня возникли проблемы совместимости с некоторыми пакетами Docker, так что рекомендую всё, что установлено не из стандартных репозиториев удалить, а после обновления вернуть, иначе в процессе могут возникнуть ошибки совместимости и зависимости пакетов.

🔹Очень сильно изменилась конфигурация imap сервера Dovecot в той версии, что приедет с новым релизом. Внимательно проверьте новую конфигурацию сервиса перед обновлением и отладьте. Иначе может случиться сюрприз. Я уже видел отзывы на эту тему.

🔹Наконец-то обновился менеджер пакетов apt и стал хоть немного, но удобнее за счёт форматирования списка пакетов и подсветки. Не понимаю, почему так долго не могли это сделать. Но даже в таком виде он выглядит хуже, чем yum или dnf даже 15 лет назад. У apt появился новый формат конфигурации. Я использовал уже его.

🔹В Debian 13 убраны утилиты last, lastb и lastlog. Вместо них можно использовать wtmpdb (пакет libpam-wtmpdb), lastlog2 (пакет libpam-lastlog2) и команду lslogins --failed.

🔹Раздел /tmp переехал в оперативную память tmpfs. Может занимать до 50% свободной памяти. Настроить поведение можно в systemd в отдельном конфигурационном файле для этого tmp.mount.

🔹Немного поменялся установщик. Я лично посмотрел на его. По описанию показалось, что он сильно поменялся. На деле не увидел изменений. Основные изменения под капотом. Внешний вид точно такой же остался. Упоминалось, что изменился алгоритм автоматической настройки разделов и точек монтирования. Заметил только, что размер раздела под swap немного по-другому выбирается. Больше никакой разницы не увидел со старым установщиков, который я знаю ещё со времён 6-й версии.

🔹Если у вас на сервере установлена MariaDB, имейте ввиду, что режим recovery запустится только с теми же бинарниками, с которыми база упала. То есть если аварийно завершите работу СУБД версии 10.11 и обновитесь до 11.8, восстановление не сработает. Поэтому перед обновлением корректно завершите работу СУБД, чтобы она остановилась без каких-либо ошибок.

🔹Если в системе используется служба systemd-sysctl, то файл /etc/sysctl.conf больше ею не поддерживается. Вместо него используется /usr/lib/sysctl.d/50-default.conf. Важное изменение. Имейте ввиду. Настройки лучше хранить в /etc/sysctl.d/*.conf.

Всё это вычитал по официальным ссылкам:

◽️What’s new in Debian 13
◽️Upgrades from Debian 12 (bookworm)

#linux #debian
1👍162👎2
▶️ Очередная подборка авторских IT роликов, которые я лично посмотрел и посчитал интересными/полезными. Это видео из моих подписок за последнее время (обычно беру период в 2 недели), что мне понравились.

Пульс вашего сервера. Мониторинг Proxmox - Pulse
Первый раз услышал про этот мониторинг для Proxmox VE. Раньше и не видел, и не слышал. На вид понравилось. Думаю, что сам попробую и напишу заметку.

Kernel TLS в Angie: ускорение или деградация?
Полезный обзор технологии Kernel TLS, которая реализует шифрование трафика сразу в ядре. В общем случае это обеспечивает прирост в обработке шифрованного трафика. Но как это обычно бывает, везде есть нюансы. Есть такие конфигурации, когда производительность катастрофически падает. Связано это с тем, что иногда трафик может ходить из ядра в user space и обратно. В видео приведён такой пример.

Сделал тихий серверный шкаф. Можно ли ставить энтерпрайз сервер в квартире? Строю HOMELAB 2
Интересно было посмотреть, как автор покупал, собирал и обесшумливал серверный шкаф, который поставил рядом со своим рабочим место. Мне тоже такой нужно, уже даже подбирал себе на Авито, но так ничего не выбрал. Хорошие шкафы новые дорого стоят, а б.у. покупать не очень удобно, особенно после того, как я уехал из Москвы. Если кто-то продаёт или знает, где купить хорошие шкафы, поделитесь информацией.

Paperless AI - управление документами с помощью AI (LLM). Paperless NGX + AI + Ollama
Практический пример по объединению системы для хранения документов Paperless NGX в связке с ИИ. Вся связка работает в режиме self-hosted на своём железе. На видео пошаговая инструкция по настройке всех компонентов. В конце есть пример с демонстрацией работы.

Установка и настройка ZITADEL | Полный гайд по self-hosted IAM
Обзор одной из платформ для аутентификации и управления доступом Zitadel, аналог Authentik, Keycloak и т.д.

Self-hosted automation for EVERYTHING! // n8n Tutorial
Очередной разбор автоматизации с помощью платформы n8n. В данном видео в основном обзор продукта: установка, основные возможности, из чего состоит и как пользоваться. В конце автор привёл пример публикации заметки из Notion в социальные сети.

Практика по сокетам | Компьютерные сети 2025 - 37
Протоколы, интерфейсы и сервисы | Компьютерные сети 2025 - 38
Защищенные сетевые протоколы | Компьютерные сети 2025 - 39
Очередные уроки хорошего бесплатного курса по компьютерным сетям. Все предыдущие уроки текущего курса обновились в 2025 году.

Proxmox 9 + Terraform — Автоматическая Установка Виртуальных Машин | Полный Гайд
Практический пример работы с Terraform в Proxmox для создания VM.

Proxmox Backup Server: A Game Changer for HomeLabs!
Обзор PBS. Будет интересно только тем, кто не знаком с этим продуктом. Автор предлагает его устанавливать в LXC контейнер, что для меня было непривычно. Я его ставлю прямо на хост с VE. Минусов не увидел, а пользоваться удобно, так как можно тут же развернуть и проверить бэкапы.

DKT83 - DevOps Mock Interview #4 (Junior/Middle DevOps Engineer)
Интересное интервью бывшего разработчика, который решил стать DevOps. Там всю базу обсудили этой профессии. Можно послушать где-то на прогулке или в машине. Смотреть не обязательно.

#видео
Please open Telegram to view this post
VIEW IN TELEGRAM
👍58👎1