Pull to refresh
28
0

Системный администратор

Send message

О, вот это я понимаю — комментарий "по существу". Спасибо, коллега vesper-bot, приятно видеть такой детальный разбор!

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

1. Про PKI, ключи и "обвязку"

"Управление CA - хотя и неприятно, но можно сделать на вменяемом уровне... CRL... Обновление сертификатов..." "Сложно создать CRL? Сложно мониторить истечение?"

Нет, не сложно. Но всё, что вы перечислили — cron для CRL, отдельная (в идеале offline) ВМ для CA, скрипты для мониторинга openssl x509 -enddate — это и есть та самая "обвязка". Это еще одна система, которую нужно поддерживать, бэкапить и мониторить.

"если серт рано или поздно истечёт, то ключ [WG] - нет."

Это самый сильный ваш аргумент, и это 100% правда. Это известный трейд-офф. Но мы решили эту проблему "административно" через GitOps:

  • Выдача ключа: Новый сотрудник создает MR, добавляя свой публичный ключ в YAML-файл.

  • Отзыв ключа (удаление): Увольнение? git rm строки из vars.yml -> MR -> раскатка Ansible. Всё. Наш Git-репозиторий — это и есть наш "центр доверия" и "журнал аудита". Он проще, чем PKI.

2. Про "Руки", UDP и auth-gen-token

"А что это у вас кто попало лазает в easyrsa кривыми руками?"

Золотые слова! Это была именно организационная боль. easyrsa валялся на самом VPN-сервере, и в него ходили несколько админов. Да, это "неправильно". Но это была реальность. WG, с его простой моделью "ключ на клиенте, public-key на сервере", просто исключает эту проблему как класс.

"OpenVPN прекрасно умеет работать по UDP... что мешало перенастроить?" "Проблема разрыва... решается параметром auth-gen-token"

Ничего не мешало. Вы абсолютно правы. Можно было перенастроить OVPN на UDP. Можно было вкрутить auth-gen-token. Можно было вынести CA на отдельную ВМ и автоматизировать CRL.

Но в сумме это всё — «прикручивание фич» к старому комбайну. Мы просто решили, что взять новый, более простой инструмент (где UDP и "бесшовность" — это база, а не опция) и построить вокруг него прозрачный GitOps-процесс — в 2025 году уже проще, дешевле и надежнее.

3. Про "смешные" грабли

"Firewall - смешно. Вы же проверяете... да?" "IPv4 forwarding - вообще аксиома..."

Конечно! =) Вы правы, для опытного инженера это аксиомы. Но статья рассчитана и на "начинающих сисадминов". И эти два пункта — 90% всех проблем "почему мой WG не работает?" на StackOverflow. Я счел своим долгом включить их, чтобы сэкономить кому-то пару часов дебага.

Итого:

Вы абсолютно правы: можно было обойтись перенастройкой OpenVPN. Но статья не о том, что OVPN нельзя заставить работать хорошо. Она о том, что цена поддержки "хорошо настроенного OVPN" (со всей его PKI-обвязкой) оказалась для нас выше, чем цена поддержки "хорошо настроенного WireGuard" (который, по сути, один conf + один vars.yml в Git).

Спасибо за то, что заставили копнуть глубже!

Классический MASQUERADE, чтобы не бегать к сетевикам. 'Прод' видит трафик от самого WG-сервера и ему же отвечает.

Вы абсолютно правы, TLS сам по себе не лечит уязвимости в коде Samba или Windows. Его задача — защитить канал.

Ключевое отличие SMB over QUIC в том, что атакующий не может добраться до уязвимого кода SMB до аутентификации. Весь процесс, включая согласование диалектов и аутентификацию (самые опасные фазы в старых атаках), происходит внутри уже установленного туннеля TLS 1.3. Внешний сканер не видит SMB-сервер — он видит только зашифрованный UDP-поток. Это принципиально снижает поверхность атаки по сравнению с открытым портом 445/TCP.

Вот краткая инструкция для Windows Server (все команды в PowerShell):

# 1. Требуем от клиентов предъявлять сертификат
Set-SmbServerCertificateMapping -Name files.company.com -RequireClientAuthentication $true

# 2. Разрешаем доступ конкретному клиенту по SHA256-хешу его сертификата
Grant-SmbClientAccessToServer -Name files.company.com -IdentifierType SHA256 -Identifier "хеш_сертификата"

