Сообщество - Лига Сисадминов

Лига Сисадминов

2 349 постов 18 850 подписчиков

Популярные теги в сообществе:

19

Умный родительский контроль на MikroTik: Как разрешать доступ в интернет с вашего телефона

Стандартные методы родительского контроля часто бывают неудобными: либо вы блокируете всё, кроме пары сайтов, либо тратите кучу времени на ручное ведение "белых списков". Этот метод предлагает элегантное и гибкое решение.

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

Как это работает (концепция)

  1. Блокировка по умолчанию: Мы создаем правило, которое блокирует весь интернет-трафик для устройства ребенка, идентифицируя его по уникальному MAC-адресу.

  2. Динамический "белый список": Мы создаем специальный список адресов (Address List), который изначально пуст.

  3. Правило-шпион: Мы настраиваем правило, которое следит за интернет-активностью контрольного телефона. Когда он заходит на новый ресурс, его IP-адрес автоматически заносится в "белый список".

  4. Правило-исключение: Мы создаем еще одно, самое важное правило. Оно стоит выше блокировки и разрешает ребенку доступ только к тем адресам, которые в данный момент находятся в "белом списке".

Что вам понадобится

  1. Доступ к настройкам вашего роутера MikroTik (через WinBox или веб-интерфейс).

  2. MAC-адрес устройства ребенка (например, AA:BB:CC:11:22:33).

  3. MAC-адрес вашего контрольного телефона (например, DD:EE:FF:44:55:66).


Шаг 1: Пошаговая настройка в терминале

Откройте в WinBox или веб-интерфейсе New Terminal и последовательно введите следующие команды. Не забудьте заменить MAC-адреса на ваши!

Создаем "белый список"

/ip firewall address-list add list=allowed_for_child comment="Whitelist for Child"

Эта команда создает пустой список адресов с именем allowed_for_child. Именно сюда будут автоматически добавляться разрешенные IP-адреса.

Создаем правило для отслеживания контрольного телефона

/ip firewall mangle add action=add-dst-to-address-list address-list=allowed_for_child address-list-timeout=none chain=prerouting src-mac-address=DD:EE:FF:44:55:66 connection-state=new comment="Populate whitelist from control phone"

Это самое умное правило. Оно следит за трафиком контрольного телефона (с MAC-адресом DD:EE:FF:44:55:66) и, как только обнаруживает новое соединение, добавляет IP-адрес назначения в наш "белый список" allowed_for_child. Параметр address-list-timeout=none означает, что адрес добавляется навсегда.

Создаем разрешающее правило для ребенка

/ip firewall filter add action=accept chain=forward dst-address-list=allowed_for_child src-mac-address=AA:BB:CC:11:22:33 comment="ALLOW child access to whitelist"

Это правило разрешает устройству ребенка (определяемому по его MAC-адресу AA:BB:CC:11:22:33) обращаться к любому IP-адресу, который находится в списке allowed_for_child.

Создаем блокирующее правило по умолчанию

/ip firewall filter add action=drop chain=forward src-mac-address=AA:BB:CC:11:22:33 comment="BLOCK all other internet for child"

Это финальное правило. Оно блокирует весь остальной интернет-трафик для устройства ребенка, который не был разрешен предыдущим правилом.

Шаг 2: Проверка порядка правил (Критически важно!)

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

  1. Перейдите в IP -> Firewall.

  2. Откройте вкладку Filter Rules.

  3. Убедитесь, что правило с комментарием ALLOW child access to whitelist находится НАД правилом с комментарием BLOCK all other internet for child.

  4. Если порядок неверный, просто нажмите на разрешающее правило и, удерживая левую кнопку мыши, перетащите его выше блокирующего.

Шаг 3: Как этим пользоваться и управлять

Система полностью настроена и уже работает.

  • Чтобы дать доступ: Просто откройте нужный сайт, игру или приложение на своем контрольном телефоне. Их сетевые адреса автоматически попадут в "белый список".

  • Чтобы отозвать доступ: Поскольку мы установили бесконечное время (timeout=none), "белый список" нужно чистить вручную.

    1. Перейдите в IP -> Firewall -> вкладка Address Lists.

    2. Найдите и выделите IP-адрес, доступ к которому вы хотите закрыть.

    3. Нажмите на красный минус (-) для удаления. Доступ будет мгновенно закрыт.

На каких еще роутерах можно это настроить?

