002 Кейс: Безопасность по умолчанию (HSTS Preload + Certbot Automation)
Выбирая домен для сайта, .com и .ru были заняты, и я выбрал .dev. Но этот домен попадает в список HSTS Preload, который в свою очередь обеспечивает страховку от атак на понижение протокола. Если обычный HTTPS говорит браузеру: «Давай зашифруем данные», то HSTS Preload говорит: «У тебя даже нет права пробовать незашифрованный канал».
Так как я это выяснил уже после его приобретения, осталось лишь выбрать инструмент, который зашифрует канал передачи данных.
Рассмотрим кейс со стороны теории и практики, которую я применил.
HTTP (HyperText Transfer Protocol) - это базовый протокол передачи гипертекста. Архитектурно он задумывался как простой механизм обмена текстовыми данными между клиентом и сервером. Уязвимость этого протокола в том, что любое промежуточное звено (провайдер, роутер в кафе, администратор сети) может прочитать или изменить содержимое пакетов в процессе доставки.
HTTPS (HTTP Secure) - это не отдельный протокол, а надстройка: HTTP, работающий поверх зашифрованного транспортного слоя TLS/SSL. Данные превращаются в нечитаемый шум для всех, кроме отправителя и получателя. Даже если злоумышленник перехватит трафик, он не сможет его расшифровать без приватного ключа.
Что сделал?
- Работа на сервере (SSL-сертификация)
- Доступ. Установил на сервере утилиту Certbot, которая бесплатно получила официальные ключи шифрования от центра сертификации Let’s Encrypt.
- Валидация. Certbot проверил, что домен принадлежит мне, и сохранил файлы сертификатов в системную папку на моем VPS(виртуальный приватный сервер).
- Настройка инфраструктуры (Docker и Nginx)
- Порт 443. В
docker-compose.ymlоткрыл порт 443, чтобы сервер мог принимать защищенный трафик. - Монтирование папок. Добавил
volumes, чтобы Docker-контейнер «увидел» файлы сертификатов, лежащие на самом сервере. - Конфигурация Nginx. Обновил
nginx.conf, прописав там пути к сертификатам и настроив автоматический редирект: теперь любого пользователя, зашедшего наhttp, сервер мгновенно и безопасно перекидывает наhttps.
- Порт 443. В
- Автоматизация и отказоустойчивость
- Настроил
cron-job, который первого числа каждого месяца автоматически запускает процесс обновления. Так как бесплатные сертификаты Let’s Encrypt выдаются на 90 дней, после чего сайт снова станет недоступным из-за правил HSTS. - Интегрировал в команду обновления хуки (
--pre-hookи--post-hook), которые на несколько секунд останавливают Docker-контейнер для освобождения порта и запускают его обратно после успешного получения новых ключей. Это обеспечило полную автономность системы без необходимости ручного вмешательства каждые три месяца.
- Настроил
То, что начиналось как вынужденное ограничение домена .dev, привело к созданию отказоустойчивой и безопасной системы. Это еще раз доказывает недавнюю мысль в тг канале: правильные ограничения только стимулируют качественную инженерию.