# 3. Включаем аудит, чтобы видеть в логах, кто и как подключается
Set-SmbServerConfiguration -AuditClientCertificateAccess $true

SFTP неудобен для рядовых пользователей, так как требует отдельного клиента (вроде FileZilla) и ручного скачивания/загрузки файлов.

SMB работает прозрачно как обычный сетевой диск в «Проводнике», позволяя редактировать файлы прямо на сервере. При этом SMB over QUIC решает исторические проблемы безопасности, шифруя весь трафик в туннеле TLS 1.3.

Это надёжно. Весь SMB-трафик, включая аутентификацию, полностью шифруется туннелем TLS 1.3. Атакующий извне не видит сам протокол SMB, чтобы его атаковать. Дополнительно можно включить проверку клиентских сертификатов, что защитит от кражи пароля.

В России нужно обязательно тестировать. Из-за особенностей работы провайдеров и систем фильтрации (ТСПУ), QUIC может работать нестабильно, со снижением скорости или обрывами. Перед внедрением проведите пилот на сотрудниках с разными интернет-провайдерами.

Вам нужно приобрести доменное имя, и создать dns запись с ip адресом в настройках у регистратора

Сервер запустится на дистрибутивах Linux со свежим ядром и Samba 4.23 или новее. В первую очередь это Arch, openSUSE и последние версии Fedora.

Клиент будет работать на Windows 11 и Windows Server 2025. Поддержки в Windows 10 нет.

Делайте печать через выделенный принт-сервер (а не с самого RDS), а сканирование — через «безопасные приёмники» (почта/сетевые папки/FTPS) с минимальными правами.

  1. Экспорт дашбордов/алертов и GitOps. Согласен на 100%. Отсутствие нативной, декларативной конфигурации всего и вся — главный барьер для полноценного "Infrastructure as Code" в Zabbix. Да, есть API, есть community-модули для Ansible/Terraform, но это все равно "велосипеды". Хочется, чтобы вся конфигурация, включая пользовательские дашборды, лежала в Git и применялась атомарно. Пока это остается мечтой.

  2. ClickHouse. Технически, прикрутить его можно, но это будет кастомное решение с костылями. Официальная поддержка потребовала бы полной переработки механизма хранения истории. Сейчас Zabbix сделал ставку на TimescaleDB, и она неплохо себя показывает. Но для сверхнагруженных систем, где важна скорость агрегации по огромным данным, ClickHouse был бы киллер-фичей. Возможно, когда-нибудь мы увидим поддержку разных бэкендов для истории, как в Grafana.

  3. "Хорош до 5 серверов". Тут позволю себе не согласиться. Zabbix — это инструмент, который нужно уметь готовить. Нагрузку в 2000+ хостов и миллионы метрик он вполне выдерживает, но это требует:

    • Правильной архитектуры: грамотного использования прокси-серверов.

    • Оптимизации БД: партиционирование (для PostgreSQL/TimescaleDB), тюнинг postgresql.conf / my.cnf. Без DBA здесь действительно никуда.

    • Грамотных шаблонов: никакого "пинг раз в секунду" на 20к хостов. Только пассивные проверки, bulk-метрики через Zabbix sender, LLD.

Да, порог вхождения для больших инсталляций высок, и это не та система, которая будет работать "из коробки" на 1000 RPS (единиц данных в секунду) без напильника. Но ее гибкость и мощность это компенсируют.

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

Если коротко, выбор в пользу Ansible — это ставка на универсальность в современных IT-средах.

В то время как PowerShell DSC — это мощный нативный инструмент для Windows, Ansible выбирают, потому что он:

  1. Кросс-платформенный: Одним инструментом можно управлять и Windows, и Linux, и сетевым оборудованием.

  2. Безагентный: Проще в развертывании, так как не требует установки и настройки агента на каждой машине.

  3. Более гибкий: Легко встраивается в CI/CD пайплайны для оркестрации (выполнения шагов по порядку), а не только для поддержания состояния.

В общем, Ansible лучше подходит для гетерогенных (смешанных) инфраструктур и комплексных DevOps-задач.