Описанная схема очень изящно реализуется на MikroTik благодаря одной ключевой функции — action=add-dst-to-address-list. Это встроенный инструмент, который делает всю сложную работу за нас. На других платформах достижение того же результата потребует больше усилий.

Категория 1: Почти невозможно (Обычные домашние роутеры)

На стоковых (заводских) прошивках большинства роутеров от TP-Link, D-Link, Asus, Netgear и т.д. реализовать такую схему не получится. Их брандмауэры не обладают необходимой гибкостью для отслеживания трафика и динамического изменения списков доступа.

Категория 2: Возможно, но сложнее (Продвинутые и Pro-роутеры)

  • OpenWrt: Потребуется комбинация iptables, ipset и написание кастомного скрипта, который будет анализировать системные логи и добавлять IP-адреса в ipset. Сложность: Высокая.

  • Keenetic: Принцип схож с OpenWrt, но потребует адаптации скриптов под синтаксис и особенности KeeneticOS. Сложность: Средняя/Высокая.

  • Ubiquiti UniFi (USG/UDM): Потребует глубокой работы с конфигурационными файлами в формате JSON, что выходит далеко за рамки стандартных настроек. Сложность: Высокая.

Категория 3: Возможно для энтузиастов (pfSense / OPNsense)

На программных роутерах это реализуемо, но, как и в OpenWrt, потребует настройки логирования трафика и создания скрипта, который будет парсить лог и добавлять IP-адреса в нужную таблицу брандмауэра. Сложность: Высокая.

Показать полностью
40

А я тут live дистрибутив собираю, CephOS

Приветствую! :)

Зовут меня Sheridan и я алкоголик гентушник. 0x14 лет уже в emerge медитирую. А кнопки нажимаю и того больше.

Захотелось мне домой NAS. Хорошая штука, удобная. Да только вот ничего меня из того, что есть, не устраивало. А потом я узнал про распределённые ФС. А потом узнал про ceph (кстати, советую почитать это - неплохо для понимания что такое ceph). И захотел себе этот самый ceph домой. Не спрашивайте - зачем. Потому что могу :)

Долго ли коротко я эту хотелку в себе носил, да только вот недавно обломились мне несколько корпусов серверных. И железо дома накопилось разное. Решил, что пора действовать. Ну, железо в кучу собрать да от пыли почистить недолго, а вот ceph развернуть там-же - жалко диски то. Это ж целых как минимум два диска надо в btrfs raid положить, чтобы / там себя чувствовало нормально и у меня голова не болела на тему "А что если диск всё? Переустанавливать?".

И вспомнил я тут про SmartOS. А что, удобно! Грузимся с флешки а все диски гипервизору отдаём и радуемся. Поискал такое про ceph и не нашёл. Штош, думаю, зря я с железа компрессором пыль сдувал? Надо писать.

Ну, и, собственно, вот: CephOS. Уже 0.0.6beta, почти релиз. Обкатываю как раз на железе, ищу слабые стороны.

Без ai тут не обошлось, да. Чукча не художник, чукча девопс :)

Без ai тут не обошлось, да. Чукча не художник, чукча девопс :)

Идея такая:

Взял я в руки дебьяновый live-build и полез в него встраивать ceph. И скриптами обмазывать. И метриками обкладывать. Куда-ж без метрик то?

И вот что в итоге получилось:

  • Live дистрибутив, предназначенный для поднятия кластера ceph

  • Дистрибутив умеет в persistence (настройки/изменения в / будут храниться на другом разделе/устройстве)

  • Про ceph можно ничего не знать

  • Можно просто выключить ноду и хранилище не пострадает

  • Можно добавить дисков, хостов и хранилище просто увеличится.

  • Можно удалять из хранилища диски и хосты

  • Метрики, метрики, мои любимые метрики :) От node_exporter до smatrctl_exporter. К тому же есть специальный helper-генератор конфига для prometheus, чтобы не приходилось врукопашную все эти хосты подключать.

  • Для более лёгкого подключения есть специальный скрипт, который складывает всё нужное в архив. Этот архив потом нужно забрать на хост клиента, разложить оттуда всё по местам, выбрать и установить нужный вариант монтирования. Ну, в смысле можно руками, можно в fstab, а можно и systemd юнитами монтировать.

  • Можно управлять сжатием CephFS

  • Ну и никто не отнимает стандартный ceph cli, ежели надо чтото сделать, что скриптами ещё не обмазано. Или написать ишью в github проекта - вполне возможно, что обмажу :)

  • Debian bookworm, Ceph squid

