# Веб-сервер Webship: безопасные настройки по умолчанию
Безопасный веб-сервер не должен зависеть от того, что оператор вспомнит ещё одну настройку в 2 часа ночи. Он должен начинаться с защитной базовой конфигурации, отклонять небезопасные настройки и требовать обдуманных решений, прежде чем предоставлять доступ к чувствительным возможностям.
Это модель, лежащая в основе Webship. Ее конфигурация по умолчанию включает основные средства защиты запросов и ответов, ограничивает ресурсы, которые может потреблять злоумышленник, и оставляет необязательные элементы управления выключенными. Вы можете настроить эти значения по умолчанию для реального приложения, но вам не нужно открывать каждую защиту до того, как придет первый запрос.
Безопасность по умолчанию не означает безопасность без контекста. Сертификаты, авторизация приложений, сетевая политика, секреты и реагирование на инциденты по-прежнему остаются ответственностью оператора. Задача Webship — сделать безопасную отправную точку очевидной и затруднить случайное ослабление безопасности.
Защиты, которые включены с самого начала
Webship обеспечивает шесть уровней в своей базовой конфигурации:
| Слой | Поведение по умолчанию | Что он уменьшает | | --- | --- | --- | | Защита файлов с точкой | Запрещает статические сегменты пути с точкой в начале | Случайное раскрытие файлов окружения, метаданных репозитория и локальной конфигурации | | Веб-аппликационный файрвол | Блокирует известные шаблоны атак | SQL-инъекции, межсайтовый скриптинг, обход, проверки чувствительных путей, инъекции команд, обход заголовков и неподдерживаемые кодировки запросов | | Управление DDoS | Работает в обычном режиме с ограниченным состоянием клиента | Потоки запросов, неограниченное отслеживание и предотвратимое истощение ресурсов | | Бот-челлендж | Использует подписанное cookie для челленджа | Низкозатратное автоматическое злоупотребление и повторное сканирование | | Заголовки безопасности ответа | Добавляет ограничительную политику браузера | Путаница MIME, фрейминг, утечка реферера, опасные возможности браузера и широкая загрузка контента | | API Shield | Использует режим блокировки и отвергает неизвестные маршруты, как только контракт API определен | Теневые конечные точки, нежелательные методы, неожиданные типы содержимого и отсутствующие требования к авторизации |
По умолчанию WAF также устанавливает жесткие границы того, что он проверяет: 32 КиБ заголовков запросов, путь в 2 048 байт и тело запроса размером 1 МиБ. Это лимиты безопасности, а не произвольные настройки производительности. Если приложению действительно нужны больше размеры запросов, увеличьте соответствующий лимит для этого приложения и протестируйте результат, вместо того чтобы отключать проверку глобально.
Защита от DDoS начинается в обычном режиме при 600 запросах в минуту с разрешённым пиковым значением в 100 запросов на каждый ключ клиента. Таблица состояния клиентов ограничена 65 536 записями. Эти значения являются базовыми и не представляют собой универсальную модель трафика: общедоступный API, сервис загрузки и внутренняя панель администратора не должны использовать одни и те же ограничения, специфичные для приложения.
Защита браузера является частью базового уровня
Политика заголовков ответов Webship включена даже в том случае, если приложение забывает добавить собственные заголовки. По умолчанию включены:
- X-Content-Type-Options: nosniff;
- политика отказа в отображении во фрейме
- Политика-реферер: no-referrer;
- Strict-Transport-Security на один год, включая поддомены;
- Политика безопасности контента ограничена контентом того же источника, с ограничениями на фрейминг и базовый URI;
- Политика разрешений, отключающая доступ к геолокации, микрофону и камере.
Эти настройки по умолчанию намеренно ограничительны. Проверьте HSTS перед его применением к домену с поддоменами, которые не полностью готовы к HTTPS. Проверьте Content-Security-Policy перед загрузкой приложением скриптов, стилей, шрифтов, изображений или подключений с других источников. Безопасная настройка по умолчанию должна явно выдавать ошибку при развертывании, а не тихо ослабляться в продакшене.
Дополнительные поверхности остаются закрытыми
Webship не предоставляет доступ ко всем функциям только потому, что они включены в бинарный файл. Обратное проксирование, WebTransport, точки наблюдаемости, автоматический TLS, происхождение ответа и управляющая конечная точка MCP по умолчанию отключены.
Конечная точка MCP имеет область действия loopback при включении и требует явной настройки безопасности. Метрики и статистика требуют преднамеренного включения инструментирования. Автоматическое управление сертификатами требует, чтобы оператор выбрал каталог ACME, контакты, хранилище и согласие с условиями обслуживания. Это предотвращает превращение операционных функций в неожиданные сетевые поверхности.
Базовый слушатель также привязывается к 127.0.0.1. Оператор должен явно выбрать публичный адрес. Этот единственный выбор создает полезную точку обзора для правил брандмауэра, разрешений сервисов, идентификации TLS и топологии развертывания.
Обратное проксирование сохраняет границу доверия
Когда включено обратное проксирование, прохождение TLS остается значением по умолчанию. Webship перенаправляет зашифрованный трафик, не получая доступа к открытым данным приложения или активным ключам сессии. Исходный сервер продолжает нести ответственность за TLS и согласованный протокол.
Включайте завершение TLS только тогда, когда Webship должен проверять HTTP-запросы, маршрутизировать по пути, применять правила WAF и API, переписывать заголовки или кешировать ответы. Завершение само по себе не менее безопасно; оно смещает границу доверия. Важное решение заключается в том, какой машине разрешено видеть открытый текст и почему.
Проход также имеет функциональные ограничения. Маршрутизация TCP основана на ClientHello SNI, потому что HTTP-запрос зашифрован. Проход HTTP/3 требует, чтобы маршруты использовали один UDP-источник. Если вам нужна безопасность с учетом содержимого на краю сети, завершите TLS там и защитите переход от края к источнику отдельно.
Базовый уровень производства, который вы можете просмотреть
Следующий отрывок явно указывает важные значения по умолчанию вместо того, чтобы полагаться на их пропуск:
listen = "0.0.0.0:443"
deny_dotfiles = true
[tls]
unknown_sni = "reject"
[ddos]
enabled = true
mode = "normal"
requests_per_minute = 600
burst = 100
block_seconds = 60
max_tracked_clients = 65536
[security]
enabled = true
rate_limit_max_entries = 65536
[security.waf]
enabled = true
mode = "block"
sqli = true
xss = true
traversal = true
sensitive_paths = true
header_abuse = true
max_header_bytes = 32768
max_path_bytes = 2048
max_body_bytes = 1048576
[security.response_headers]
enabled = true
nosniff = true
frame_deny = true
referrer_no_referrer = true
hsts = "max-age=31536000; includeSubDomains"
content_security_policy = "default-src 'self'; frame-ancestors 'none'; base-uri 'self'"
permissions_policy = "geolocation=(), microphone=(), camera=()"На слушателе с несколькими доменами параметр unknown_sni = "reject" предотвращает получение неназванным хостом сертификата по умолчанию слушателя. Автоматические TLS-слушатели Webship уже отклоняют неизвестные имена, пока не появится соответствующий сертификат.
Валидация является мерой безопасности
Webship проверяет конфигурацию перед привязкой слушателей. Неизвестные поля, недопустимые ограничения, неполные идентификаторы, конфликтующие слушатели и неподдерживаемые комбинации протоколов приводят к сбою запуска с конкретной ошибкой. Та же проверка выполняется перед установкой рабочей конфигурации. Неудачная перезагрузка оставляет текущую конфигурацию активной.
Аутентифицированный путь конфигурации MCP добавляет еще один уровень защиты: он отказывается принимать изменения в реальном времени, которые могли бы отключить активный WAF, уровень DDoS, API Shield, проверку ботов, политику edge-auth или уровень заголовков ответа. Проверки версии предотвращают возможность одного администратора перезаписать более новую конфигурационную снимку. Настройки, привязанные к процессу, по-прежнему требуют перезапуска вместо того, чтобы притворяться, что частичное изменение в реальном времени прошло успешно.
Это полезное различие. Безопасные значения по умолчанию защищают новую установку. Транзакционная проверка и защищённые обновления защищают работающую систему.
Какие операторы всё ещё должны принять решение
Перед подключением Webship к интернету:
- Настройте доверенный TLS-идентификатор и защитите приватный ключ.
- Установите обработку неизвестного SNI для топологии прослушивателя.
- Подтвердите, что HSTS и Content-Security-Policy соответствуют каждому приложению и поддомену.
- Определите конечные точки API Shield, допустимые методы, типы содержимого и требования к авторизации.
- Добавьте ограничения скорости для конкретных маршрутов вместо того, чтобы полагаться только на глобальный базовый уровень.
- Включите аутентификацию на границе для защищённых хостов или путей и используйте краткоживущие токены.
- Держите слушатели MCP и наблюдаемости приватными, аутентифицированными и отдельными от публичного трафика.
- Запускайте Webship с выделённой непривилегированной учётной записью, с корнем приложения только для чтения там, где это возможно, и только с теми возможностями операционной системы, которые ему необходимы.
- Проверьте конфигурацию перед развертыванием, затем протестируйте заблокированный и разрешённый трафик в канареечной среде.
- Отслеживайте события аудита безопасности и отрабатывайте переход из нормального режима в режим «под атакой» или «блокировка».
Более безопасный вариант по умолчанию — это начало, а не утверждение
Ни один веб-сервер не может решить, какие пользователи должны видеть ваши счета, какие источники могут вызывать ваш API или как быстро ваш бизнес-эндпоинт должен принимать запросы. Для управления этим требуется знание приложения.
Webship обеспечивает нижний уровень: ограниченные парсеры, строгую конфигурацию, защитные заголовки ответов, проверку запросов, средства контроля злоупотреблений и закрытые дополнительные поверхности. Результатом не является «решение всех проблем безопасности». Это уменьшение разрыва между установкой сервера и его ответственным управлением.
Изучите полную документацию Webship перед развертыванием в производственной среде. Схема конфигурации и работающий бинарный файл остаются авторитетными источниками для точной версии, которую вы используете.