Вышел Gately v0.6.6
12 ноября 2026 г.
Скачать v0.6.6 · GitHub Release
Релиз посвящён усилению безопасности. Обновиться рекомендуется всем пользователям.
Исправления безопасности
- Подделка заголовков источника: раньше удалялись только заголовки с точным совпадением имени, например
X-Real-Ip, а бэкенды на PHP, WSGI и CGI считаютX_Forwarded_ForиX_Real_IPтой же переменной, что и настоящий заголовок, поэтому посетитель мог сообщить такому бэкенду любой адрес клиента или схему. Теперь заголовки источника и исходного порта, присланные посетителем, вместе с вариантами через подчёркивание всегда удаляются перед пересылкой. Подзапросы прямой аутентификации обрабатываются так же, аX-Original-URIтеперь записывает сам Gately, поэтому службы аутентификации, разрешающие пути по этому значению, больше не вводятся в заблуждение значением от посетителя. - Ограничение попыток входа в файловые службы: проверки паролей WebDAV, FTP и SMB не имели лимита попыток. Теперь источник с 10 неудачами за 15 минут отклоняется до конца окна (IPv6 группируется по /64, успешный вход счётчик не сбрасывает). Недавно проверенные учётные данные не занимают место, а анонимные пробы SMB не учитываются.
- Восстановление: при восстановлении файла учётной записи используется новый ключ сеансов, поэтому старая резервная копия не вернёт в силу токены, отозванные позже выходом или функцией «Выйти на всех устройствах». Копии, которые после распаковки занимают больше 128 МБ или содержат более 256 файлов, отклоняются.
- Прочее: импорт конфигурации nginx ограничивает глубину вложенности блоков (сильно вложенный файл исчерпывал стек и завершал процесс); заголовки Host длиннее 300 байт получают ответ 400; имена пользователей, записываемые в аудит и журналы при неудачном входе, обрезаются до 64 символов.
- Зависимости: исправления безопасности стандартной библиотеки Go 1.26.11; обновлены golang.org/x/net, klauspost/compress и andybalholm/brotli; SMB-клиент монтирования хранилищ заменён на поддерживаемый cloudsoda/go-smb2 (GO-2026-5051).
Учётные записи и сеансы
- Серверный отзыв сеансов: при выходе токен отзывается, а в «Настройки → Аккаунт и безопасность → Сеансы входа» появилась кнопка «Выйти на всех устройствах» (
POST /api/account/sessions/revoke), которая сразу завершает все сеансы, созданные входом по паролю, Passkey, через сторонних провайдеров и через шлюз fnOS. API-токены остаются без изменений. - Ограничение исходящих запросов (
restrictOutbound, по умолчанию выключено): при включении исходящие запросы по адресам, заданным администратором (вебхуки, уведомления, подписки на списки IP, обратные вызовы DDNS, проверка обновлений, вход через сторонних провайдеров и т. д.), отклоняют loopback-, частные и link-local-адреса (включая 169.254.169.254). Проверка применяется к разрешённому IP при каждом соединении, поэтому охватывает и перенаправления, и DNS rebinding. Апстримы обратного прокси, Wake-on-LAN, монтирование хранилищ и другие функции для внутренней сети остаются без изменений. - Защита от медленных запросов: порт управления ограничивает чтение тела запроса для каждой конечной точки. Обычные конечные точки должны завершить передачу за 60 секунд; конечные точки для больших файлов (восстановление копии, пакеты обновления, загрузка файлов) не ограничены по общему времени, но должны непрерывно передавать данные со средней скоростью не менее 4 КиБ/с.
Веб-служба
- Удаление префикса пути у бэкендов по путям (#86): у бэкенда по пути появился параметр «Убирать префикс пути при передаче»:
/api/zyqd/abcприходит на бэкенд как/abc, а путь из адреса бэкенда ставится перед ним. Это соответствуетproxy_pass http://backend/;в nginx, при импорте конфигурации nginx параметр включается автоматически. - Исходный порт посетителя (#83): при включённом «Добавлять X-Forwarded-*» бэкенду отправляются
X-Real-PortиX-Forwarded-For-Port. Если Gately находится за CDN или обратным прокси, в глобальных настройках можно указать «Заголовок реального порта». - Двухуровневый Gately (#81): если внешний экземпляр выполняет только WAF, а вход обрабатывает внутренний, задайте на обоих один и тот же ключ метки аутентификации и включите на внешнем сайте «Доверять метке аутентификации бэкенда»; посетители, прошедшие аутентификацию на внутреннем экземпляре, обходят и внешний WAF.
Подробнее в разделах Веб-служба и WAF.
Резервное копирование и восстановление (#85)
При восстановлении конфигурации теперь можно выбрать «Сохранить текущую учётную запись администратора»: учётная запись, API-токены и вход через сторонних провайдеров в интерфейсе управления сохраняют текущие значения, а в копии может не быть account.json, что удобно при переносе конфигурации с другого экземпляра. Подробнее в Конфигурация · Резервное копирование и восстановление.
Исправления
- DDNS (#84): записи dynv6 с основным доменом
dynv6.netи поддоменомxxxxбольше не приводят к ошибке 404 при синхронизации и при удалении записи у провайдера; зонаxxxx.dynv6.netопределяется автоматически.
Производительность
- Список блокировок при большом числе записей больше не перестраивает список CIDR при каждом изменении; маршрутизация сайтов сравнивает домены с подстановкой только после промаха по точному домену; просроченные записи ограничения частоты и неудачных входов очищаются не чаще раза в секунду.
- Базовая аутентификация сайтов и WebDAV кэшируют успешные проверки bcrypt на 10 минут, поэтому затраты CPU на запрос снижаются с примерно 85 мс до микросекунд.
- Перенаправление портов повторно использует буферы копирования, когда splice недоступен; список живых соединений строит только возвращаемые 500 строк; удаление заголовков источника больше не выделяет память.
- Статистика сайтов, состояние и журналы Docker и список сеансов терминала в веб-интерфейсе перестают опрашиваться, пока вкладка браузера скрыта.
Заметки об обновлении
- Docker: загрузите новый образ и пересоздайте контейнер; OpenWrt: установите новый
.apk/.ipkповерх старого; fnOS: установите новый.fpkв Центре приложений; остальные установки можно обновить онлайн в «Системных настройках». - Открытые сеансы остаются действительными после обновления; если все устройства должны войти заново, используйте «Выйти на всех устройствах».