Да, флешки менее надёжны, чем hdd. Но флешки категорически дешевле. Да, флешки медленнее hdd. Но это не сильно то и надо в контексте CephOS. Вдобавок live-build поддерживает persistent разделы - то есть можно условный /var/lib/ceph положить на отдельный ssd и оно ещё до загрузки основной системы примонтируется куда надо. Флешка ушла к тёмным магистрам? Ну и дырку на ней в небе, мы с другой загрузимся и заново подключим ноду к хранилищу. Удобно!

Ориентирован CephOS на soho сегмент, где особо не нужны высокие скорости и сверхвысокая надёжность. То есть можно поднять вообще на хламе. То есть не надо это сравнивать с промышленными Ceph кластерами на десятки хостов (хотя ничего не мешает и на CephOS это поднять). А для дома, я считаю, самое то, если завалялось штуки три комплекта старого железа :)

Как? Скачиваем cephos_installer_0.0.6beta.run, записываем несколько флешек, втыкаем флешки в хосты, выполняем на хостах несколько команд, генерируем и забираем архив со всем необходимым для монтирования, монтируем, пользуемся. Всё :)

А ежели поподробнее интересно, то вот тут моя шпаргалка по подъёмы CephOS в виртуалках и на железном полигоне

И мне нужна ваша помощь.

Если у кого есть возможность - протестируйте пожалуйста. Баги/вопросы/пожелания/проклятия в ишью забрасывайте. А если вы с ceph работаете, то я бы очень хотел от вас советов полезных. Мои то два глаза ещё зоркие вроде, но это глаза автора. А нужны глаза пользователей :)

Спасибо, что прочитали эту простыню :)

Показать полностью 1
8

Ansible для детского сада. Часть 6. Пока что не СУБД для Linux Server Update Services (LSUS)

А за скрюченной рекой
В скрюченном домишке
Жили летом и зимой
Скрюченные мышки.
Корней Чуковский. Скрюченная песня

У меня постоянное ощущение того, что я описываю не велосипед с костылями, а велосипед, который давно изобретен, на котором все катались лет 15 назад, если не 20. Что-то типа «введение в линукс и все вокруг для 10 класса». Что на информатике учат.
Поскольку этот текст пишется 50\50 – половина сделана еще осенью 2024, а половину я переделываю в ходе самообучения, и когда время и желание есть, то не удивляйтесь, что в тексте попадаются странные решения.

Для лиги лени: много примеров, как делать не надо, и как точно не работает

Ansible для детского сада в скольки то частях. Часть 1.Про все сразу
Ansible для детского сада в скольки то частях. Часть 2. Костылируем жалкое подобие WSUS - Linux Server Update Services (LSUS)
Ansible для детского сада. Часть 3. Настраиваем подобие безопасности и все остальное
Подготовка Git

Ansible для детского сада. Часть 4. Первичная настройка конечного клиента
4.1 Теоретически все просто
4.2 Сначала готовим открытую часть сертификата без пароля через Putty в Windows и еще раз вспоминаем что генерирует Putty в Windows, а что нужно в ssh
4.3 Детский скрипт, и как не надо делать
4.4 Отлаживаем SSH, снова и опять
4.5 Проблемы с переносом строки и не только
4.6 Проверяем, что получилось
4.7 Почти переходим к второму Ansible плейбуку
4.8 Воюем с пробелами в Anisble и восстанавливаем пример из первой статьи
4.9 Возвращаемся к основной задаче

Ansible для детского сада в скольки то частях. Часть 5. Приделываем костыли
5.1 Теоретическое обоснование костылей, или «зачем».
5.2 Выбор dataflow
5.3 Собираем Ansible facts без плейбука
5.4 Разбираем полученную выгрузку

Ansible для детского сада. Часть 6. Пока что не СУБД для Linux Server Update Services (LSUS)
6.1 Введение
6.2 Еще раз про готовые решения – Spacewalk, Satellite, Foreman + katello, Rudder
6.3 Переходим к проектированию на минималках
6.4 Начинаем писать код
6.4 Начинаем писать код или Powershell класс в классе. Часть 1
6.5 Продолжаем писать код или Powershell класс в классе. Часть 2

Ansible для детского сада. Часть 7, опять не связанная с Ansible
Ansible для детского сада. Часть 8. Теперь костыльная БД для Linux Server Update Services (LSUS)

Ansible для детского сада. Часть 6. Пока что не СУБД для Linux Server Update Services (LSUS)

