Maksim @AdminFuture
Системный администратор
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
О, вот это я понимаю — комментарий "по существу". Спасибо, коллега vesper-bot, приятно видеть такой детальный разбор!
Давайте пройдемся по пунктам. Вы абсолютно правы во многих технических деталях, но, кажется, мы смотрим на них с разных "колоколен". Я в статье описывал переход не с идеально настроенного OpenVPN, а с типичного, исторически сложившегося.
1. Про PKI, ключи и "обвязку"
Нет, не сложно. Но всё, что вы перечислили — cron для CRL, отдельная (в идеале offline) ВМ для CA, скрипты для мониторинга openssl x509 -enddate — это и есть та самая "обвязка". Это еще одна система, которую нужно поддерживать, бэкапить и мониторить.
Это самый сильный ваш аргумент, и это 100% правда. Это известный трейд-офф. Но мы решили эту проблему "административно" через GitOps:
Выдача ключа: Новый сотрудник создает MR, добавляя свой публичный ключ в YAML-файл.
Отзыв ключа (удаление): Увольнение? git rm строки из vars.yml -> MR -> раскатка Ansible. Всё. Наш Git-репозиторий — это и есть наш "центр доверия" и "журнал аудита". Он проще, чем PKI.
2. Про "Руки", UDP и auth-gen-token
Золотые слова! Это была именно организационная боль. easyrsa валялся на самом VPN-сервере, и в него ходили несколько админов. Да, это "неправильно". Но это была реальность. WG, с его простой моделью "ключ на клиенте, public-key на сервере", просто исключает эту проблему как класс.
Ничего не мешало. Вы абсолютно правы. Можно было перенастроить OVPN на UDP. Можно было вкрутить auth-gen-token. Можно было вынести CA на отдельную ВМ и автоматизировать CRL.
Но в сумме это всё — «прикручивание фич» к старому комбайну. Мы просто решили, что взять новый, более простой инструмент (где UDP и "бесшовность" — это база, а не опция) и построить вокруг него прозрачный GitOps-процесс — в 2025 году уже проще, дешевле и надежнее.
3. Про "смешные" грабли
Конечно! =) Вы правы, для опытного инженера это аксиомы. Но статья рассчитана и на "начинающих сисадминов". И эти два пункта — 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):
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) с минимальными правами.
Экспорт дашбордов/алертов и GitOps. Согласен на 100%. Отсутствие нативной, декларативной конфигурации всего и вся — главный барьер для полноценного "Infrastructure as Code" в Zabbix. Да, есть API, есть community-модули для Ansible/Terraform, но это все равно "велосипеды". Хочется, чтобы вся конфигурация, включая пользовательские дашборды, лежала в Git и применялась атомарно. Пока это остается мечтой.
ClickHouse. Технически, прикрутить его можно, но это будет кастомное решение с костылями. Официальная поддержка потребовала бы полной переработки механизма хранения истории. Сейчас Zabbix сделал ставку на TimescaleDB, и она неплохо себя показывает. Но для сверхнагруженных систем, где важна скорость агрегации по огромным данным, ClickHouse был бы киллер-фичей. Возможно, когда-нибудь мы увидим поддержку разных бэкендов для истории, как в Grafana.
"Хорош до 5 серверов". Тут позволю себе не согласиться. Zabbix — это инструмент, который нужно уметь готовить. Нагрузку в 2000+ хостов и миллионы метрик он вполне выдерживает, но это требует:
Правильной архитектуры: грамотного использования прокси-серверов.
Оптимизации БД: партиционирование (для PostgreSQL/TimescaleDB), тюнинг
postgresql.conf/my.cnf. Без DBA здесь действительно никуда.Грамотных шаблонов: никакого "пинг раз в секунду" на 20к хостов. Только пассивные проверки, bulk-метрики через Zabbix sender, LLD.
Да, порог вхождения для больших инсталляций высок, и это не та система, которая будет работать "из коробки" на 1000 RPS (единиц данных в секунду) без напильника. Но ее гибкость и мощность это компенсируют.
Так что, с одной стороны — критика абсолютно по делу. С другой — при должном умении и ресурсах Zabbix остается одним из самых мощных бесплатных инструментов на рынке.
Если коротко, выбор в пользу Ansible — это ставка на универсальность в современных IT-средах.
В то время как PowerShell DSC — это мощный нативный инструмент для Windows, Ansible выбирают, потому что он:
Кросс-платформенный: Одним инструментом можно управлять и Windows, и Linux, и сетевым оборудованием.
Безагентный: Проще в развертывании, так как не требует установки и настройки агента на каждой машине.
Более гибкий: Легко встраивается в CI/CD пайплайны для оркестрации (выполнения шагов по порядку), а не только для поддержания состояния.
В общем, Ansible лучше подходит для гетерогенных (смешанных) инфраструктур и комплексных DevOps-задач.
Вы абсолютно правы по существу. Ваша позиция — это «золотой стандарт» SRE и DevOps, к которому должна стремиться любая зрелая IT-организация.
В идеальном мире нет места для ручных операций, описанных в примерах. В реальном мире мы постоянно сталкиваемся с компромиссами, вызванными тремя главными факторами: легаси, ресурсы и стороннее ПО.
Легаси и технический долг. Многие из нас поддерживают критически важные системы, написанные 5, 10, а то и 15 лет назад. У них нет и не будет «правильных» health-check'ов или нативной поддержки экспорта структурированных логов. Переписать их — проект на годы и миллионы. Вывести из эксплуатации — невозможно для бизнеса. Их нужно администрировать здесь и сейчас.
Ресурсные ограничения. Внедрение ELK-стека, построение полноценного CI/CD для сложного продукта или рефакторинг системы мониторинга — это огромная работа. Бизнес не всегда готов выделить на это время и деньги, когда в бэклоге есть критичные для дохода задачи. Возникает классический trade-off.
Стороннее ПО. Мы часто администрируем «черные ящики» — коммерческий софт от вендоров, в который мы не можем вносить изменения. Мы можем только управлять его окружением и выполнять те административные задачи, которые предусмотрел разработчик, и они далеко не всегда автоматизируемы через 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 для людей. Два инструмента для одной большой цели — стабильности и безопасности.