Pull to refresh
28
19

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

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
406-th
Location
Пятигорск, Ставропольский край, Россия
Date of birth
Registered
Activity

Specialization

System Administration, Server Administrator
Senior
Linux
Bash
Ubuntu
Windows administration
1C administration
Active Directory
Virtualization systems
Information Security
Hyper-V
Microsoft Exchange Server