Все, что мне было надо, я писал во второй части –

С целевой структурой данных ситуация сложнее. Для своего предпоследнего пет проекта под похожие задачи я просто развернул базу данных (Postgre), и туда клал разное. Нужно ли на первом шаге такое решение? Не знаю, мне не нужно, мне и бинарной таблицы хватит. Но что туда класть? Очевидно, туда должны попасть: FQDN, IP, дистрибутив, версия дистрибутива, ядро сейчас, последние дата и время доступности, аптайм. Должно ли туда попадать предыдущее состояние объекта, и какие-то еще настройки? Не очень важно, всегда можно расширить схему данных, добавить к объекту еще пару свойств.

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

6.2 Еще раз про готовые решения – Spacewalk, Satellite, Foreman + katello, Rudder
Повторю из второй части

У Microsoft был Baseline Security Analyzer
У Microsoft есть Security Compliance Toolkit (SCT)
У Microsoft есть Azure Update Manager operation(AUM).

В опенсорсе был Spacewalk. Последний релиз - 2.10 / March 18, 2020
У RH был Satellite. Это Foreman + katello+ support. Foreman 3.16 and Katello 4.18
Ivanti Patch for Endpoint Manager ? Ага:

Release Date September 18, 2025  The U.S. Cybersecurity and Infrastructure Security Agency (CISA) has published an analysis of the malware deployed in attacks exploiting vulnerabilities affecting Ivanti Endpoint Manager Mobile (EPMM). The Cybersecurity and Infrastructure Security Agency (CISA) obtained two sets of malware from an organization compromised by cyber threat actors exploiting CVE-2025-4427 and CVE-2025-4428 in Ivanti Endpoint Manager Mobile (Ivanti EPMM). Each set contains loaders for malicious listeners that enable cyber threat actors to run arbitrary code on the compromised server. Malicious Listener for Ivanti Endpoint Mobile Management Systems

Rudder ? Ничего про него не знаю.

Вопрос в сложности развертывания, это совсем не WSUS с его далее – далее - готово – пропишите WSUS в GPO

6.3 Переходим к проектированию на минималках
Функциональные требования: что делает этот софт – понятно, структурирует информацию про то, что надо обновить. Но, кстати, в таком случае нужно еще поле «пометки для объекта, почему не обновлено», и это уже точно нужно вести в CMDB (Configuration Management Database).
Не функциональные требования: как он это хранит.
И дальше UI \ UX.

Для начала, нужен уникальный идентификатор объекта.
В Windows это Machine ID, в Linux /etc/machine-id. Кроме этого, скорее всего, у сервера будет уникальный MAC или, для Cloud init, MAC останется, но со своими особенностями.

Что касается «истории состояния», то можно долго думать, читать про всякие 36 нормальных форм, Кимбалла, Data Vaul и вот это все.

Или можно зарезервировать строки данных:
Состояние00 «состояние сейчас»
Состояние01 «состояние при предыдущем опросе, вне зависимости от даты»
Состояние24 «состояние сутки назад»
Состояние168 «состояние неделю назад»
Состояние720 «состояние месяц назад»
Это позволяет организовать простую логику «было – стало» и перемещать данные по цепочке и до заполнения таблицы или таблиц. Вторая и третья нормальные формы SQL, вот это все.

На этом этапе и начинается разделение между «держим в каждом объекте 5 лишних групп, зато это один простой массив» и «держим данные в связанных таблицах с одним первичным ключом, зато модно стильно SQL».
Или,  можно немного упороться, и сделать объект из 5 объектов, то есть 3 мерную таблицу.
Это, с одной стороны, штатный и понятный (мне) механизм, с другой снимает требование по заведению SQL.
Получаемый объект будет в формате:
Сервер.Состояние00.Параметр01
Сервер.Состояние01. Параметр01
и так далее.
Давайте пробовать.
То есть, с точки зрения «вспомнить как Python работает с модулем psycopg2 и СУБД» полезнее сделать с базой данных, с точки зрения скорости \ удобства сейчас – проще сделать класс и класс из классов. Так что перенесу задачу «по базе данных» на часть 7.
Пока писал текст, понял что задача «хранение данных в базе» все равно требует считывания данных в какой-то объект или группу объектов, как-то с этим всем все равно потом работать.
Переусложнение не нужно.

Логика первичного заполнения

