← systems

002 Кейс: Безопасность по умолчанию (HSTS Preload + Certbot Automation)

Выбирая домен для сайта, .com и .ru были заняты, и я выбрал .dev. Но этот домен попадает в список HSTS Preload, который в свою очередь обеспечивает страховку от атак на понижение протокола. Если обычный HTTPS говорит браузеру: «Давай зашифруем данные», то HSTS Preload говорит: «У тебя даже нет права пробовать незашифрованный канал».

Так как я это выяснил уже после его приобретения, осталось лишь выбрать инструмент, который зашифрует канал передачи данных.

Рассмотрим кейс со стороны теории и практики, которую я применил.

HTTP (HyperText Transfer Protocol) - это базовый протокол передачи гипертекста. Архитектурно он задумывался как простой механизм обмена текстовыми данными между клиентом и сервером. Уязвимость этого протокола в том, что любое промежуточное звено (провайдер, роутер в кафе, администратор сети) может прочитать или изменить содержимое пакетов в процессе доставки.

HTTPS (HTTP Secure) - это не отдельный протокол, а надстройка: HTTP, работающий поверх зашифрованного транспортного слоя TLS/SSL. Данные превращаются в нечитаемый шум для всех, кроме отправителя и получателя. Даже если злоумышленник перехватит трафик, он не сможет его расшифровать без приватного ключа.

Что сделал?

  1. Работа на сервере (SSL-сертификация)
    • Доступ. Установил на сервере утилиту Certbot, которая бесплатно получила официальные ключи шифрования от центра сертификации Let’s Encrypt.
    • Валидация. Certbot проверил, что домен принадлежит мне, и сохранил файлы сертификатов в системную папку на моем VPS(виртуальный приватный сервер).
  2. Настройка инфраструктуры (Docker и Nginx)
    • Порт 443. В docker-compose.yml открыл порт 443, чтобы сервер мог принимать защищенный трафик.
    • Монтирование папок. Добавил volumes, чтобы Docker-контейнер «увидел» файлы сертификатов, лежащие на самом сервере.
    • Конфигурация Nginx. Обновил nginx.conf, прописав там пути к сертификатам и настроив автоматический редирект: теперь любого пользователя, зашедшего на http, сервер мгновенно и безопасно перекидывает на https.
  3. Автоматизация и отказоустойчивость
    • Настроил cron-job, который первого числа каждого месяца автоматически запускает процесс обновления. Так как бесплатные сертификаты Let’s Encrypt выдаются на 90 дней, после чего сайт снова станет недоступным из-за правил HSTS.
    • Интегрировал в команду обновления хуки (--pre-hook и --post-hook), которые на несколько секунд останавливают Docker-контейнер для освобождения порта и запускают его обратно после успешного получения новых ключей. Это обеспечило полную автономность системы без необходимости ручного вмешательства каждые три месяца.

То, что начиналось как вынужденное ограничение домена .dev, привело к созданию отказоустойчивой и безопасной системы. Это еще раз доказывает недавнюю мысль в тг канале: правильные ограничения только стимулируют качественную инженерию.