Вы абсолютно правы по существу. Ваша позиция — это «золотой стандарт» SRE и DevOps, к которому должна стремиться любая зрелая IT-организация.

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

  1. Легаси и технический долг. Многие из нас поддерживают критически важные системы, написанные 5, 10, а то и 15 лет назад. У них нет и не будет «правильных» health-check'ов или нативной поддержки экспорта структурированных логов. Переписать их — проект на годы и миллионы. Вывести из эксплуатации — невозможно для бизнеса. Их нужно администрировать здесь и сейчас.

  2. Ресурсные ограничения. Внедрение ELK-стека, построение полноценного CI/CD для сложного продукта или рефакторинг системы мониторинга — это огромная работа. Бизнес не всегда готов выделить на это время и деньги, когда в бэклоге есть критичные для дохода задачи. Возникает классический trade-off.

  3. Стороннее ПО. Мы часто администрируем «черные ящики» — коммерческий софт от вендоров, в который мы не можем вносить изменения. Мы можем только управлять его окружением и выполнять те административные задачи, которые предусмотрел разработчик, и они далеко не всегда автоматизируемы через API.

В этом реальном контексте JEA — это не «костыль», который поощряет плохие практики. Это инструмент управления рисками и прагматичный шаг к повышению безопасности.

  • Тактический выигрыш: Пока мы планируем стратегический проект по внедрению централизованного логирования (который займет 6 месяцев), JEA позволяет нам сегодня закрыть огромную дыру в безопасности, когда младший инженер ходит на сервер за логами с правами локального администратора.

  • Безопасный переходный период: Это мост, который позволяет безопасно жить с унаследованной системой, пока на другом берегу строится новая, соответствующая всем канонам DevOps.

  • Аварийный «стеклянный шкаф»: Даже в самых автоматизированных системах случаются непредвиденные сбои (zero-day, уникальный баг). Вопрос не в том, понадобится ли когда-нибудь ручное вмешательство, а в том, насколько безопасным, аудируемым и строго ограниченным будет этот доступ, когда оно понадобится.

Поэтому я полностью с вами согласен: конечная цель — полная автоматизация и построение отказоустойчивых систем. Но путь к этой цели долог. JEA — это профессиональный инструмент, который позволяет пройти этот путь, не оставляя за спиной открытые двери для атак. Это не «или/или», а «и/и» — мы строим правильные процессы и одновременно используем лучшие инструменты для защиты текущего состояния.

Отличный и очень правильный вопрос! Вы абсолютно правы, во многих случаях хороший Watchdog (или современная система мониторинга с автохилингом) — это первая и самая верная линия обороны. Автоматизация мониторинга и восстановления — это основа SRE-подхода, и было бы глупо её игнорировать.

Но, как вы и предположили в конце, «задача» действительно не одна. :)

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

Watchdog сработает, когда пул упал по понятной причине (например, превысил лимиты памяти). А что, если:

  • Нужно просто проверить статус пула или сервиса, не перезапуская его? (Например, в рамках диагностики перед выкаткой).

  • Разработчикам нужно выкатить обновление, что требует ручной последовательности: остановить пул, скопировать файлы, запустить пул. Это плановая операция, которую Watchdog делать не должен.

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

  • Приложение не «упало», а «подвисло» в таком состоянии, которое Watchdog не может отловить (например, отвечает на health-check, но не обслуживает пользователей), и требуется ручной iisreset или перезапуск конкретного пула?

  • Нужно очистить кэш приложения, выполнив специальный скрипт, доступ к которому нужно дать команде поддержки?

В этом и заключается суть JEA. Это не замена системам автоматического восстановления. JEA — это создание безопасного, аудируемого и строго ограниченного «API для людей» на те случаи, когда автоматика бессильна или когда требуется осознанное человеческое вмешательство.

Мы даем инженеру не «ключ от города» (RDP), а только нужный ему «скальпель» (Restart-WebAppPoolSafely, Get-AppLogs, Deploy-NewBuild), чтобы он мог решить одну из этих десятков потенциальных проблем, не создавая при этом дыру в безопасности.

Так что вы попали в самую точку: Watchdog для машин, JEA для людей. Два инструмента для одной большой цели — стабильности и безопасности.

Information

Rating
Does not participate
Location
Пятигорск, Ставропольский край, Россия
Date of birth
Registered
Activity

Specialization

Системный администратор, Администратор серверов
Старший
Linux
Bash
Ubuntu
Администрирование Windows
Администрирование 1С
Active directory
Системы виртуализации
Информационная безопасность
Hyper-V
Microsoft Exchange Server