В первый момент времени не заполнено ничего. Поэтому при каждом запуске придется выполнять пре-проверку.
Получить сегодняшнее число, считать Data00 и выбрать Data00.timestamp
Взять Data00.timestamp. Если Null, то заполнить текущим временем и данными. 
Можно прописать везде 01.01.1970 (Unix Epoch) при первом запуске и проверять, что там. Это гораздо проще сравнивать при следующих шагах.

Дальше в чем-то проще.
Взять текущую дату. Сравнить с датой в Data01. Если данным в Data01 больше 24 часов, то переместить их в Data24. Ну или как-то так. Можно наоборот – посмотреть данные в Состояние720 и  Состояние168, сравнить с текущей отметкой времени, переместить.
На этом месте я понял, что было два пути:
1. Более правильный в сложных системах: планировать еще пару дней, нарисовать схему движения данных, итд. Возможно, сделать схему более гибкой.
2. Начать писать код, и поправить все что нужно, по мере необходимости. В том числе, расширить схему объекта, если надо.

6.4 Начинаем писать код или Powershell класс в классе.Часть 1
Почему Powershell, а не питон ? Да потому, что часть из этого кода пишется для людей, которые Powershell читать и использовать еще могут, а питон уже сложно, сложно ничего не понятно.

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

Как я писал раньше, вот так, разумеется, работать будет:

Class AnsibleFacts01{
[string]$IsSUCCESS
[string]$FQDN
[string]$IP
[string]$Ansible_kernel_version
[string]$Comment}

$NewHost1 = [AnsibleFacts01]::new()
$NewHost1.Comment = "123"
$NewHost1

И даже вот так система сработает без ошибок:
Class AnsibleFactsForData{

[AnsibleFacts01]$Data00
[AnsibleFacts01]$Data01}
$NewHost2 = [AnsibleFactsForData]::new()

Но уже на этапе
$NewHost2.Data00.Comment = "123"
система скажет
The property 'Comment' cannot be found on this object.

Почему? Потому. Overloading constructors, вот это все по руководству Petri PowerShell Classes – Your Ultimate Guide

Поэтому что? Поэтому есть три пути. Webcam, дальше вы знаете.

Путь первый. Конструктор и инициализация.

Для начала перепишу первый класс, а точнее скопирую пример из Using other classes with a class in Powershell

class SomeOtherClass {
[string] $Status
[string] $Reason

SomeOtherClass () { }
SomeOtherClass ([string] $Status, [string] $Reason) {
$this.Status = $Status
$this.Reason = $Reason  }}

class SomeClass {
[string] $Server
[string] $File
[SomeOtherClass] $OtherClass
SomeMasterClass () { }
SomeMasterClass ([string] $Server, [string] $File, [SomeOtherClass] $Class) {
$this.Server  = $Server
$this.File  = $File
$this.OtherClass = $Class}}

Но к такому примеру нужна инициализация: (там же)

$testing = [SomeClass]@{
Server = 'Server01'
File  = 'SomeFile'
OtherClass = [SomeOtherClass]@{
Status = 'OK!'
Reason = 'Idk'  }}


В моем примере (выше) это будет выглядеть как:


Class AnsibleFactsForData01{
[AnsibleFacts01]$Data00
[AnsibleFacts01]$Data01}

$NewHost1 = [AnsibleFactsForData01]::new()
$NewHost1.Data00 = [AnsibleFacts01]@{Comment = '456'}

Посмотрю что получилось:
$NewHost1.Data00
Поменяю значение и еще раз посмотрю что получилось:
$NewHost1.Data00.Comment = '6'
$NewHost1.Data00

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

Путь второй, тоже не очень

Class AnsibleFactsForData02{
[AnsibleFacts01]$Data00
[AnsibleFacts01]$Data01
# AnsibleFactsForData02 () { } Ввиду тупости, я не понимаю зачем эта строка, поэтому ее закомментировал.
AnsibleFactsForData02 () {
$this.Data00 =  [AnsibleFacts01]::new()}}

$NewHost02 = [AnsibleFactsForData02]::new()
$NewHost02.Data00.Comment = '12'

Проверим что вышло:
$NewHost02.Data00

Выглядит, что все работает.
Теперь проверим:
$NewHost02.Data01.Comment = '34'

И, конечно, так не работает.
Потому что внутри AnsibleFactsForData02 я потрогал только  $this.Data00, и не потрогал $this.Data01

Раз я его не потрогал, то под него не выделилась память, и все такое. Но у меня есть оправдание, когда в школе люди учили  typedef struct, constructor и прочие ~className (Destructors), я прогуливал.

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

