За зворотним проксі
Kept слухає порт 8080 і працює зі звичайним HTTP; проксі перед ним завершує TLS. Спрямуйте проксі на порт 8080, встановіть KEPT_PUBLIC_URL на адресу, яку відкривають люди, і перевірте речі нижче. Власний профіль Caddy у Compose вже робить перші три.
Довіряйте проксі, і тільки проксі
Section titled “Довіряйте проксі, і тільки проксі”Kept обмежує частоту спроб входу, кодів налаштування та інших чутливих запитів за клієнтською адресою. За проксі адреса клієнта надходить у X-Forwarded-For, яку може записати будь-хто. Kept вірить їй лише від адрес у KEPT_TRUSTED_PROXIES:
KEPT_TRUSTED_PROXIES=10.0.0.5 # one proxyKEPT_TRUSTED_PROXIES=10.0.0.5,10.0.1.0/24 # several, or a rangeKept проходить X-Forwarded-For справа і зупиняється на першій адресі, якій не довіряє: це і є клієнт. Порожньо (за замовчуванням), адресою клієнта є адреса сокета. Вкажіть адресу проксі так, як її бачить Kept (у мережі Docker це адреса контейнера проксі, а не хоста), а також не включайте нічого, звідки стороння особа могла б надсилати запити.
З Compose вкажіть це в .env поруч із compose.yaml. До 1.14.5 compose.yaml задавав власне значення, і рядок у .env ніколи не доходив до Kept; на тих версіях задайте це для служби kept у compose.override.yaml. З compose.full.yaml для Caddy залиште поле порожнім (адреса Caddy є за замовчуванням) або залиште 172.29.72.200 у списку.
Блокування налаштування
Section titled “Блокування налаштування”Неправильні коди налаштування блокують адресу, що їх надіслала, на деякий час, а багато неправильних кодів блокують увесь екземпляр. Якщо проксі немає в KEPT_TRUSTED_PROXIES, усі відвідувачі мають спільну адресу проксі, тому вгадування однієї людини блокують усіх. Команда kept admin setup-code видає новий код і знімає блокування на рівні екземпляра, але не для окремої адреси: воно минає саме.
Дозвольте завантаження
Section titled “Дозвольте завантаження”Проксі має приймати тіло запиту щонайменше такого розміру, як Kept, і не повинен буферизувати завантаження, якщо це не потрібно:
| Завантаження | Ліміт Kept |
|---|---|
| Фото, квитанція або документ | KEPT_MAX_FILE_MB, 25 МБ за замовчуванням; передається потоком, відхиляється зі статусом 413 до прочитання, якщо надто велике |
| Імпорт CSV | 8 МБ |
Типово більшість проксі мають менший ліміт (наприклад, client_max_body_size у nginx); підвищте його щонайменше до KEPT_MAX_FILE_MB. Тайм-аути мають дозволяти велике завантаження через повільне телефонне з’єднання.
Дайте Kept власне ім’я хоста
Section titled “Дайте Kept власне ім’я хоста”Обслуговуйте Kept на імені хоста, батьківський домен якого не має сайтів, які ви не контролюєте, або на окремому домені. Через HTTPS cookie сесії Kept має префікс __Secure-, що все одно дозволяє сторінці на сусідньому піддомені (other.example.org поряд із kept.example.org) встановити cookie для example.org, які браузер також надсилає Kept. Сусідній сервіс, яким керує хтось інший, міг би скористатися цим, щоб зафіксувати сесію. Ваші власні інші сервіси на сусідніх піддоменах — це нормально.
“Цей Kept налаштований для …”
Section titled ““Цей Kept налаштований для …””Додаток каже “Цей Kept налаштований для адреса. Відкрийте його там.” коли його відкривають за іншою адресою, ніж KEPT_PUBLIC_URL.
- Чому: Kept приймає запити на зміну даних лише з адреси в
KEPT_PUBLIC_URL, заOriginбраузера: схема, хост і порт точно. Проксі не відіграє жодної ролі; його власна адреса та заголовкиX-Forwarded-*цього не змінюють. - Виправлення: встановіть
KEPT_PUBLIC_URLточно на адресу, яку відкривають люди (https://kept.example.org, а не внутрішню адресу проксіhttp://kept:8080), і перезапустіть Kept. - Більше ніж одна адреса:
KEPT_EXTRA_ADDRESSESперелічує інші, і кожна також має досягати Kept через ваш проксі (Більше ніж одна адреса).
Докладніше у Усуненні несправностей.
З https: у KEPT_PUBLIC_URL Kept надсилає Strict-Transport-Security: max-age=31536000: браузери потім відкривають це ім’я хоста лише через https, протягом року. Через http: він нічого не надсилає.
- Усе ім’я хоста, усі порти: браузер застосовує політику до імені хоста, а не до порту Kept. Служба зі звичайним HTTP на тому самому імені, наприклад
http://server.lan:8081поряд із Kept наhttps://server.lan, тоді примушується до https і перестає завантажуватися. Браузери ігнорують HSTS для IP-адреси. - Вимкнути: встановіть
KEPT_HSTS=off, коли інші служби зі звичайним HTTP мають спільне ім’я хоста з Kept, і перезапустіть. Тоді Kept надсилаєmax-age=0, тому браузер, що зберіг політику, забуває її під час наступного https-візиту до Kept. Якби заголовок просто прибрали, це б не спрацювало. - Ваш проксі: якщо він додає власний заголовок
Strict-Transport-Security, вимкніть його й там. - Домени з попереднім завантаженням: під доменом верхнього рівня зі списку попереднього завантаження HSTS браузерів, наприклад
.devабо.app, будь-яке ім’я — лише https, що б Kept не надсилав.
Очистити збережену політику вручну
Section titled “Очистити збережену політику вручну”Коли Kept більше недоступний через https, max-age=0 не може дійти до браузера. Очистіть ім’я хоста в кожному браузері, що його відвідував:
- Chrome, Edge та інші браузери на базі Chromium: відкрийте
chrome://net-internals/#hsts(в Edge —edge://net-internals/#hsts), введіть ім’я хоста в розділі Видалити політики безпеки домену і виберіть Видалити. - Firefox: Історія → Керування історією, знайдіть сайт, клацніть правою кнопкою миші й виберіть Забути про цей сайт. Це також видаляє його історію, cookie та збережені логіни.
- Safari на Mac: не має сторінки для HSTS. Видаліть дані сайту (Налаштування → Конфіденційність → Керування даними вебсайтів, виберіть його, Видалити); якщо звичайний http усе ще перетворюється на https, очистіть історію також (Історія → Очистити історію).
- Safari на iPhone або iPad: Налаштування → Програми → Safari (Налаштування → Safari до iOS 18) → Додатково → Дані вебсайтів, знайдіть сайт і видаліть його; якщо цього недостатньо, Очистити історію та дані вебсайтів на сторінці Safari.