Осталось записать это в файл.

6.5 Продолжаем писать код или Powershell класс в классе. Часть 2

Упрощаем и отрезаем.  Получаем:

Class Ans_F{ # AnsibleFacts
[string]$IsSUCCESS
[string]$FQDN
[string]$IP
[string]$Ansible_kernel_version
[string]$Comment}

Class A4D { #AnsibleFactsForData
[Ans_F]$D00
[Ans_F]$D01
[Ans_F]$D24 # «состояние сутки назад»
[Ans_F]$D168 # «состояние неделю назад»
[Ans_F]$D720 # «состояние месяц назад»
# AnsibleFactsForData02 () { } не понимаю зачем эта строка, поэтому закомментировал.
A4D () {
$this.D00 =  [Ans_F]::new()
$this.D01 =  [Ans_F]::new()
$this.D24 =  [Ans_F]::new()
$this.D168 =  [Ans_F]::new()
$this.D720 =  [Ans_F]::new() }}


$NewHost02 = [A4D]::new()
$NewHost02.D00.Comment = '12'
$NewHost02.D01.Comment = '34'
$NewHost02.D00

$NewHost03 = [A4D]::new()
$NewHost03.D168.Comment = '56'

$HostList = @()
$HostList += $NewHost02
$HostList += $NewHost03
$ScriptPath = $PSScriptRoot
$OutFileName = 'Ansible2.xml'
$OutFullName = $ScriptPath + "\" + $OutFileName
Export-Clixml -Path $OutFullName -InputObject $HostList

$HostListExport = Import-Clixml -Path $OutFullName
$HostListExport[1].D168.Comment

Есть минус, про Select при выборе формата – можно забыть.

Литература
machine-id(5) — Linux manual page
Cloud init Network configuration
MS about_Classes

stackoverflow Using Classes within an class
Petri PowerShell Classes – Your Ultimate Guide
How and where to properly define classes and enums in your PowerShell modules
Powershell v5 Classes & Concepts

Показать полностью

Как проще всего сделать переадресацию почты своего домена?

Есть домен (регистратор sweb). Для почты там ничего нет, можно только в DNS MX-запись изменить.

Нужно, чтобы почта переадресовывалась по шаблону. Приходящая на адреса вида a*@mydomain.ru переадресовывались на один адрес, b*@mydomain.ru на другой, c*@mydomain.ru на третий.

Есть свой (ну, почти свой) линукс-сервер. Что можно на него поставить из простого (с настройкой например exim я не справлюсь), для такой передресации?

Ну или может это можно реализовать каким-то сторонним сервисом.

2

А это нормально - втоптать в грязь и ограничить возможность комментирования?

У меня вопрос:
LDAP - протокол когда был выпущен?
Когда была выпущена его первая реализация под UNIX? А под винду?
Это я к тому, что Samba3 использовала не реализацию от MS, а OpenLDAP. И прекрасно работала в качестве AD. И кто тут чего путает? Вероятно берега.
Повторюсь: херню написал, но признать свою ошибку отказывается. Пусть теперь мой пост в Лиге Сисадминов комментирует... если сможет.

А что в 1997 году AD был?

А что в 1997 году AD был?

Зато сейчас можно входить по ssh используя LDAP как источник учёток. Сейчас прикручена.

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

Показать полностью 1
556

Продолжение поста «Это норма?»1

Таких историй куча у меня.

Я работал в строительной компании сиськой (сисадмином), обслуживал их здание. У этой строительной компании был надзорный орган, который проверял качество того чего они там настроили. Так вот в 1 день (воскресенье) часов в 9-10 вечера, звонит мне генеральный, тип в понедельник езжай в этот надзорный орган, у них там принтер сломался, надо бы помочь. Приехав на место вижу картину, здание, 5-6 кабинетов, в 1 кабинете сидят девки, штук 7, посреди кабинета стоит принтак, модель уже не помню, но суть в том, что они, чтобы на нем что-то распечатать, копировали файлы на флешку, шли к нему, и печатали с флешки локально, хотя принтак сетевой, просто он не настроен на компах. В процессе настройки расспрашиваю дам, тип а че ваш спец не настроил? Получаю ответ: мы попросили настроить, спец в другом городе(1 на весь регион), сказали своему руководителю, тот сказал спецу, спец забИл. В итоге дамы заебались, поныли(при очередной проверке доков) моему ген-диру, он поныл мне, и в итоге я поехал настраивать... В итоге проебавшись с настройкой около часа, приезжаю на работу (работал я 5\2 на постоянке с 8:00-17:00), генеральный спрашивает, тип че опоздал, на что парирую его просьбой с настройкой принтеров, но получаю возражение "Так я думал ты до начала рабочего дня все сделаешь". После этого я там больше не работал.

60

Две истории про бекапы

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

История первая.

Послушайте!
Ведь, если ЦОДы зажигают —
значит — это кому-нибудь нужно?

В Южной Корее сгорел ЦОД - G-Drive Fire Destroys 125,000 Officials' Data. Бекапов не было.
Все бы ничего, но это было официальное корейское государственное облако.
Согласно официальной части «просто загорелись литиевые батареи при переносе».
Неофициально злые языки говорят, что облако давно взломали или северные корейцы, или китайцы, и слили оттуда все, что было интересного, поэтому

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

Объемы данных заявлены как 858 терабайт. Бекапы, а что бекапы, ну не смогли:

The actual number of users is about 17% of all central government officials. According to the Ministry of the Interior and Safety, as of last August, 125,000 public officials from 74 ministries are using it. The stored data amounts to 858TB (terabytes), equivalent to 449.5 billion A4 sheets.

Вся эта история, конечно, вранье.

Система хранения данных 5 летней давности (из 2020 года), даже среднего сегмента, то есть обычная, серийная, продаваемая в розницу – это 36 SSD дисков формата PALM, размещаемые в систему хранения высотой 2 юнита, включенных через NVME.

Например, Huawei dorado 5000 v6 с дисками Huawei 15.36TB SSD NVMe Palm Disk Unit(7")

Или, система из того же ценового диапазона, 8 летней давности (из 2017 года) - HPE Nimble Storage All Flash Array AF60 или AF80, с заявленной емкостью системы хранения от 1.8 до 3.7 петабайт, с SSD дисками комплектом в 24 штуки - HPE Nimble Storage AF40/60/80 All Flash Array 184TB (24x7.68TB) FIO Flash Bundle.
Диски 2.5 и по 7.68TB Тб, так что потребуется больше дисков, больше места, и больше денег. Старая система, ничего не поделать.

В 2025 году петабайт, да еще с учетом сжатия и дедупликации, это даже не половина стойки.
Все современные системы хранения данных, кроме уж совсем SOHO (small office - home office):
и продаваемые как системы хранения данных,
и продаваемые как программно-определяемые системы хранения данных,
и продаваемые как гиперконвергентые среды (Storage space direct, vSAN) для гиперскейлеров и частных облаков,

Все они:
Во первых имеют в составе функционал репликации на «другой удаленный ЦОД» - то есть функционал метрокластера, синхронный или асинхронный. Это не бекап, это только репликация, но она спасет от пожара, потопа, и так далее (лицензируется отдельно).
Во вторых, так или иначе, интегрируются с системами резервного копирования, в том числе с офлайн хранением – с классическими ленточными библиотеками (LTO) или их эмуляцией, Virtual Tape Library (тот же QUADstor).

Что-то там еще пытаются рассказать, что такие объемы записать на кассеты нельзя .. ну что ж. Посчитаем.
Кассета Quantum LTO-9 – это 18 терабайт не сжатых данных.
10 кассет – 180 терабайт. 100 кассет – 1800 терабайт, 2.5 раза выполнить полный бекап этих 850 Тб
Расширяемая ленточная библиотека HPE Storage MSL3040 Tape Library идет с комплектом на 40 слотов, расширяется до 640 слотов.
Сам привод для дисков (стример), например HPE Storage LTO Ultrium Tape Drives, точнее HPE StoreEver MSL LTO-9 Ultrium 45000 Fibre Channel Drive Upgrade Kit (R6Q74A) какой-то странный, я что-то не пойму, почему везде пишут, что он не FC, а SAS 12G.
Но, какая разница. Для библиотеки (HPE StoreEver MSL 3040 Tape Library) заявлена скорость:
Maximum Data Transfer (Native) 22.5 TB/hr (21 LTO-9 drives)
Maximum Data Transfer (Native) 51.4 TB/hr (48 LTO-9 drives)
Источник: QuickSpecs, официальный сайт HPE.

То есть для «обычных» 4 приводов скорость составит около 4 терабайт \ час, 98-100 Тб\сутки. 850 заявленных терабайт можно было записать за 8-10 дней на 4 дисках, или, для записи «за сутки» потребовалось бы 35 приводов из максимум 48.

Деление полученного бекапа на несколько потоков для записи, Aux copy with Maximum streams для Commvault (не путать с Multiplexing, он не для этого) – функционал не очевидный, и возможно что-то надо покрутить – подпилить, но решаемый.

Так что, было бы желание, а коммерческие решения есть на рынке очень давно. Но, желания не было.

История вторая

Летом 2025 года Газпромбанк торжественно отчитался, цитата:

Москва, 18 июня 2025 года – Газпромбанк успешно завершил один из самых масштабных ИТ-проектов последних лет — переход на полностью импортозамещённую автоматизированную банковскую систему (АБС) ЦФТ, в основе которой лежит программно-аппаратный комплекс Скала^р (продукт Группы Rubytech) для построения доверенной ИТ-инфраструктуры финансового сектора на базе технологии Postgres Pro Enterprise.

Официальный сайт Газпромбанка, статья Газпромбанк завершил переход на импортозамещённую автоматизированную банковскую систему

Перешел и перешел, молодцы. Но попалась мне на глаза реклама ООО «Постгрес Профессиональный», под видом статьи Как Газпромбанк перешел на российскую СУБД. Поскольку это реклама под видом «колонки» (то, что реклама написано внизу, серыми буквами), то дата не проставлена.

Понравилась мне оттуда цитата:

Приведу пример с резервным копированием и восстановлением данных. Высокая скорость этих процессов была для нас одним из ключевых требований, потому что при наступлении фатальной ошибки критически важно быстро восстановиться из резервной копии. Postgres Pro Enterprise делает это за два часа, иностранные решения, которые мы тестировали, — за 14.

Возникает вопрос, как так это у них получается.

Если (по неизвестным причинам) использовать не средства резервного копирования (которые все равно используют RMAN), а сам RMAN, то он, если я правильно прочитал, позволяет выполнять параллельное восстановление, цитата:

As long as there are many backup pieces into a backup set, RMAN will use an appropriate number of channels - if allocated - to restore the database.
Ex:
7 backup pieces and 6 channels allocated - RMAN will use the whole 6 channels in parallel
6 backup pieces and 6 channels allocated - RMAN will use the whole 6 channels in parallel
5 backup pieces and 6 channels allocated - RMAN will use only 5 channels - one will be IDLE
rman restore datafile : how to force parallelism ?

Если говорить про Microsoft SQL, то там есть SMB multichannel, и давным давно есть Accelerated database recovery, ADR и Multi-Threaded Version Cleanup (MTVC)
Accelerated Database Recovery enhancements in SQL Server 2022

У Postgre тоже есть параллельное исполнение:

By using multiple concurrent jobs, you can reduce the time it takes to restore a large database on a multi-vCore target server. The number of jobs can be equal to or less than the number of vCPUs that are allocated for the target server.
Best practices for pg_dump and pg_restore for Azure Database for PostgreSQL

Но не в 7 же раз разница.

Заключение

Не знаю, как после первой истории не вспомнить загадку про трех черепах:
Три черепахи ползут по дороге. Одна черепаха говорит: “Впереди меня две черепахи”. Другая черепаха говорит: “Позади меня две черепахи”. Третья черепаха говорит: “Впереди меня две черепахи и позади меня две черепахи”. Как такое может быть?

Вторая история просто интересная.

PS. И про первую историю, пишут что: Gov't official in charge of state computer network dies after fall at Sejong complex.

Как говорил один мой знакомый, покойник: я слишком много знал.

Две истории про бекапы

PS. Тега commvault нет

Показать полностью 1
173

Это норма?1

Обычный день субботы. У сына одного из главных топ-менеджеров крупного гос. предприятия сломался домашний компьютер. Этот топ-менеджер звонит топ-менеджеру по IT, а тот уже вызванивает своего первого зама. Далее этот первый зам вызванивает еще одного зама и через несклько начальничков вызванивается ИТР.

ИТР тут же бросает все свое дела и летит за 100 км к этому топ-менджеру домой ремонтировать ПК ребёнка. Отремонтировать на месте не получается. Начальством принимается решение забрать комп и в понедельник отремонтировать его на работе, отложив все задачи. В понедельник все замы топа по IT и другие начальники, а так же сам ИТР получают по башке от топа по IT. Так же ИТРа лишают премии.

Отличная работа, все прочитано!